您有一个Web项目和一个在同一个TomEE服务器上运行的EJB项目。
我已经在TomEE服务器的apps文件夹中部署了EJB项目,并且可以看到EJB在服务器启动时正在启动。
INFO: Jndi(name=DefaultRegistrationProcess) --> Ejb(deployment-id=DefaultRegistrationProcess)
以下是EJB项目中的@Stateless
个bean之一
@Stateless(name = "DefaultRegistrationProcess")
public class DefaultRegistrationProcess implements RegistrationProcess {
@Override
public void process(Registration registration) {
System.out.println("Hello from Default registration process!");
}
}
从Web项目我想对DefaultRegistrationProcess bean进行JNDI查找。
通过maven将EJB与Web项目打包我可以使用以下代码执行JNDI Lookup。
new InitialContext().lookup("java:module/DefaultRegistrationProcess");
当EJB单独部署时尝试执行相同的调用时,我得到了
Exception occured: Name "module/DefaultRegistrationProcess" not found.
我查看了http://tomee.apache.org/documentation.html网站并尝试了一些示例,但我仍然收到了错误。
当在同一个TomEE服务器上部署EJB时,如何在Web项目中对EJB执行本地JNDI查找?
答案 0 :(得分:0)
我必须将@Remote添加到我的DefaultRegistrationProcess
类实现的业务界面。
@Remote
public interface RegistrationProcess {
public void process(Registration registration);
}
之后,我可以使用LocalInitialContextFactory
属性和JNDI名称DefaultRegistrationProcessRemote
进行JNDI查找。
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.core.LocalInitialContextFactory");
new InitialContext(p).lookup("DefaultRegistrationProcessRemote");