2016-02-10 97 views
0

您有一个Web项目和一个在同一个TomEE服务器上运行的EJB项目。在TomEE上的JNDI查找

我已经在TomEE服务器的apps文件夹中部署了EJB项目,并且可以看到EJB在服务器启动时正在启动。

INFO: Jndi(name=DefaultRegistrationProcess) --> Ejb(deployment-id=DefaultRegistrationProcess) 

下面是@Stateless豆在EJB项目

@Stateless(name = "DefaultRegistrationProcess") 
public class DefaultRegistrationProcess implements RegistrationProcess { 

    @Override 
    public void process(Registration registration) { 
     System.out.println("Hello from Default registration process!"); 
    } 

} 

从Web项目,我希望做一个JNDI查找到DefaultRegistrationProcess豆之一。

通过maven打包带有Web项目的EJB我可以使用以下代码执行JNDI查找。

new InitialContext().lookup("java:module/DefaultRegistrationProcess"); 

当试图做同样的呼叫时,EJB是单独部署我得到

Exception occured: Name "module/DefaultRegistrationProcess" not found. 

我已经通过http://tomee.apache.org/documentation.html现场看了一下,尝试了一些例子,但我仍然得到错误。

如何在Web项目中将本地JNDI Lookup部署到相同的TomEE服务器上时执行EJB?

+0

您能否提供一些关于您正在使用的服务器版本以及您遵循哪个Java EE规范的信息? – javapapo

+0

我正在使用Apache-tomee-1.7.1-plus。以下是我尝试过的,http://tomee.apache.org/basics---getting-things.html http://tomee.apache.org/lookup-of-other-ejbs-example.html – Rentius2407

+0

你可以吗请提供您的JNDI树? – aribeiro

回答

0

我必须在我的DefaultRegistrationProcess类实现的业务接口上添加@Remote。

@Remote 
public interface RegistrationProcess { 

    public void process(Registration registration); 

} 

之后,我可以使用LocalInitialContextFactory财产和DefaultRegistrationProcessRemote JNDI名称进行JNDI查找。

Properties p = new Properties(); 
p.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.core.LocalInitialContextFactory"); 
new InitialContext(p).lookup("DefaultRegistrationProcessRemote"); 
+0

就像一个侧面说明,使用'org.apache.openejb.core.LocalInitialContextFactory'而不是'org.apache.openejb.client.LocalInitialContextFactory',后者是'@ Deprecated' – Rentius2407