Glassfish 中 EJB 常见问题解答
这里回答了一些关于在 SUN 公司的应用服务器内使用 还有更多资料。 Enterprise Java Beans (EJB)的问题。在这里还有更多资料。 )的问题。 这里还有更多资料 如果你有问题或评论, 如果你有
问题或评论,请发到 3710167@qq.com.java.net.
[译者注] 原文: https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html 这里的内 容适用于 Glassfish, JavaEE SDK 5, J2EE SDK 1.4, Sun Java System Application Server 8.x, 9.x。
EJB 客户
? ?
怎样从单立的 java 客户程序访问远程 EJB? 客户程序是不是可移植的? 单立的 java 客户程序是不是可移植的?它和应用程序 客户机( 客户机(Application Client)组件有什么区别 )组件有什么区别?
?
从 java 客户程序访问 EJB 是不是需要 RMI stubs?
?
客户程序, 如果已有一个单立的 java 客户程序,通过 CosNaming JNDI provider 来访问 EJB,那应该 , 怎么办? 怎么办 怎样得到静态的 RMI-IIOP stubs ?
本地访问 EJB
?
我有一个具有本地接口的 EJB,能不能从应用程序客户 , 机(Application Client)或单立的 java 客户程序 ) 访问它? 访问它?
?
我有一个具有本地接口的 EJB,能不能从另外一个应用 , 组件来访问它? 的 WEB 组件来访问它?
全局 JNDI 名称
?
全局 JNDI 名称是怎样分配到 Session / Entity beans 的?
?
怎样指定一个消息驱动 Bean 应使用的队列 Queue) ( ) 和主题( 和主题(Topic)? )
?
我有一个 EJB 3.0 Session bean 具有多个远程业 务接口。 客户程序, 务接口。从单立的 java 客户程序,该怎样查找一特定 的远程业务接口? 的远程业务接口?
怎样从单立的 java 客户程序访问远程 EJB?
步骤 1. 在您的代码中使用没有参数的 InitialContext() 构造方 法。
开发员碰到的最常见的问题就是往 InitialContext(args) 中传入特定的 JNDI 引导 (bootstrapping) 属性。 那些访问 Java EE 服务的单立的 java 客 户程序, 从本质上说就不是可移植的, 所以每个 Java EE 产品都有不同的要求, 怎样引导名称服务提供者。(更多关于可移植的客户程序的信息,请看这里)。 我们已经的一个 jndi.properties 文件放在了 appserv-rt.jar 中,这样开发 员就不需要硬编码特定的 JNDI 引导属性。在使用无参数构造方法 InitialContext() 时,J2SE 中的 JNDI 机制会自动检测到这个文件,并启动 正确的名称服务提供者。
步骤 2. 把远程 EJB 的全局 JNDI 名称传入 InitialContext.lookup()
单立的 java 客户程序无法使用组件的命名环境 (java:comp/env) 或者 @EJB 注释,所以它们必须明确地使用全局 JNDI 名称来查找远程 EJB。(关 于怎样分配全局名称给 EJB,请参看这里)。假设远程 EJB 的全局名称是 "FooEJB" : 针对 EJB 2.1
和更早的 session/entity bean: InitialContext ic = new InitialContext(); Object homeObj = ic.lookup("FooEJB"); FooHome fooHome = (FooHome) PortableRemoteObject.narrow(homeObj, FooHome.class); Foo foo = fooHome.create(...) ... 针对有远程业务接口的 EJB 3.0 Bean: InitialContext ic = new InitialContext(); Foo foo = (Foo) ic.lookup("FooEJB"); 请注意,在 EJB 3.0 中查找的结果可被直接转型成远程业务接口,不需要使用 PortableRemoteObject.narrow()。
步骤 3. 把 appserv-rt.jar 和 javaee.jar 加入 java 客户程序 的类路径。 的类路径。
在步骤 1 中讲到,你需要 appserv-rt.jar 在我们的应用服务器中正确地启动 命名服务提供者。javaee.jar 包含了 Java EE 5 中的 API 类。例如,假设应 用程序类在 /home/user1/myclasses,客户程序主类是 acme.MyClient: java -classpath $APS_HOME/lib/appserv-rt.jar:$APS_HOME/lib/javaee.jar:/home/us er1/myclasses acme.MyClient
如果必要的话,设置服务器主机属性: 步骤 4. 如果必要的话,设置服务器主机属性:
如果单立的