在weblogic中发布EJB的本地接口

时间:2010-06-22 15:04:29

标签: java-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() 
    {

    }
}

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

"A#" + TestSessionRemote.class.getName()

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

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

3 个答案:

答案 0 :(得分: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-refweb.xmlejb-jar.xml
  • 中的mappedName#fullInterface元素中声明时才可用于查找

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

除了反复试验之外,我的此信息来源为WebLogic 10.3 EJB3 Local Lookup Sample。我发现的几乎所有其他东西,包括Oracle文档,都描述了web.xml的JNDI查找语法,但没有说清楚只有远程接口名在JNDI树中。

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

答案 1 :(得分:1)

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

(此信息参见第10.3.5节)。

答案 2 :(得分:0)

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