2015-02-23 114 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”。