Jakarta ee 发布EJB';weblogic中的本地接口

Jakarta ee 发布EJB';weblogic中的本地接口,jakarta-ee,ejb-3.0,weblogic,jndi,Jakarta Ee,Ejb 3.0,Weblogic,Jndi,如果只实现本地接口,有没有办法在weblogic中查找EJB 如果我用这个 @Remote public interface TestSessionRemote { public void businessMethod(); } @Stateless(mappedName = "A") public class TestSessionBean implements TestSessionRemote { public void businessMethod() {

如果只实现本地接口,有没有办法在weblogic中查找EJB

如果我用这个

@Remote public interface TestSessionRemote { 
    public void businessMethod();
}

@Stateless(mappedName = "A")
public class TestSessionBean implements TestSessionRemote 
{
    public void businessMethod() 
    {

    }
}
可以使用以下名称查找EJB:

"A#" + TestSessionRemote.class.getName()
如果我将TestSessionRemote的注释从@Remote更改为@Local,EJB将从JNDI中消失。有办法解决这个问题吗


编辑:当时我正在使用Weblogic 10.3.x(又名11g)。

它应该仍然位于java:comp/env名称空间中。

不,这是不可能的。在WebLogic 10.3.x上部署EJB3.0应用程序的上下文中,我一直在研究相同的问题

该应用程序在Oracle application Server 10.1.3和GlassFish 3.x上运行

  • OracleAS(OC4J)有一种专有机制,用于使用JNDI查找EJB的本地接口
  • GlassFish 3.x使用其可移植JNDI名称语法实现EJB3.1
我们的应用程序对当前应用程序服务器使用查找机制,这是在运行时确定的

在WebLogic Server 10.3中,EJB的本地接口:

  • 可以使用
    @EJB
    注释注入servlet容器(servlet、过滤器等)和其他EJB中的托管类
  • 只有在
    web.xml
    ejb jar.xml
对我们来说,声明所有被查找的EJB是不实际的。我们有192个无状态EJB,大部分是注入的,但许多是从JNDI查找的,因为我们需要它们对非托管类可用

除了尝试和错误之外,我的信息来源是。我发现的几乎所有内容,包括Oracle文档,都用
mappedName\fullInterface
描述了JNDI查找语法,但没有明确说明JNDI树中只有远程接口名称


更新:我们使用了
web.xml
ejb jar.xml
中的声明(是的,有些ejb使用实用程序类在JNDI中查找其他ejb)。从一个脚本开始,从源代码生成它们,然后手动编辑它们,直到它们正确为止。不太好,但有必要。

更多详细信息,请检查Ejb3SessionBinder中的验证#bindToJNDI()跳过与jndi和Home接口的代码绑定,这意味着:没有本地bean可从jndi树调用,因为它们未注册。如前所述,只有在web.xml或ejb-jar.xml中的ejb本地ref元素中声明了JNDI时,才能从JNDI进行查找


(此信息参考wls 10.3.5)。

您能详细说明一下吗?JNDI名称应该是什么样子?我忘了提到我是EJB3的新手,所以我可能遗漏了一些明显的东西……您使用的是什么版本的WebLogic?你想要的在WebLogic12c中很简单。我知道这是一个旧线程。但这句话--“我找到的几乎所有其他东西,包括Oracle文档,都用mappedName#fullInterface描述了JNDI查找语法,但没有明确说明JNDI树中只有远程接口名称。”挽救了我的一天@pharsicle感谢您明确表示清楚!我的上帝…上帝保佑你。。。只有RemoteInterface…Oracle WebLogic员工…这是给你的:见鬼!?!?