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:
- Konfiguriert ein cluster mit 1 admin
server (AdminServer) und 2 geschafft
Instanzen (Noddy und Snoopy); - Einrichten der Datenbank-Tabellen (Oracle
XE):ACTIVE
undWEBLOGIC_TIMERS
; - Einrichten der Datenquelle für den Zugriff auf DB-und
verbunden es um die Planung
Aufgaben, die Sie unter "Einstellungen für cluster" >
"Scheduling"; - 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 JNDIjobScheduler Referenz
weblogic.scheduler.TimerServiceImpl@43b4c7Timer 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!
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich stellte sich heraus, lösen dieses problem durch einen Neustart des ganzen system und dann starten Sie WebLogic-Instanzen von der Befehlszeile aus. In dieser Perspektive habe ich es geschafft, diese in die Arbeit, mit der Ausgabe an die Befehlszeile.
Ich möchte allen danken die versucht haben mir zu helfen, dies zu lösen.
InformationsquelleAutor XpiritO
Versuchen Sie auch das hinzufügen der debug (JAVA_OPTIONS: -Dweblogic.debug.DebugSingletonServices=true -Dweblogic.JobScheduler=true)
Für mich, es war nicht genug, um es nur in der server-Start-Parameter über die Konsole. Ich musste in setDomainEnv.sh.
InformationsquelleAutor Radek Skokan