2016-02-10 95 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