2014-07-10 217 views
0

我嘗試在jboss7服務器上部署jboss5 bean項目包。其他開發人員已經對代碼在jboss7上工作做了一些改變,比如將jboss-deployment-structure.xml放入項目中。EJB 3.1問題

我創建了兩個bean,一個在項目A(BeanA)中,另一個在項目B(BeanB)中。 BeanA不得不查找BeanB。我總是得到「沒有與類型的接口 'de.foo.soa.foobar.al.BeanB' 發現EJB綁定de.foo.soa.foobar.ba.ProjectB/BeanB

豆B:

import javax.ejb.Stateless; 
    import javax.ejb.LocalBean; 

    @Stateless 
    @LocalBean 
    public class NumSrvLocalBean { 

     public String testNumSrv() { 
      return "numsrv works"; 
     } 
    } 

bean中的作用:

@EJB private NumSrvLocalBean numSrvLocalBean; 
private String numSrvLocalBean_path = "java:module/NumSrvLocalBean!de.foo.soa.foobar.al.NumSrvLocalBean"; 
ctx = new InitialContext(); 
numSrvLocalBean = (NumSrvLocalBean) ctx.lookup(numSrvLocalBean_path); 

我還添加合適的依賴性到JBoss部署-structure.xml:

<module name="deployment.ProjectB.jar" export="true"/> 

所以evertything對我的理解很好,但我總是得到這個例外。我創建了自己的項目,讓我們稱它爲項目X.在那裏我可以查找任何其他項目的Bean(大約15)。我不能在項目A中注入項目A以外的任何bean。但是我可以在項目中注入bean。所以必須有東西阻塞項目中的bean。

我有在項目中的此文件:

  • 的jboss.xml
  • JBoss的部署,structure.xml
  • MANIFEST.MF(標準,未填寫)
  • 持久性。 xml
  • seam.properties
  • ProjectA.properties(包含一個wsdlUrl,因爲此項目也被配置爲XML-RPC項目)

我期待了四個你的想法,

問候。

+0

我不確定在這裏,但AFAIK'java:module'意味着在_current_模塊中查找,這就是爲什麼您可以從BeanA查找BeanC。您需要將模塊名稱添加到查找路徑。查看管理控制檯(默認情況下爲端口9990)並檢查綁定的JNDI路徑。 – Thomas

+0

你是對的,但我也用'global:..'來測試它。 那就是結果: 15:32:38,953錯誤[stderr](MSC服務線程1-5)javax.naming.NameNotFoundException:ProjectA/ProjectA!de.foo.soa.foobar.ba.BeanA - service jboss.naming .context.java.global.ProjectA。「BeanA!de.foo.soa.foobar.ba.BeanA」 15:32:38,955 ERROR [stderr](MSC service thread 1-5)\t at org.jboss.as .naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97) (和更多行)。 – JeromeC

+0

糾正我,如果我錯了,但我不會看到管理控制檯中的任何東西,因爲沒有任何部署錯誤的原因。 – JeromeC

回答

0

我使用EJB(mappedName =「java:global/....」)解決了這個問題。 我已經嘗試過EJB(mappedName = className.JNDI_NAME),但這沒有奏效。我們在JBoss 5中使用了接口,在這裏我們定義了JNDI名稱,如

@Local 
public interface ClassNameLocal extends ClassNameInterface { 

    /** Name im JNDI (Java Naming and Directory Interface) */ 
    public final static String JNDI_NAME = "foo/bar/and/so/on/ClassName/local"; 

} 

這似乎不工作了。我需要使用完整的路徑。