Weblogic下EJB bean JNDI名称不清楚

3
我使用 Weblogic 10.3.6 和 EJB 3.0 制作了一个小例子。我定义了 SimpleService 类,并定义了 weblogic-ejb-jar.xml 文件,以将 SimpleService 类映射到 JNDI 名称。然后将其打包为 EJB 组件并部署到服务器上。部署成功后,我可以看到名为 SimpleServiceBean 的 ejb bean。之后,我使用独立的应用程序通过 InitialContext 和所有必要的环境属性连接到 Weblogic 服务器,尝试查找该 bean。我假设它将在名称为 ejb/SimpleService 下可用,但是却无法找到它。只有在浏览 JNDI 树名称时,我才发现它可用于 SimpleService#ds/base/ejb/SimpleService 名称下。请帮助我理解发生了什么?我应该如何配置 ejb bean 才能使其按照官方 Weblogic 手册中描述的那样在 ejb/SimpleService 下可用?或者这是 EJB bean 的正确 JNDI 名称吗?
我的类和配置如下: ds.base.ejb.SimpleServiceBean:
@Stateless(mappedName = "ServiceBean")
@TransactionAttribute(NEVER)
@ExcludeDefaultInterceptors
@Remote(SimpleService.class)
public class SimpleServiceBean implements SimpleService {
...
}

weblogic-ejb-jar.xml

<weblogic-ejb-jar>
    <weblogic-enterprise-bean>
        <ejb-name>ServiceBean</ejb-name>
        <jndi-name>ejb/ServiceBean</jndi-name>
        <enable-call-by-reference>True</enable-call-by-reference>
    </weblogic-enterprise-bean>
</weblogic-ejb-jar>

application.xml:

<application>
    <display-name>web-app-ear</display-name>
    <module>
        <ejb>app-ejb-1.0-SNAPSHOT.jar</ejb>
    </module>
</application>

然后尝试从独立安装中获取:

InitialContext context = new InitialContext(env);
SimpleService simpleService = (SimpleService)          
context.lookup("SimpleService#ds/base/ejb/SimpleService");
assert simpleService != null
2个回答

1
使用这个。
@Stateless(mappedName="UserFacade")
public class UserFacadeImpl {

//......
}


Properties p=new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL,"t3://localhost:7001");
InitialContext ctx=new InitialContext(p);
userFacade=(UserFacade)ctx.lookup("UserFacade#com.webservices.facade.UserFacade");

希望它有所帮助。

1

关于Glassfish.org全局门户JNDI命名的常见问题FAQ中有一篇很好的文章http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#SessionBeanGlobalJNDINameAssignment。最佳实践是不要分配JNDI名称,而是依赖于自EE 5以来定义的那些(例如SimpleService#ds / base / ejb / SimpleService)。

如果您将jndi-name配置添加到weblogic-ejb-jar.xml中,则实际上可以将其作为ejb / ServiceBean提供,但您还必须在ejb-jar.xml中“老式”地定义它。更多关于weblogic-ejb-jar.xml的信息可以在http://docs.oracle.com/cd/E23943_01/web.1111/e13719/ejb_jar_ref.htm找到。

在orcl文档中,还有一个关于dd的良好概述。 http://docs.oracle.com/cd/E23943_01/web.1111/e13719/understanding.htm#EJBPG129

假设您正在使用10.3.x服务器版本...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接