跨应用程序查找的EJB失败

时间:2015-02-23 21:03:50

标签: java java-ee ejb jndi

我正在设置两个独立的应用程序,一个与@EJB的战争和一个带有@Stateless bean的耳朵 - 它们是单独的应用程序而不是共同应用程序的模块。我试图让战争与@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=com.oracle.pitchfork.inject.PitchforkGenericApplicationContext@22c86d85:
 display name [com.oracle.pitchfork.inject.PitchforkGenericApplicationContext@22c86d85]; startup date [Mon Feb 23 21:50:23 CET 2015]; parent: com.bea.core.repackaged.springframework.context.support.GenericApplicationContext@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时,我也可以使它工作,但我已经读到了mappedName在这里不那么酷: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没有那么糟糕,可以使用它吗?

1 个答案:

答案 0 :(得分:0)

JNDI映射名称对我来说看起来很奇怪。您能否检查一下在部署服务器端应用程序后为您建立的映射名称服务器是什么?尝试在全局之后改变点来削减aka" java:global / server"。