2015-05-13 47 views
1

我在Websphere Application Server和同一服務器上兩個不同EAR文件之間的ejb遠程查詢中遇到了一些問題。Websphere 8.5在同一應用程序服務器上的不同EAR之間進行EJB查找

有一個主要系統(EAR文件),我想從中使用另一個系統(EAR文件)的服務。所以我試圖使用遠程查找來獲取Bean。但不幸的是,我總是收到這個bean不是由主叫方的Bean定義一個例外:

主系統:main_b.ear ----主要豆:XMLSessionProxyBean

元數據的系統:metadata_b.ear - --- Metadata-Bean:MetadataServiceBean

Caused by: java.lang.IllegalArgumentException: ejb/metadata_b/metadata-service.jar/MetadataServiceBean#de.metadata.service.MetadataServiceRemote was not defined for main_b#main-ejbs.jar#XMLSessionProxyBean 
    at com.ibm.ws.ejbcontainer.runtime.SharedEJBRuntimeImpl.javaColonLookup(SharedEJBRuntimeImpl.java:692) 
    at com.ibm.ejs.container.BeanO.lookup(BeanO.java:1333) 

這是我在主系統中的查找方法。蔭使用sessionContext(不希望在一個會話,因爲我'創建InitialContext的話):

private static String METADATA_BEAN_LOOKUP = 
      "ejb/metadata_b/metadata-service.jar/MetadataServiceBean#de.metadata.service.MetadataServiceRemote"; 

public MetadataServiceRemote getMetadataService() { 
     return getLocalEJB(METADATA_BEAN_LOOKUP); 
    } 

    @SuppressWarnings("unchecked") 
    private <T> T getLocalEJB(final String jndiName) { 
     T localEjb = null; 
     final SessionContext sContext = objContext.getSessionContext(); 
     localEjb = (T) sContext.lookup(jndiName); 
     return localEjb; 
    } 

這是沒有選擇對我來說,使用注射像@EJB,也不能使用本地查找與WAS共享庫。我想我必須使用ejb-jar.xml和ibm-ejb-jar-bnd.xml。目前沒有ejb-jar.xml或其他部署描述符。所以我只使用默認綁定。

有沒有人有線索?

在此先感謝!

+0

使用全局命名空間jndiname做作業: java:global/metadata_b/metadata-service/MetadataServiceBean!de.metadata.service.MetadataServiceRemote – Daniel

回答

1

使用全局命名空間jndiname做的工作:JAVA:全球/ metadata_b /元數據服務/ MetadataServiceBean de.metadata.service. MetadataServiceRemote

:-)

+0

事實上,默認情況下,EJBContext.lookup是相對於EJB的java:comp/env命名空間的,所以除非你聲明一個EJB引用(例如'@EJB(name =「ejb/metadata_b ...」)'),您需要使用java:全局名稱。 –

相關問題