【发布时间】:2015-08-12 04:24:35
【问题描述】:
一方面,我有一个实现远程接口的无状态 EJB Bean。
@Stateless(name = "ejbBean")
@Remote(TimedBean.class)
public class TimedBeanImpl implements TimedBean
...
另一方面,我有一个 Servlet 客户端,我需要在其中注入此 EJB bean 以调用其操作。注入指的是服务器自动生成的一个JNDI:
public class LoadTimer implements ServletContextListener {
// EAR Local Mapping - EAR Dev Mapping
// @EJB(mappedName = "java:global/appTest/appTestModuleOne-01.00.00/ejbBean")
@EJB(mappedName = "java:global/appTest-01.00.00/appTestModuleOne-01.00.00/ejbBean")
private TimedBean timedBean;
@Override
public void contextInitialized(ServletContextEvent servletcontextevent) {
...
它有效。
但是引用自动生成的jndi这一事实使得解决方案高度依赖于具体环境:
- 这取决于服务器。例如,我用于测试的本地服务器是 JBOSS 7.1,而我的开发服务器是 JBOSS EAP 6.2,并且自动生成的 jndi 是不同的。
- 这取决于包装。 Not is the same 指的是在 EAR 文件中部署的 ejbBean 与在 WAR 文件中部署的不同。
- 这取决于工件的版本。更多变化。
我想,如果可能的话,就是为bean指定一个唯一的名字,可以在每个服务器中引用servlet,对每个版本进行打包,以便在开发中不必进行不断的更改,避免出现错误部署。
您好!
【问题讨论】:
标签: servlets ejb jndi java-ee-6 inject