Java 如何在WAR项目中正确引用JNDI中带注释的EJB3bean

Java 如何在WAR项目中正确引用JNDI中带注释的EJB3bean,java,jakarta-ee,weblogic,ejb-3.0,weblogic-10.x,Java,Jakarta Ee,Weblogic,Ejb 3.0,Weblogic 10.x,我们有一个在WebLogic10.3.x上运行的多模块JavaEE5项目。一个模块有EJB,我们的批处理程序从web模块运行。由于JavaEE5中没有CDI,我们必须在EJB上进行JNDI查找。EJB在类上定义为@Stateless,在接口上定义为@Remote 我已通过查看以下字符串成功访问EJB: ejb/batchService#com.example.service.batch.ejb.BatchServiceRemote 然而,我相信这是高度平台依赖的,我怀疑我应该在web.xml中

我们有一个在WebLogic10.3.x上运行的多模块JavaEE5项目。一个模块有EJB,我们的批处理程序从web模块运行。由于JavaEE5中没有CDI,我们必须在EJB上进行JNDI查找。EJB在类上定义为@Stateless,在接口上定义为@Remote

我已通过查看以下字符串成功访问EJB:

ejb/batchService#com.example.service.batch.ejb.BatchServiceRemote
然而,我相信这是高度平台依赖的,我怀疑我应该在web.xml中放入一些东西,并且可能至少在web模块中,甚至在EJB模块中,放入weblogic.xml中


有人能告诉我怎么做才合适吗?还是这是最好的方式

本地bean的JNDI格式是

java:comp/env/BeanClassName  
远程bean的JNDI格式为

mappedName#com.package.BeanClassName  
为了

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

PS.
WebLogic 10.3
支持此格式。另一个应用服务器的行为可能不同。在EJB3.1/EE6之前,EJB没有标准化的查找字符串。因为它们不是标准化的,所以对EJB的实际绑定名称进行硬编码确实会使您的项目产品特定

最好的解决方案是创建另一个间接层:在web.xml中声明一个
(或者在servlet或其他组件类上声明为
@EJB
/
@EJBs
),然后使用
java:comp/env/xyz
查找引用。然后,对EJB引用使用特定于平台的绑定。

我用于glassfish'@EJB(name)=“很好的bean\u名称”,beanInterface=MyInterface.class)