[英]EJB Injection error
I have an EAR file (JEE6) containing one ejb-jar (sample-ejb) file and one war file (sample-web). 我有一个EAR文件(JEE6),其中包含一个ejb-jar(sample-ejb)文件和一个war文件(sample-web)。 Here is the structure:
结构如下:
sample-ear
|----sample-ejb.jar
| |---TestEjb.java (@Singleton)
|
|----sample-web
|---StartupEjb.java (@Singleton,@Startup)
|---TestListener.java (@WebListener)
when I want to inject TestEjb to StartupEjb or TestListener: 当我想将TestEjb注入StartupEjb或TestListener时:
@EJB
private TestEjb testEjb;
I get following error: 我收到以下错误:
Glassfish: 玻璃鱼:
Caused by: com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=com.sample.StartupEjb/testEjb,Remote 3.x interface =com.sample.TestEjb,ejb-link=null,lookup=,mappedName=,jndi-name=com.sample.TestEjb,refType=Session into class com.sample.StartupEjb: Lookup failed for 'java:comp/env/com.sample.StartupEjb/testEjb' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
weblogic: weblogic:
Caused By: weblogic.application.naming.ReferenceResolutionException: [J2EE:160200]Error resolving ejb-ref "com.sample.StartupEjb/testEjb" from module "sample-web-1.0-SNAPSHOT.war" of application "com.sample_sample-ear_ear_1.0-SNAPSHOT". The ejb-ref does not have an ejb-link and the JNDI name of the target bean has not been specified. Attempts to automatically link the ejb-ref to its target bean failed because no EJBs in the application were found to implement the "com.sample.TestEjb" interface. Link or map this ejb-ref to its target EJB and ensure the interfaces declared in the ejb-ref are correct.
Both Glassfish and Weblogic can not find TestEjb! Glassfish和Weblogic都找不到TestEjb!
By the way, when I create a remote interface for TestEjb and use that for injection it works well! 顺便说一句,当我为TestEjb创建一个远程接口并将其用于注入时,它运行良好! But I don't want to define remote interfaces and I want to use EJB with no interface.
但是我不想定义远程接口,我想使用没有接口的EJB。 I don't think that I must define a remote interface for this simple usecase!
我认为我不必为此简单用例定义一个远程接口!
You can download the source code from here: https://dl.dropbox.com/sh/63hn3n9y3p5ypvi/SsG9iZIvx9/sample.zip?dl=1 您可以从此处下载源代码: https : //dl.dropbox.com/sh/63hn3n9y3p5ypvi/SsG9iZIvx9/sample.zip?dl=1
It's a simple Maven project created using NetBeans. 这是使用NetBeans创建的一个简单的Maven项目。
You normaly MUST define a local interface, eg 通常,您必须定义一个本地接口,例如
@Singleton
@Local(PublicInterface.class)
public class MyBean implements PublicInterface {
...
}
If you explicitly avoid this interface you must mark your bean as @LocalBean: 如果您明确避免使用此接口,则必须将bean标记为@LocalBean:
@Singleton
@LocalBean
public class MyBean {
...
}
PS: Code is untested but should help. PS:代码未经测试,但应该会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.