快速业务通道

循速渐进学用Session Bean(二) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-04
an的Remote接口的方法。

当然,首先做的第一件事情是得到JNDI naming context的一个引用,它是命名系统的一个接口,通过使用命名系统来找到EJB和其它对象。要得到naming context的一个引用,最简单的方法是创建一个InitialContext对象,如下:

Context namingContext = new InitialContext();

根据使用的应用服务器,在运行客户端时, 可能需要提供一个带有额外信息的属性对象或者定义一个系统属性对象。需要额外信息的原因是JNDI API(Java Naming API)提供命名系统的一个接口,但是它自己没有提供命名服务。如果运行的是WebLogic,使用的就是WebLogic naming服务。同样,如果运行的是JRun,使用的就是JRun naming服务。JNDI使用context factory来创建Context对象,但需要告诉它的是使用哪个类作为context factory。

如果运行的是WebLogic,这个context factory就被称为weblogic.jndi.WLInitialContextFactory;例如:

java -Dnaming.factory.initial=weblogic.jndi.WLInitialContextFactory

还可以通过属性对象来指定context factory,如下:

Properties p = new Properties();p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");Context context = new InitialContext(p);

属性对象的好处是不需要在命令行做额外的指定。缺点是代码仅可以在WebLogic服务器下工作。虽然可能只使用一个厂家的服务,但是在可能的情况下,将与特定厂家相关的信息从源代码中分离出来是一个很好的主意。

现在已经拥有了naming context,这样就可以使用lookup方法来找到需要的EJB。例如,如果使用“HelloWorld”的JNDI名字来配置HelloWorldSession bean,以下的代码可以找到该bean的Home接口:

HelloWorldSessionHome home = (HelloWorldSessionHome)PortableRemoteObject.narrow(context.lookup("HelloWorld"),HelloWorldSessionHome.class);

使用EJB的时候,不能通过标准的Java强制转换操作符来转换远程的引用。必须使用PortableRemoteObject.narrow。EJB使用一个称为RMI-IIOP的特殊形式RMI,需要这个特殊的语法来作转换。

必须要记住的是无需找到EJB的Remote接口,只需要Home接口;然后就可以使用Home接口的create和find方法来得到Remote接口。

列表6.4显示了一个完整的客户端程序。

Listing 6.4 Source Code for TestHello.java

  package usingj2ee.hello;import java.util.*;import javax.naming.*;import javax.rmi.*;public class TestHello{public static void main(String[] args){try{/** Creates a JNDI naming context for location objects */Context context = new InitialContext();/** Asks the context to locate an object named "HelloWorld" and expects theobject to implement the HelloWorldSessionHome interface */HelloWorldSessionHome home = (HelloWorldSessionHome)  PortableRemoteObject.narrow(     context.lookup("HelloWorld"),     HelloWorldSessionHome.class     );/** Asks the Home interface to create a new session bean */HelloWorldSession session = (HelloWorldSession) home.create();System.out.println("The default greeting is: "+session.getGreeting());session.setGreeting("Howdy!");System.out.println("The greeting is now: "+session.getGreeting());/** Destroy this session */session.remove();/** Now create a session with a different greeting */session = (HelloWorldSession) home.create("Guten Tag!");System.out.p

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号