我尝试让war使用@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(lookup)一起工作?或者你可以向我保证mappedName没有那么糟糕,可以使用它吗?
发布于 2015-02-24 13:34:15
JNDI映射名称对我来说看起来很陌生。在部署服务器端应用程序之后,您能检查一下为您的EJB建立的映射名称服务器是什么吗?尝试将global之后的指针改为斜杠,即"java:global/server“。
https://stackoverflow.com/questions/28683395
复制相似问题