background image

 

分。首先是 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 中的值。不过,虽然这可能

适合于简单的设置,但是如果处理多个服务器和名称空间,那么您可能希望一个客户一
个客户地进行配置。