TomEE

时间:2016-02-10 15:43:50

标签: ejb jndi tomee

您有一个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查找?

1 个答案:

答案 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");