我们在Weblogic 10.3.x上运行了一个多模块Java EE 5项目。一个模块具有EJB,我们的批处理器从Web模块运行。由于我们在JavaEE5中没有CDI,因此我们必须对EJB进行JNDI查找。 EJB在类上定义为@Stateless,在接口上定义为@Remote。
我通过查看以下字符串成功访问了EJB:
ejb/batchService#com.example.service.batch.ejb.BatchServiceRemote
但是,我相信这是高度依赖平台的,我怀疑我应该在web.xml中放置一些内容,至少在web模块中可能放入weblogic.xml中 - 甚至可能在EJB模块中...... / p>
有人可以告诉我如何做到这一点吗?或者这是最好的方式吗?
答案 0 :(得分:1)
本地bean的JNDI格式是
java:comp/env/BeanClassName
远程bean的JNDI格式是
mappedName#com.package.BeanClassName
代表
@Stateless(mappedName = "mappedName")
public class BeanClassName {
PS。 WebLogic 10.3
支持此格式。另一个应用程序服务器的行为可能不同
答案 1 :(得分:0)
在EJB 3.1 / EE 6之前,EJB没有标准化的查找字符串。由于它们不是标准化的,因此对EJB的实际绑定名称进行硬编码确实会使您的项目特定于产品。
最好的解决方案是创建另一个间接层:在web.xml中声明<ejb-local-ref>
(或在servlet或其他组件类上声明为@EJB
/ @EJBs
),然后使用java:comp/env/xyz
查找引用。然后,为EJB ref使用特定于平台的绑定。