0

我们有一个在 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 模块中......

谁能启发我如何正确地做到这一点?或者这是最好的方法吗?

4

2 回答 2

1

本地 bean 的 JNDI 格式是

java:comp/env/BeanClassName  

远程 bean 的 JNDI 格式是

mappedName#com.package.BeanClassName  

为了

@Stateless(mappedName = "mappedName")
public class BeanClassName  {  

PS。此格式受WebLogic 10.3. 其他应用服务器的行为可能不同ю

于 2013-10-09T13:52:04.273 回答
0

在 EJB 3.1 / EE 6 之前,没有针对 EJB 的标准化查找字符串。由于它们不是标准化的,因此硬编码 EJB 的实际绑定名称确实会使您的项目特定于产品。

最好的解决方案是创建另一个级别的间接:<ejb-local-ref>在 web.xml 中声明一个(或作为@EJB/@EJBs在 servlet 或其他组件类上),然后使用它java:comp/env/xyz来查找 ref。然后,为 EJB ref 使用特定于平台的绑定。

于 2013-10-09T13:52:12.003 回答