J'essaie d'implémenter un exemple de planification de travail WebLogic, pour tester les capacités de basculement de mon cluster sur des tâches planifiées (pour m'assurer que ces tâches sont exécutées sur un scénario de basculement). Dans cet esprit, j'ai suivi this example et essayer de tout configurer en conséquence. Voici les étapes que je l'ai fait jusqu'à présent:Planification de travaux WebLogic
- Configuré un cluster avec 1 serveur admin (AdminServer) et 2 (instances gérées Noddy et Snoopy);
- Configuration des tables de base de données (à l'aide d'Oracle XE):
ACTIVE
etWEBLOGIC_TIMERS
; - Configurer la source de données pour accéder à la base de données et l'associer aux tâches de planification sous "Paramètres pour cluster"> "Planification";
- mis en oeuvre un travail (
TimerListener
) et un servlet pour initialiser l'ordonnancement travail , comme suit:
.
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()));
}
}
}
J'exécuté le servlet pour commencer la programmation de la première instance gérée (Noddy serveur), qui est revenu comme prévu:
(Servlet sortie d'exécution)
service() saisie try block à initialiser la minuterie de JNDI
référence JobScheduler [email protected]
Minuterie programmée!
Service() a commencé la minuterie
a commencé la minuterie - état:
Ce qui a donné lieu à la création de 2 lignes dans mes tables de DB:
état de table
WEBLOGIC_TIMERS
après exécution de la servlet:"EDIT"; "TIMER_ID"; "AUDITEUR"; "HEURE DE DÉBUT"; "INTERVALLE"; "TIMER_MANAGER_NAME"; "NOM DE DOMAINE"; "CLUSTER_NAME"
""; "Noddy_1268653040156"; "[Type de données]"; "1268653040156"; "30000"; "weblogic.JobScheduler "; "myCluster"; "cluster"
état de table
ACTIVE
après l'exécution de servlets:"EDIT", "serveur"; "INSTANCE"; "DOMAINNAME"; "CLUSTERNAME"; "TIMEOUT";
""; "service.SINGLETON_MASTER", "6382071947583985002/Noddy"; "QRENcluster", "cluster"; "03.10.15"
Bien que, le travail n'est pas exécuté comme prévu Il devrait imprimer un message sur la sortie du journal du serveur (fichier Noddy.out
) w un horodatage, disant que la minuterie avait expiré. Ce n'est pas le cas. Mes fichiers journaux sont libellés comme suit:
Administrateur serveur log (myCluster.log
fichier):
####<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.>
serveur Noddy journal (fichier Noddy.out
):
service() entering try block to intialize the timer from JNDI
jobScheduler reference [email protected]
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.>
(fichier Noddy.log
) :
####<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 [email protected]>
####<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.>
Quelqu'un peut-il m'aider à découvrir ce qui ne va pas avec ma configuration? Merci d'avance pour votre aide!
Snoopy fonctionne-t-il également en ce moment? Avez-vous essayé de tirer le servlet de Snoopy- juste une idée – JoseK
J'ai essayé cela, mais cela n'a rien changé. J'ai essayé de redémarrer la machine (qui héberge le cluster de trous, comme c'est une configuration locale sur une machine virtuelle) et tout ce que j'ai c'est cette différence sur le LOG de Noddy (fichier "Noddy.log"): ## <15/Mar/2010 14H53m GMT><[ACTIVE] ExecuteThread: '2' pour la file d'attente: 'weblogic.kernel.Default (auto-tuning)'><><><><1268664789340> –
XpiritO
Je vois que vous n'avez pas non plus de réponse sur le forum Oracle. mais n'est ce pas "Le Singleton Service TimerMaster est maintenant actif sur ce serveur" un message de succès de la précédente? – JoseK