2015-02-23 116 views
0

我設置了兩個獨立的應用程序,一個與@EJB的戰爭和一個擁有@Stateless bean的耳朵 - 他們是單獨的應用程序,而不是共同應用程序的模塊。我試圖讓戰爭與@EJB註釋一起工作,但是我在運行時遇到了異常。跨應用程序查找EJB失敗

我還沒有使用任何描述符,因爲我儘量保持它儘可能簡單。

這裏的戰爭:

@EJB(lookup="java:global.myear.myejb-0.0.1-SNAPSHOT.MyEjbImpl!pl.klarki.myejbclient.MyEjb") 
private MyEjb ejb; 

這裏的例外,我得到:

Caused By: com.bea.core.repackaged.springframework.beans.factory.NoSuchBeanDefinitionException: 
No unique bean of type [pl.klarki.myejbclient.MyEjb] is defined: 
No beans of type pl.klarki.myejbclient.MyEjb; owner[email protected]22c86d85: 
display name [[email protected]2c86d85]; startup date [Mon Feb 23 21:50:23 CET 2015]; parent: com.bea.core.repac[email protected]43d7e0fc 
     at com.oracle.pitchfork.inject.Jsr250Metadata.getUniqueInstanceOfType(Jsr250Metadata.java:338) 
     at com.oracle.pitchfork.inject.Jsr250Metadata.resolveByType(Jsr250Metadata.java:332) 
     at com.oracle.pitchfork.inject.Jsr250Metadata.resolve(Jsr250Metadata.java:265) 
     at com.oracle.pitchfork.inject.Jsr250Metadata.applyInjections(Jsr250Metadata.java:218) 
     at com.oracle.pitchfork.inject.Jsr250Metadata.inject(Jsr250Metadata.java:209) 

下面的方法有效,但它不是令人滿意的,因爲我想用註釋:

ejb = (MyEjb) new InitialContext().lookup("java:global.myear.myejb-0.0.1-SNAPSHOT.MyEjbImpl!pl.klarki.myejbclient.MyEjb"); 

當我在@EJB和@Stateless中指定mappedName時,我也可以使它工作,但我已經閱讀了mapp edName是不是很酷這裏:http://thegreyblog.blogspot.com/2010/09/introduction-to-ejb-30-injection-and.html

我用這樣的映射名稱:

戰爭

@EJB(mappedName="someMappedName") 
private MyEjb ejb; 

在耳邊:

@Stateless(mappedName="someMappedName") 
public class MyEjbImpl implements MyEjb { 

你能給我一些建議什麼我應該怎樣才能使它與@EJB(查找)一起工作?或者,也許你能確保我mappedName不是很糟糕,它可以使用它嗎?

回答

0

JNDI映射名稱對我來說很陌生。你可以檢查一下,在部署服務器端應用程序之後,爲你建立的映射名稱服務器是什麼?嘗試改變全局後的點,以削減又名「java:global/server」。