2011-04-18 67 views
2

as openejb文檔decalres在嵌入模式下使用openejb時未找到java:comp/env

牢不可破的規則。當事情不起作用時,一遍又一遍地閱讀這些內容。

  1. 的java:comp/env的爲任何容器管理資源
  2. 的java查找規範定義的命名空間:comp/env的默認情況下,空的
  3. 的java:comp/env的是隻讀的在運行時 的java:comp/env的是通過XML或註解聲明引用容器管理資源

我使用OpenEJB的嵌入式模式,DI工作正常稀少,但我想在POJO查找獲取使用標準jndi查找作爲ctx.lookup(「jav a:comp/env/DS「)我試圖通過xml和@Resource在無狀態的ejb中聲明資源,只是爲了測試env子上下文是否被填充,但我不知道爲什麼env子上下文永遠不會創建... plz help

+0

顯示相關的XML/@資源和相應的錯誤,否則你不會得到很多有用的響應。 – 2011-04-19 15:07:30

回答

5

我在測試中使用OpenEJB時遇到了類似的問題。在與OpenEJB的嵌入式測試情況下,你應該相當查找Java:OpenEJB的/不是Java:comp/env的

有了這個小片段,如果你想獲得你可以列出什麼用OpenEJB的

NamingEnumeration<Binding> list = initialContext.listBindings("java:openejb/"); 
while (list.hasMore()) { 
    Binding item = list.next(); 
    System.out.println(item.getClassName() +" :: " + "java:openejb/" + item.getName()); 
} 

註冊你的數據源列出了在「java:openejb/PersistenceUnit /」下注冊的所有東西。很可能你會在測試中找到「java:openejb/PersistenceUnit/[持久化名稱單元] [hashcode]」 - 你可以稍後使用它。

希望幫助 --Jakub

+0

這解決了我的問題;我將添加'javax.naming.NamingException:scheme java not recognized',它開始了我的搜索,可能會節省一些時間。 – 2014-07-01 11:47:10

+0

那麼爲什麼OpenEJB不使用J2EE規則(java:comp/env /)?在改爲TomEE +之後,是否仍然使用java:comp/env /?之外的java:openejb /(java:tomee /)。 – 2014-12-02 01:07:39

+0

在JavaEE6(https://docs.oracle.com/cd/E19798-01/821-1841/girgn/index.html)之前,JNDI命名是「標準化」的 - 在此之前是由集裝箱供應商決定的命名。 TomEE和OpenEJB現在都符合JavaEE6標準,並且可以在java:global/[.....]下查看bean。有關詳細信息,請參閱TomEE文檔http://tomee.apache.org/examples-trunk/lookup-of-ejbs/README.html – 2014-12-07 15:01:03

相關問題