我有 2 个 EJB 模块项目,我想从其中一个项目调用另一个项目的无状态无接口(interface) bean。我想注入(inject)要使用 EJB 注释调用的 bean。问题是注入(inject)不起作用(如果相关,我使用 NetBeans 7.4)。
被调用的无状态无接口(interface) EJB:
package standalonepackage;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
@Stateless
@LocalBean
public class StandaloneBean {
private static final String message="Greetings!";
public String returnMessage(){
return message;
}
}
调用上面bean的bean的接口(interface)(这个ejb驻留在另一个ejb module project中)
@Local
public interface ExampleBeanLocal {
public String getMessage();
}
接口(interface)的实现:
@Stateless
public class ExampleBean implements ExampleBeanLocal {
@EJB
private StandaloneBean standaloneBean;
@Override
public String getMessage() {
return String.format("Me - and the second message %s", standaloneBean.returnMessage());
}
}
我还有一个主类,它只是调用 ExampleBean getMessage 方法(MainClass 位于第二个 ejb 模块项目中):
public class MainClass {
private static ExampleBeanLocal instance = new ExampleBean();
public static void main(String[] args) {
System.out.println(instance.getMessage());
}
}
我错过了什么?
最佳答案
首先,如果您想以 EJB 的形式访问您的业务逻辑,那么首先您需要在应用程序服务器中部署 EJB。在部署过程中,应用程序服务器将创建一些称为 JNDI 名称的东西,它就像一个访问您的业务逻辑的入口。
其次,您可以通过两种方式调用 EJB。 1.使用JNDI名称创建ContextLookup 2.使用上下文依赖注入(inject)CDI(仅在同一个容器内)
您不能使用来自 POJO 的 CDI 调用 EJB(因为它不包含在任何容器中,并且您访问的 EJB 位于不同的 JVM 中)。如果您想从 POJO 访问 EJB,则需要使用 @Remote 并使用 ContextLookup 方式访问 EJB,您可以在此处找到更多信息 http://wiki.netbeans.org/CreatingEJB3UsingNetbeansAndGlassfish
关于java - EJB 注入(inject)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22010530/