我正在尝试使用EJB计时器服务,我有一个名为TimerBean的类,它带有调度计时器和处理超时的方法,这实现了TimerBeanRemote的接口类。
在另一个会话bean中,我有以下内容:
TimerBeanRemote service = (TimerBeanRemote) new InitialContext().lookup("TimerBean/remote");
当我尝试在服务器上运行它时,我收到错误:
javax.naming.NamingException:SerialContext中的'TimerBean / remote'查找失败[根异常是javax.naming.NameNotFoundException:TimerBean]
为什么它找不到它的任何想法?谢谢!
答案 0 :(得分:0)
从您的评论开始 - 如果您尝试在同一容器中访问TimerBeanRemote
,那么您可以在您的servlet或JSF Backing Bean中注入@Remote
ejb,否则您可以通过JNDI找到您的EJB查找。
假设您的TimerBean是:com.mypackage.timer.TimerBeanRemote
那么根据上面的解释,你可以注入或查找:
注塑
public class MyServlet ...{
@EJB
com.mypackage.timer.TimerBeanRemote timerBean;
}
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");
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