2011-04-11 59 views
0

我想要使用EJB計時器服務,我有一個名爲TimerBean的類,它包含調度計時器和處理超時的方法,這實現了TimerBeanRemote接口類。EJB計時器服務錯誤

在另一個會話bean我有以下幾點:

TimerBeanRemote service = (TimerBeanRemote) new InitialContext().lookup("TimerBean/remote"); 

當我嘗試,我得到了錯誤的服務器上運行它:

javax.naming.NamingException中:查找失敗「TimerBean /遠程'在SerialContext [根異常是javax.naming.NameNotFoundException:TimerBean]

任何想法爲什麼它無法找到它?謝謝!

+0

哪個應用服務器您使用的?您的JNDI名稱似乎存在問題。您可以在啓動時在管理控制檯或服務器日誌中確認正確的名稱。 – JSS 2011-04-11 16:24:38

+0

感謝您的回覆,我正在使用glassfish。有沒有指向一些教程的鏈接,它告訴我如何設置這個JNDI的東西?對不起,新的! – FBryant87 2011-04-11 17:17:36

回答

0

如下您的評論如果您嘗試在同一容器中訪問TimerBeanRemote,則可以在您的servlet或JSF Backing Bean中注入@Remote ejb,否則您可以通過JNDI查找找到您的EJB。

假設你TimerBean是:com.mypackage.timer.TimerBeanRemote 然後按以上解釋,你可以注入或查找:

  1. 注射
    public class MyServlet ...{

    @EJB
    com.mypackage.timer.TimerBeanRemote timerBean;
    }

  2. JNDI查找:

Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
String[] serverDetails = server.split(":");
props.setProperty("org.omg.CORBA.ORBInitialHost", MyHost);
props.setProperty("org.omg.CORBA.ORBInitialPort", MyPort);

InitialContext ic = new InitialContext(props);<br> 
TimerBeanRemote timerBean = (TimerBeanRemote)ic.lookup("com.mypackage.timer.TimerBeanRemote"); 

你可以閱讀更多詳細信息,下面的文章: http://download.oracle.com/javaee/1.4/tutorial/doc/Session5.html

http://www.javabeat.net/articles/3-ejb-30-timer-services-an-overview-1.html

+0

非常感謝您的幫助! – FBryant87 2011-04-13 11:00:20