WebLogic-job-scheduling

Ich versuche zu implementieren ist eine WebLogic-job-scheduling-Beispiel, um zu testen, meine cluster-Funktionen fail-over auf geplante tasks (um sicherzustellen, dass diese Aufgaben ausgeführt werden, die auf Failover-Szenario).

Mit diesem im Verstand, ich habe folgende dieses Beispiel und versucht zu konfigurieren, das alles entsprechend. Hier sind die Schritte, die ich bisher getan habe:

  1. Konfiguriert ein cluster mit 1 admin
    server (AdminServer) und 2 geschafft
    Instanzen (Noddy und Snoopy);
  2. Einrichten der Datenbank-Tabellen (Oracle
    XE): ACTIVE und WEBLOGIC_TIMERS;
  3. Einrichten der Datenquelle für den Zugriff auf DB-und
    verbunden es um die Planung
    Aufgaben, die Sie unter "Einstellungen für cluster" >
    "Scheduling";
  4. Implementiert einen job (TimerListener)
    und ein servlet zu initialisieren, den job
    Planung wie folgt:

.

package timedexecution;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import commonj.timers.Timer;
import commonj.timers.TimerListener;
import commonj.timers.TimerManager;

public class TimerServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected static void logMessage(String message, PrintWriter out){
        out.write("<p>"+ message +"</p>");
        System.out.println(message);
    }

    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        //
        out.println("<html>");
        out.println("<head><title>TimerServlet</title></head>");
        //
        try {
            //
            logMessage("service() entering try block to intialize the timer from JNDI", out);
            //
            InitialContext ic = new InitialContext();
            TimerManager jobScheduler = (TimerManager)ic.lookup("weblogic.JobScheduler");
            //
            logMessage("jobScheduler reference " + jobScheduler, out);
            //
            jobScheduler.schedule(new ExampleTimerListener(), 0, 30*1000);            
            //
            logMessage("Timer scheduled!", out);
            //
            //execute this job every 30 seconds
            logMessage("service() started the timer", out);
            //
            logMessage("Started the timer - status:", out);
            //
        }
        catch (NamingException ne) {
            String msg = ne.getMessage();
            logMessage("Timer schedule failed!", out);
            logMessage(msg, out);
        }
        catch (Throwable t) {
            logMessage("service() error initializing timer manager with JNDI name weblogic.JobScheduler " + t,out);
        }
        //
        out.println("</body></html>");
        out.close();
    }


    private static class ExampleTimerListener implements Serializable, TimerListener {
        private static final long serialVersionUID = 8313912206357147939L;

        public void timerExpired(Timer timer) {
            SimpleDateFormat sdf = new SimpleDateFormat();
            System.out.println( "timerExpired() called at " + sdf.format( new Date() ) );
        }
    }

}

Dann habe ich ausgeführt, das servlet zu starten, die Terminierung auf das erste verwaltete Instanz (Noddy server), die wie erwartet zurückgegeben:

(Servlet Ausführung Ausgang)

service() try-block betreten
intialize der timer von JNDI

jobScheduler Referenz
weblogic.scheduler.TimerServiceImpl@43b4c7

Timer geplant!

service() gestartet wird der timer

Begann den timer - status:

Welche in Folge in die Erstellung von 2 Zeilen in meiner DB-Tabellen:

  • WEBLOGIC_TIMERS Tabelle Stand nach servlet-Ausführung:

    "BEARBEITEN"; "TIMER_ID"; "HÖRER"; "START_TIME"; "INTERVAL"; "TIMER_MANAGER_NAME"; "DOMAIN_NAME"; "CLUSTER_NAME";

    ""; "Noddy_1268653040156"; "[Datentyp]"; "1268653040156"; "30000"; "weblogic.JobScheduler"; "myCluster"; "Cluster"

  • ACTIVE Tabelle Stand nach servlet-Ausführung:

    "BEARBEITEN"; "SERVER"; "BEISPIEL"; "DOMAINNAME"; "CLUSTERNAME"; "TIMEOUT";

    ""; "- service.SINGLETON_MASTER"; "6382071947583985002/Noddy"; "QRENcluster"; "Cluster"; "10.03.15"

Obwohl der job wird nicht ausgeführt wie geplant. Es sollte drucken Sie eine Nachricht auf dem server die log-Ausgabe (Noddy.out- Datei) mit einem Zeitstempel, zu sagen, dass der timer abgelaufen war. Tut es das nicht. Mein log-Dateien Staates, wie folgt:

Admin server log (myCluster.log- Datei):

####<15/Mar/2010 10H45m GMT> <Warning> <Cluster> <test-ad> <Noddy> <[STANDBY] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1268649925727> <BEA-000192> <No currently living server was found that could host TimerMaster. The server will retry in a few seconds.> 

Noddy server melden
(Noddy.out- Datei):

service() entering try block to intialize the timer from JNDI
jobScheduler reference weblogic.scheduler.TimerServiceImpl@43b4c7
Timer scheduled!
service() started the timer
Started the timer - status:
<15/Mar/2010 10H45m GMT> <Warning> <Cluster> <BEA-000192> <No currently living server was found that could host TimerMaster. The server will retry in a few seconds.> 

(Noddy.log- Datei):

####<15/Mar/2010 11H24m GMT> <Info> <Common> <test-ad> <Noddy> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1268652270128> <BEA-000628> <Created "1" resources for pool "TxDataSourceOracle", out of which "1" are available and "0" are unavailable.> 
####<15/Mar/2010 11H37m GMT> <Info> <Cluster> <test-ad> <Noddy> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1268653040226> <BEA-000182> <Job Scheduler created a job with ID Noddy_1268653040156 for TimerListener with description timedexecution.TimerServlet$ExampleTimerListener@2ce79a> 
####<15/Mar/2010 11H39m GMT> <Info> <JDBC> <test-ad> <Noddy> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1268653166307> <BEA-001128> <Connection for pool "TxDataSourceOracle" closed.> 

Kann jemand mir helfen, zu entdecken, was ist falsch an meiner Konfiguration? Vielen Dank im Voraus für Eure Hilfe!

Ist Snoopy auch zu diesem Zeitpunkt gestartet? Haben Sie versucht, die Entlassung der servlet von Snoopy - nur so ein Gedanke
Probiert, aber es nicht etwas ändern. Ich habe versucht, den Rechner neu zu starten (die hosts der Loch-cluster, wie es eine lokale Konfiguration auf einer virtuellen Maschine) und alles was ich bekam, war diese Differenz auf Noddy ' s LOG ("Noddy.log" - Datei): «####<15/Mar/2010 14H53m GMT> <Info> <Cluster> <test-Anzeige> <Noddy> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1268664789340> <BEA-000189> <Die Singleton-Service TimerMaster ist jetzt aktiv auf diesem server.>»
Ich sehe Sie haben keine Antwort auf die Oracle-forum. aber nicht dieses "Die Singleton-Service TimerMaster ist jetzt aktiv auf diesem server" eine Erfolgsmeldung aus der früheren?
Ich denke nicht so, wie ich es Herunterfahren alle Server (admin-und managed-Server) und dann gelöscht, die log-Dateien. Diese Nachrichten, bei denen protokolliert, nachdem cluster neu starten.

InformationsquelleAutor XpiritO | 2010-03-15

Schreibe einen Kommentar