3

我使用 weblogic 10.3.6 和 EJB 3.0 做了一个小例子。定义 SimpleService 类,定义 weblogic-ejb-jar.xml 以便将 SimpleService 类映射到 JNDI 名称,将其打包为 EAR 文件中的 EJB 组件并部署在服务器上。部署成功,我可以看到名为 SimpleServiceBean 的 ejb bean。之后,使用具有所有必要环境属性的独立应用程序通过 InitialContext 连接到 weblogc 服务器,我尝试查找该 bean。我假设它将在名称 ejb/SimpleService 下可用,但在该名称下找不到它,只有在查看 JNDI 树名称后,我才发现它在名称 SimpleService#ds/base/ejb/SimpleService 下可用。帮助我了解发生了什么?我应该如何配置 ejb bean,以便它在 ejb/SimpleService 下可用,如官方 weblogic 手册中所述?或者它可能是 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>

应用程序.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
4

2 回答 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");

希望能帮助到你。

于 2013-10-02T07:05:23.953 回答
1

glassfish.org 上有一个关于全局门户 JNDI 名称的很好的常见问题解答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 服务器版本...

于 2013-01-28T10:08:36.207 回答