如果只实现本地接口,有没有办法在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)。答案 0 :(得分:7)
不,这是不可能的。在WebLogic 10.3.x上部署EJB 3.0应用程序的上下文中,我一直在解决同样的问题。
该应用程序在Oracle Application Server 10.1.3和GlassFish 3.x上运行。
我们的应用程序使用当前应用程序服务器的查找机制,该机制在运行时确定。
在WebLogic Server 10.3中,EJB的本地接口:
@EJB
注释将ejb-local-ref
或web.xml
或ejb-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名称空间中。