2017-09-15 136 views
0

我有一個運行在JBOSS 4.2.3GA上的EJB2應用程序,並且查找工作正常,使用:java:comp/env/ejb/MyEJBJava EJB2 JNDI從Jboss 4遷移到Jboss時查找失敗6

當移動到JBOSS AS 6.1.Final時,它突然打破了異常NameNotFoundException。

JNDI View顯示EJB綁定到正確的樹。在查找之前放置一個斷點,我可以觀察並確認它是綁定的。使用context.list("java:comp/env/ejb"),我能夠在迭代器中看到MyEJB。使用context.lookup("java:comp/env/ejb")也可以。但是context.lookup("java:comp/env/ejb/MyEJB")在監視窗口上顯示NamingException(運行實際代碼時出現NameNotFoundException)。

有什麼改變,我不知道?很難找到關於這個EJB的信息,而且我發現的任何信息都會證明我正在做的是正確的,或者說使用ejb/MyEJB,這根本不起作用。

在此先感謝。我感謝您的幫助。

ejb-jar.xml中:

<session> 
     <ejb-name>AdminSessionEJB</ejb-name> 
     <local-home>com.admin.ejb.business.AdminSessionHome</local-home> 
     <local>com.admin.ejb.business.AdminSession</local> 
     <ejb-class>com.admin.ejb.business.AdminSessionEJB</ejb-class> 
     <session-type>Stateless</session-type> 
     <transaction-type>Container</transaction-type> 
     <ejb-local-ref> 
      <ejb-ref-name>ejb/UserEJB</ejb-ref-name> 
      <ejb-ref-type>Entity</ejb-ref-type> 
      <local-home>com.admin.ejb.entity.UserHome</local-home> 
      <local>com.admin.ejb.entity.User</local> 
      <ejb-link>UserEJB</ejb-link> 
     </ejb-local-ref> 
     <ejb-local-ref> 
      <ejb-ref-name>ejb/UniqueKeyEJB</ejb-ref-name> 
      <ejb-ref-type>Entity</ejb-ref-type> 
      <local-home>com.framework.ejb.entity.UniqueKeyHome</local-home> 
      <local>com.framework.ejb.entity.UniqueKey</local> 
      <ejb-link>UniqueKeyEJB</ejb-link>    
     </ejb-local-ref> 
     <ejb-local-ref> 
      <ejb-ref-name>ejb/UserGroupEJB</ejb-ref-name> 
      <ejb-ref-type>Entity</ejb-ref-type> 
      <local-home>com.admin.ejb.entity.UserGroupHome</local-home> 
      <local>com.admin.ejb.entity.UserGroup</local> 
      <ejb-link>UserGroupEJB</ejb-link> 
     </ejb-local-ref> 
</session> 

的jboss.xml:

<enterprise-beans> 
     <entity> 

     <ejb-name>UserEJB</ejb-name> 
     <local-jndi-name>ejb/UserHome</local-jndi-name> 
     <read-only>false</read-only> 
     <configuration-name>UserEJB Container Configuration</configuration-name>    
     <ejb-local-ref> 
      <ejb-ref-name>ejb/UserGroupEJB</ejb-ref-name> 
      <local-jndi-name>ejb/UserGroupHome</local-jndi-name> 
     </ejb-local-ref> 
    </entity> 
</enterprise-beans> 
+0

在Github上找到一個工作示例請出示從您的ejb-jar.xml文件的EJB聲明,並從您的jboss.xml中的文件對應的XML XML聲明。 –

+0

我已經發布了UserEJB的部分,這正是我正在測試的內容。讓我知道你是否需要更多。謝謝。 – user3758745

+0

我認爲你需要從jboss.xml文件中刪除' ejb/UserHome',因爲容器應該從' UserEJB' ejb-jar.xml文件。另外,把' ...'放在jboss.xml文件中是沒有意義的(除非你試圖覆蓋ejb-jar的內容.xml文件)。 –

回答

0

它看起來像新的JBoss/WildFly版本不能很好地處理舊的部署描述符。

如果您更新了ejb-jar.xml中的模式:

<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" 
     version="2.1"> 

至少:

<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" 
     version="3.0"> 

那麼它應該工作作爲標榜。

您可以在javaee14-ejb-demo

+0

我的歉意,你花了這麼多時間來測試所有這些情況。我嘗試了它們,但從2_0.dtd切換到3_0.xsd後遇到了很多問題,並將1導致另一個導致另一個問題,所以現在我必須使用以前的解決方案。最終目標是野蠻10.0,我敢肯定我會再次遇到這個問題。那時我會玩它。再一次,我非常感謝你的時間,史蒂夫。 – user3758745

0

(使用類名在這種情況下)獲取上下文中的EJB:

public static <T> T getInstance(final Class<T> type) { 
    T result = null; 
    try { 
     InitialContext ctx = new InitialContext(); 
     BeanManager manager = (BeanManager) ctx.lookup("java:comp/BeanManager"); 
     Set<Bean<?>> beans = manager.getBeans(type); 
     Bean<T> bean = (Bean<T>) manager.resolve(beans); 
     if (bean != null) { 
      CreationalContext<T> context = manager.createCreationalContext(bean); 
      if (context != null) { 
       result = (T) manager.getReference(bean, type, context); 
      } 
     } 
    } catch (NamingException e) { 
     throw new RuntimeException(e); 
    } 
    return result; 
} 
+0

我添加了'cdi-api-1.2.jar'並嘗試你的代碼片段,但是'ctx.lookup(「java:comp/BeanManager」)返回null。我是否需要在xml中爲BeanManager設置配置?如果這個BeanManager可以以某種方式獲得EJB,它必須在後臺執行相同的查找,對嗎?那麼在那種情況下,是不是我的查找字符串不正確? – user3758745