2011-04-11 60 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