分。首先是 bean
代码本身。然后是 home
接口,它定义了创建您自己的 EJB bean 的方法 。
home 接口是在名称空间中发布的。当您有了 home
接口后,就可以调用 Create() 以从应用
服务器
获得远程接口。获得了远程接口后,就可以调用构成实际的 EJB 代码的方法了。
如何将这些术语应用到您的城镇模拟中去呢?到达正确的城镇并找到正确的地址后,
您需要走进商店或者按铃(
调用 Create() )。这个过程对于您要去的所有商店都是一样的,
不过,您所收到的响应取决于是由谁来提供服务 ―― 比如是一位屠夫、一位面包师还是
一位烛台制作者。这个响应代表了 远程接口。每个人都是不同的并且可以要求他提供不同
的东西。您必须知道与您交谈的人(
即 bean)的职业才能提出正确的问题(即调用正确的方
法) ―― 向一位屠夫要一条面包可不妥当。
CosNaming、LDAP
和 JNDI Java 命名和目录接口(Java Naming and Directory Interface
JNDI)
提供了一个标准接口,它指明您需要如何与名称空间交互。我们所提到的 LDAP 和
CosNaming
就是 JDNI 名称空间类型。现在扩展我们的比喻:JNDI 是城镇的模板,而
CosNaming
和 LDAP 是特定的城镇。它们以相似的方式操作,但是有不同的布局。
属性提供了一个映射
让我们看一看如何使用所 有这些元素以成功地从远程计算机上调用我们的 EJB 组件
上的方法。为了让客户程序连接到您精心打造的 EJB 组件,需要几样东西。首先,它需要
客户代码的所有 JAR
文件、一般性的 EJB
相关 JAR
文件如 J2EE.jar
以及在部署 bean 时生
成的 stub
和 tie。这些文件让您的客户机可以一直到达初始上下文。
接 下 来 您 的 客 户 机 需 要 的 信 息 是 一 些 属 性 的 值 。 首 先 , 您 将 需 要 几 个
java.naming.factory.initial 的值。该属性指向一个提供初始上下文工厂的类。该属性的一个典
型值是 com.sun.jndi.cosnaming.CNCtxFactory ,这也是我们在这里的几个例子中所使用的
值。这个类存在于 rt.jar
中,因而它是基本 JVM
的一部分。工厂是由 CosNaming 命名服务
器所使用的,但是 JVM
还包括一个 LDAP 工厂。我们在后面将会看到,不同的应用服务
器提供它们自己的初始上下文工厂。
这个类连同命名服务器 URL 和端口号的详细信息,用于生成与名称空间交互的
InitialContext
类。不过,如果没有 provider URL
,那么它将连接到 localhost
的 900 端口(或
者 您 的 上 下 文 工 厂 的 其 他 默 认 端 口 ) 。 要 连 接 到 远 程 服 务 器 , 您 需 要 有 属 性
java.naming.provider.url 的一个值。
新程序员对于所有这些觉得很难理解的原因是:不管您在应用服务器本地运 行任何
东 西 , 这 东 西 通 常 都 会 听 话 地 工 作 。 这 是 由 于 环 境 照 管 了 一 切 , 当 您 要 求 一 个
InitialContext 时,环境就会给您提供您想要的那个。但是当您将客户即转移到不同的计算
机上时,就得靠自己了。您需要知道拷贝哪一个 JAR 文件,以及要做哪些设置。我知道有
些人为使他们的客户机正确工作,将应用服务器上的所有 JAR 文件都拷贝到第二台计算
机上!
在默认 情况下, InitialContext
工厂是在 jndi.properties 中定义的,这个工厂类有默认
的服务器 URL 和端口号默认值。这个文件在类路径中(这一般意味着在本地目录)或者在您
的类路径中的任何 JAR
中。不同的应用服务器可能在不同的 JAR 文件中提供它们的默认
值,WebSphere Application Server
在 namingclient.jar 中储存一个默认副本。要指定您自己
的默认值,只需要编辑在类路径中的第一个副本。这是配置属性的一种方法,如果缺少命
令行或者代码
的设置,那么客户机将使用 jndi.properties 中的值。不过,虽然这可能
适合于简单的设置,但是如果处理多个服务器和名称空间,那么您可能希望一个客户一
个客户地进行配置。