使用 glassfish4 在 Servlet 中注入 EJB
EJB injection in Servlet with glassfish4
我有一个 servlet class,它与 glassfish3 和 Java-7 一起工作得很好。
耳朵包含这些资源:
- x.ear
- x.war
- x-interface.jar
- x-ejb.jar
war 文件中的 Servlet 如下所示:
@Path("/X")
@ManagedBean
public class XWebservice {
@EJB
SessionBeanRemoteInterface bean;
@GET
public String get() {
return bean.sessionBeanMethod();
}
}
ejb-jar 中的 bean 如下所示:
@Stateless
public class XBean implements SessionBeanRemoteInterface {
}
为什么这在使用 Java-8 的 glassfish 4.1.1 中不再起作用? (NullPointerException, bean 为空)
手动查找,但工作正常:
new InitialContext().lookup(SessionBeanRemoteInterface.class.getName()).sessionBeanMethod();
我通过向 Web 服务添加 @RequestScoped
注释解决了这个问题。
或者 @Singleton
似乎也有效。
你有多少个实现?如果多于一个,则使用限定符 (https://docs.oracle.com/javaee/6/tutorial/doc/gjbck.html) or alternatives (https://docs.oracle.com/javaee/6/tutorial/doc/gjsdf.html)。如果容器无法选择注入是不行的。
我有一个 servlet class,它与 glassfish3 和 Java-7 一起工作得很好。
耳朵包含这些资源:
- x.ear
- x.war
- x-interface.jar
- x-ejb.jar
war 文件中的 Servlet 如下所示:
@Path("/X")
@ManagedBean
public class XWebservice {
@EJB
SessionBeanRemoteInterface bean;
@GET
public String get() {
return bean.sessionBeanMethod();
}
}
ejb-jar 中的 bean 如下所示:
@Stateless
public class XBean implements SessionBeanRemoteInterface {
}
为什么这在使用 Java-8 的 glassfish 4.1.1 中不再起作用? (NullPointerException, bean 为空)
手动查找,但工作正常:
new InitialContext().lookup(SessionBeanRemoteInterface.class.getName()).sessionBeanMethod();
我通过向 Web 服务添加 @RequestScoped
注释解决了这个问题。
或者 @Singleton
似乎也有效。
你有多少个实现?如果多于一个,则使用限定符 (https://docs.oracle.com/javaee/6/tutorial/doc/gjbck.html) or alternatives (https://docs.oracle.com/javaee/6/tutorial/doc/gjsdf.html)。如果容器无法选择注入是不行的。