2014-12-27 83 views
2

從使用本地接口的戰爭中訪問ejb駐留在ear文件中是否可能?
兩者都部署在同一個應用程序服務器下。通過本地接口從戰爭中訪問ejb

的EJB:現在

@Stateless(name="FirstDemoEJB",mappedName = "FirstDemoEJB/Local") 
public class FirstSessionBean implements FirstSessionBeanRemote, FirstSessionBeanLocal { 
} 

,在測試的servlet(戰爭):

InitialContext context = new InitialContext();   
Object ob = context.lookup("java:comp/env/FirstDemoEJB/Local"); 

失敗的:

javax.naming.NameNotFoundException:在試圖查找 comp/env/FirstDemoEJB/Local in/app/webapp/FirstWebEJBTest/12292093。

但遠程查找工作正常:

Object ob = context.lookup("FirstDemoEJB/Local#org.weblogic.FirstSessionBeanRemote"); 
+0

在WebLogic中(據我所知),你可以在那裏使用'RemoteInterface'。容器檢查它是否真的是一個'LocalInterface'並儘可能地將它作爲一個使用。規格不允許相反。 –

+0

我知道JBoss AS7在這方面遇到了一些麻煩。只是提到它來表明這可能是他們最終的問題。 – keyser

回答

1

你應該使用容器依賴injecction到從servlet訪問EJB。最有可能的問題是你的jndi查找路徑不正確。使用容器依賴注入可以讓您瞭解jndi的命名方案。

public class MyServlet extends HttpServlet { 
    @EJB(mappedName = "FirstDemoEJB/Local") 
    private FirstSessionBeanLocal firstSessionBeanLocal; 
} 
+0

只需添加上面的註釋? – Tirmean

+0

我想你可能還需要meta-inf文件夾中的空beans.xml文件,也許不需要。欲瞭解更多信息,請參閱:http://www.oracle.com/technetwork/articles/java/cdi-javaee-bien-225152.html –