我设置了两个独立的应用程序,一个与@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不是很糟糕,它可以使用它吗?