快速业务通道

JavaBeans:创建客户端应用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
bm.ejs.ns.jndi.CNInitialContextFactory");      return new InitialContext(properties);    }

JavaBeans:创建客户端应用(2)

时间:2011-07-28

而针对JBoss编写的同一方法会有所不同。

  public static Context getInitialContext( )    throws javax.naming.NamingException {      Properties p = new Properties( );      p.put(Context.INITIAL_CONTEXT_FACTORY,      "org.jnp.interfaces.NamingContextFactory");      p.put(Context.URL_PKG_PREFIXES,      " org.jboss.naming:org.jnp.interfaces");      p.put(Context.PROVIDER_URL, "jnp://localhost:1099");      return new javax.naming.InitialContext(p);    }

一旦建立起JNDI连接,并且通过getInitialContext()方法获得了上下文,我们就可以利用上下文来查找TravelAgent EJB的远程接口了。

Object ref = jndiContext.lookup("TravelAgentBean/remote");

在本书中,我们将始终为远程客户端应用程序使用形如“TravelAgentBean/remote”这样的查找名称。你所用的实际查找名称或许有所不同,这依赖于厂商的要求。你需要把查找名称绑定到EJB服务器的命名服务上,而有些厂商可能会要求一个特殊的目录路径,或者提供一个默认的绑定。

如果使用标准的Java EE组件(Servlet、JSP、EJB或Java EE应用客户端),无论你使用哪家EJB厂商的产品,在创建JNDI InitialContext时都不需要显式的设置属性。这是因为JNDI属性可以在部署期间配置并被自动应用。一个Java EE组件会以如下方式获得其InitialContext。

  public static Context getInitialContext( )    throws javax.naming.NamingException {      return new javax.naming.InitialContext( );    }

相比于为简单Java客户端手工配置JNDI属性,这种方式更为简单,也更易于移植。所有的Java EE组件都使用相同的JNDI命名系统,enterprise bean以此来查找任何服务。特别要指明的是,这些组件要求指向EJB的引用要与“java:comp/env/ejb/”名字空间绑定。例如,对于像 servlet这样一个不同的Java EE组件而言,为了查找TravelAgent EJB,下面是我们所要做的全部工作。

Object ref = jndiContext.lookup("java:comp/env/ejb/TravelAgentRemote");

在部署期间,你要使用厂商的部署工具将JNDI名称映射到TravelAgent EJB的远程接口。在后续章节里,我们会看到使用特殊的注解可以将指向EJB的引用直接注入到bean class中。我们已经看到过这种方式的一个例子,即:将EntityManager服务注入到Travel- AgentBean类里。在本书中,Java客户端应用程序需要使用显式的参数来进行JNDI查找。作为替代方案,你也可以使用一种特殊的Java EE组件,叫做Java EE应用客户端(Java EE Application Client),但是这类组件超出了本书的讨论范围。有关Java EE应用客户端组件的更多信息可以参考Java EE 5的规范。

客户端应用程序使用PortableRemoteObject.narrow()方法将Object ref窄化(narrow)成一个TravelAgentRemote引用。

  Object ref = jndiContext.lookup("TravelAgentRemote");    CabinHomeRemote home = (TravelAgentRemote)    PortableRemoteObject.narrow(ref,TravelAgentRemote.class);

PortableRemoteObject.narrow()方法在EJB 1.1中被首次引入,并继续沿用于EJB 3.0的远程客户端。这需要支持基于IIOP之上的RMI。由于CORBA要支持许多不同的语言,而转型并非CORBA的固有功能(一些语言没有转型概念)。因此,为了获得一个指向TravelAgentRemote的远程引用,我们必须显示地对

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号