我試圖實現一個WebLogic作業調度示例,以測試我的集羣在計劃任務上的故障切換功能(以確保這些任務在故障切換方案上執行)。WebLogic作業調度
考慮到這一點,我一直在關注this example並試圖相應地配置一切。下面是我到目前爲止已經完成的步驟:
- 配置集羣1個管理員 服務器(AdminServer中)和2個管理的 實例(諾迪和史努比);
- 設置數據庫表(使用Oracle XE):
ACTIVE
和WEBLOGIC_TIMERS
; - 設置訪問數據庫的數據源,並將 與調度 任務相關聯的任務在「設置羣集」> 「調度」下執行。
- 實施的作業(
TimerListener
) 和的servlet初始化作業 調度,如下:
。
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()));
}
}
}
然後我執行小服務程序啓動所述第一被管理的實例調度(諾迪服務器),其返回作爲預期:
(Servlet的執行輸出)
服務()輸入try block到 初始化JNDI的計時器
jobScheduler參考 [email protected]
定時器預定!
服務()啓動定時器
啓動的計時器 - 狀態:
這導致我的數據庫表創建的2行:
WEBLOGIC_TIMERS
表狀態後, servlet執行:「編輯」; 「TIMER_ID」; 「監聽器」; 「開始時間」; 「間隔」; 「TIMER_MANAGER_NAME」; 「DOMAIN_NAME」; 「CLUSTER_NAME」;
「」; 「Noddy_1268653040156」; 「[數據類型]」; 「1268653040156」; 「30000」; 「weblogic的。的jobscheduler「; 」myCluster中「; 」集羣「 的servlet執行後
ACTIVE
表狀態:」EDIT「, 」服務器「, 」INSTANCE「; 」DOMAINNAME「; 」CLUSTERNAME「; 」超時「;
「」; 「service.SINGLETON_MASTER」; 「6382071947583985002 /諾迪」, 「QRENcluster」; 「集羣」; 「15年3月10日」
雖然沒有如期執行作業它應該在服務器的日誌輸出(Noddy.out
文件)w上打印一條消息ith一個時間戳,說定時器已經過期。它沒有。我的日誌文件狀態如下:
管理服務器日誌(myCluster.log
文件):
####<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.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.>
(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.>
任何人都可以幫助我發現我的配置有什麼問題嗎?在此先感謝您的幫助!
史努比此時是否也在運行?你嘗試過從Snoopy發射servlet - 只是想到了 – JoseK 2010-03-15 13:39:31
試過了,但它沒有改變任何東西。我嘗試重新啓動機器(主機羣集,因爲它是虛擬機上的本地配置),我得到的只是Noddy的LOG(「Noddy.log」文件)上的差異:«## ## <15/Mar/2010 14H53m GMT><[ACTIVE] ExecuteThread:'2'for queue:'weblogic.kernel.Default(self-tuning)'><><><><1268664789340>» –
XpiritO
2010-03-15 14:56:08
我可以看到你在Oracle論壇上也沒有回覆。但不是這個「Singleton服務TimerMaster現在在這個服務器上活躍」來自早期的成功信息? – JoseK 2010-03-18 12:53:49