在weblogic中发布EJB的本地接口

sta*_*ker 2 weblogic jndi java-ee ejb-3.0

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

如果我用这个

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)

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

"A#" + TestSessionRemote.class.getName()
Run Code Online (Sandbox Code Playgroud)

如果我将TestSessionRemote的注释从@Remote更改为@Local,则EJB将从JNDI中消失.有没有解决的办法?

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

pha*_*cle 7

不,这是不可能的.在WebLogic 10.3.x上部署EJB 3.0应用程序的上下文中,我一直在解决同样的问题.

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

  • Oracle AS(OC4J)具有使用JNDI查找EJB的本地接口的专有机制.
  • GlassFish 3.x使用其可移植的JNDI名称语法实现EJB 3.1.

我们的应用程序使用当前应用程序服务器的查找机制,该机制在运行时确定.

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

  • 可以使用@EJB注释将其注入servlet容器(servlet,过滤器等)和其他EJB中的托管类
  • 仅适用于从JNDI查找时,它已经在被宣布ejb-local-ref的元素web.xmlejb-jar.xml

声明查找所有查找的EJB是不切实际的.我们有192个无状态EJB,大多数是注入的,但很多都是从JNDI查找的,因为我们需要它们可用于非托管类.

除了试验和错误之外,我的此信息来源是WebLogic 10.3 EJB3 Local Lookup Sample.我找到的几乎所有其他内容(包括Oracle文档)都描述了JNDI查找语法,mappedName#fullInterface但并未明确只有远程接口名称在JNDI树中.

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