IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

将 JNDI 用于 WebSphere Application Server J2EE 瘦客户端应用程序

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码


级别: 初级

Kulvir Singh Bhogal, 顾问,IBM Software Services for WebSphere, IBM Austin
Kwang Sik Kang, 顾问,IBM Software Services for WebSphere, IBM Charlotte

2003 年 11 月 01 日

本文介绍了命名服务管理,并通过实例配置说明了如何在瘦客户端使用JNDI访问服务器端的EJB。

©IBM版权所有,2003 年。保留所有权利。

引言

命名服务管理一组命名空间,解析数据对象的名称绑定问题。Java命名和目录接口(Java™ Namingand Directory Interface,JNDI)是一组 API,它提供对命名和目录服务的访问。许多 Java 应用程序使用 JNDI 来定位资源,比如数据源和在 Java 2 企业版(Java 2 Enterprise Edition,J2EE)中注册的企业JavaBeans(Enterprise JavaBeans,EJB)。

IBM® Java 瘦客户端应用程序提供了一种轻量级的环境,能够通过 JNDI 从外部访问 J2EE 资源,使您能够免去维护客户端机器上的 J2EE 平台的开销。





回页首


创建一个供查找的资源

在这一部分,您将创建一个简单的无状态会话 Bean,在其中实现一个方法,并且把 EJB 部署到 WebSphere® Application Server 中。在本文后面将要创建一个远程瘦客户端应用程序,它将通过 JNDI 访问此 EJB 并且调用他的公开方法。

我们将用 WebSphere Studio Application Developer V5.0(以下称为 ApplicationDeveloper)来完成这些工作。而只有与 WebSphere Application ServerV5 所提供的 Java Runtime Environment 一起使用,本文所描述的定位和调用远程对象的方法才会有效。

创建一个 J2EE 企业应用程序项目

启动 Application Developer,然后创建一个 J2EE 企业应用程序项目:

  1. 选择 File => New Enterprise Application Project
  2. 在 Enterprise Application Project Creation 窗口中,选择 Create J2EE 1.3 Enterprise Application project
    图1. 创建一个 J2EE 1.3 企业应用程序项目
    ALT 文本
  3. 单击 Next
  4. 在 Enterprise Application Project Creation window 窗口中,将该项目命名为 Simple 。对于附加的模块项目,选择 EJB Module并且将该模块命名为 SimpleEJBModule
    图2. 为该企业应用程序项目创建一个 EJB 模块
    创建一个 EJB 模块
  5. 单击 Finish

创建一个 EJB 模块

在 Application Developer J2EE Hierarchy 视图中,展开 EJB Modules文件夹,以显示新创建的模块。将一个新的无状态会话 Bean 与此模块相关联:

  1. 右键单击 EJB Module => SimpleEJBModule,然后选择 New => Enterprise Bean
  2. 在 Enterprise Bean Creation 窗口中,确认 SimpleEJBModule被选中:
    图4. 创建一个与 SimpleEJBModule 相关联的企业 Bean
    使该 bean 与正确的模块相关联
  3. 单击 Next
  4. 在 Create a 2.0 Enterprise Bean 窗口中,指定 Session bean为 bean 类型。同时指定 bean 名为 SimpleEJB ,指定缺省包为 com.ibm.simple
    图5. 指定 EJB 2.0 类型、bean 名和缺省包
    基本 bean 特性
  5. 单击 Next
  6. 在 Enterprise Bean Details窗口中,请不要修改任何缺省设置。不过请注意 EJB 绑定名,后面我们将对其进行更详细的讨论:
    图6. 为该 EJB 创建远程/本地接口
    Bean 的远程和本地接口
  7. 单击 Finish

实现一个 EJB 方法

展开新创建的 EJB,以显示该 EJB 及其远程/本地接口。现在将方法添加到该 EJB:

  1. 双击 SimpleEJBBean来编辑 EJB 代码(参见图7)。在自动生成了 EJB 方法之后,添加下列方法:
     
                
                
                  
                  public
                
                 String echoMe(String whatToEcho)
     {
      
                
                
                  
                  return
                
                (
                
                "I am echoing: " + whatToEcho);
     }
                
              
              


    图7. 编辑 SimpleEJBBean
    SimpleEJBBean

    echoMe() 方法使该 EJB能够回送一个给定的字符串。继续前进并保存该文件。现在,我们必须使远程调用者能调用这个新的 EJB 方法:

  2. 在 Outline 视图中,右键单击 echoMe()方法,然后选择 Enterprise Bean => Promote to Remote Interface
    图8. 将该方法升级为远程接口
    升级为远程接口

    在将该方法升级为远程接口之后,重新生成部署和 RMIC 代码:

  3. 在J2EE Hierarchy视图中,右键单击 SimpleEJBModule,然后选择 Generate => Deploy and RMIC code
    图9. 生成部署代码和 RMIC 代码
    生成部署代码和 RMIC 代码

    接下来,您需要将新创建的存根导出到一个 JAR 文件中。应用程序客户端需要该存根来与远程对象进行通信。

  4. 在 J2EE Navigator 视图中,展开 com.ibm.simple包,然后选择下列文件: _SimpleEJB_Stub.java、_SimpleEJBHome_Stub.java、SimpleEJB.java、SimpleEJBHome.java。单击鼠标右键,然后选择 Export
    图10. 导出生成的存根和 EJB 接口
    导出生成的存根和 EJB 接口
  5. 在 Export 窗口中,选择 JAR file,然后单击 Next
  6. 在 JAR Export 窗口中,输入该 JAR 文件的全路径和文件名:
    图12. 定义要打包成 JAR 文件的资源
    定义要打包成 JAR 文件的资源

部署 J2EE 企业应用程序

现在,我们将企业应用程序部署到 Application Developer 中的 WebSphere Application Server SingleServer Edition。请遵循下面的操作说明来创建和配置服务器环境:

  1. 在 J2EE Hierarchy 视图中,右键单击 Servers,然后选择 New => Server and Server Configuration
  2. 在 Create a New Server and Server Configuration 窗口中,指定服务器名为 WAS5TestServer,指定服务器类型为 WebSphere version 5.0 TestEnvironment:
    图14. 创建一个 WebSphere 版本 5.0 测试环境
    创建一个 WebSphere 版本 5.0 测试环境
  3. 单击 Next

在 J2EE Hierarchy 视图中,展开 Server Configuration 文件夹,以显示您刚刚创建的 WebSphereApplication Server V5 Test Environment Server。下面部署该企业应用程序:

  1. 右键单击 WAS5TestServer服务器配置,然后选择 Add => Simple
  2. 展开 EJB Modules文件夹,右键单击 SimpleEJBModule,然后选择 Run on Server




回页首


准备环境

现在我们需要准备外部环境,为此,你可以安装 WebSphere Application Server ApplicationClient V5.0(在 WebSphere Application Server V5.0 的安装 CD 上)。

安装完毕后,进入安装了 Application Client 的 bin 目录(缺省位置为 C:\Program Files\WebSphere\AppClient\bin )。在此目录中,您将看到 setupclient.bat 文件,它会准备我们的瘦客户端应用程序的运行环境。让我们更仔细地分析这个文件:

  1. 在您喜欢的编辑器中打开 setupClient.bat 文件。指定下列参数值(参见图17):
    1. WebSphere 允许有几个不同的客户端应用程序类型,包括可插入客户端、J2EE 客户端和 J2EE瘦客户端。本操作演示了 J2EE 瘦客户端。确保下列参数值存在: SETCLIENT_TYPE=J2EETHIN
    2. 缺省服务器名和端口号是必需的。缺省服务器名是安装企业应用程序的服务器的可访问主机名和IP地址。缺省服务器端口号是服务器的 ORB端口号。此操作将服务器和客户端都安装在同一台机器上(即您的本机)。
      SET DEFAULTSERVERNAME=127.0.0.1
      SET SERVERPORTNUMBER=2809
  2. 保存该文件。

    图17. 修改 setupClient.bat 中的设置参数 setupClient.bat 中的参数

  3. 打开命令窗口,然后运行 setupclient 批处理文件:

    图18. 从命令行中运行 setupclient 批处理文件。
    运行 setupclient.bat





回页首


从外部调用该对象

现在,我们准备从外部与我们的 EJB 进行交互。下面是客户端应用程序代码,您可以在本文所提供的档案文件中找到。

        
        
          
          import
        
         java.rmi.RemoteException;
        
        
          
          import
        
         java.util.Hashtable;
        
        
          
          import
        
         javax.ejb.CreateException;
        
        
          
          import
        
         javax.naming.Context;
        
        
          
          import
        
         javax.naming.InitialContext;
        
        
          
          import
        
         com.ibm.simple.*;
        
        
          
          import
        
         com.ibm.simple.SimpleEJBHome;
        
        
          
          public class
        
         ExternalCaller
{
   
        
        
          
          public static void
        
         main(String[] args)
   {
      
        
        
          
          try
        
        
      {
         Context initialContext = 
        
        new InitialContext();
         System.out.println(
        
        "Calling EJB Externally");
         String lookupString =
            
        
        "cell/nodes/localhost/servers/server1/ejb/com/ibm/simple/SimpleEJBHome";
         Object obj =
            initialContext.lookup(lookupString);
         SimpleEJBHome ejbHome =
            (SimpleEJBHome) javax.rmi.PortableRemoteObject.narrow(obj,SimpleEJBHome.class);
         SimpleEJB simpleEJB = ejbHome.create();
         System.out.println(simpleEJB.echoMe(
        
        "I worked!"));
      }
      
        
        
          
          catch
        
        (Exception e)
      {
         e.printStackTrace();
      }
   }
}
    
      
      

定位和调用我们的远程对象的代码是相当简单的。请注意 JNDI 名: cell/nodes/localhost/servers/server1/ejb/com/ibm/simple/SimpleEJBHome 。有两种方式可以获取此字符串。第一种方式是运行 WebSphereApplication Server Application Client 提供的 dumpnamespace 批处理文件:

  1. 从命令行中运行 dumpnamespace.bat 。定位与 SimpleEJBHome 相关联的 JNDI 名:

    图19. dumpnamespace 展示了上下文中的所有对象 Dumpnamespace 工具

另一种方法是连接前缀字符串( cell/nodes/localhost/servers/server1/ ),它位于带有 EJB 绑定名( ejb/com/ibm/simple/SimpleEJBHome )的 Server Configuration(参见图20)中的范围字段。也可以在 Universal Test Client 中找到 JNDI 名。

图20. 可以在 WebSphere Server Configuration 中找到范围 WebSphere 服务器配置范围字段

将该文件保存为 ExternalCaller.java ,然后执行以下命令来编译该 Java 类:

Javac ?classpath <location of SimpleEJBStubs.jar>;C:\progra~1\websphere\applclient\lib\j2ee.jar ExternalCaller.java
    


图21. 编译 ExternalCaller.java 应用程序
编译 ExternalCaller.java 应用程序




回页首


运行瘦客户端应用程序

要执行我们的外部 Java 应用程序,请确保配置好了您的环境,然后使用以下表单中的 Java 命令来调用客户端应用程序:

%JAVA_HOME%/bin/java -Xbootclasspath/p:%WAS_BOOTCLASSPATH%
-classpath <list of the referenced jars, classes, and resource directories>
-Djava.ext.dirs=%WAS_EXT_DIRS%
-Djava.naming.provider.url=iiop://<server:orb port>
-Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
%SERVER_ROOT% %CLIENTSAS% <fully qualified main class of the application client>
    

对于此操作,使用以下命令。我们建议使用批处理文件来执行此过程--名为 go.bat 的批处理文件在项目 ZIP 文件中。

%JAVA_HOME%/bin/java -Xbootclasspath/p:%WAS_BOOTCLASSPATH%
-classpath %WAS_CLASSPATH%;c:\jars\SimpleEJBStubs.jar;C:\articles
-Djava.ext.dirs=%WAS_EXT_DIRS%
-Djava.naming.provider.url=iiop://localhost:2809
-Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
%SERVER_ROOT% %CLIENTSAS% ExternalCaller
    


图22. 运行瘦客户端应用程序
运行瘦应用程序客户端




回页首


结束语

利用 IBM Java 瘦客户端,外部应用程序客户端可以更容易地访问 J2EE 资源。其优点包括客户机上的环境准备方便和更小的使用痕迹。

如本文所示,在 WebSphere ApplicationServer V5 中使用一个简单 Java 应用程序来定位远程对象可能比较困难。不过本文我们是以 EJB 为例的,您可以用该方法来定位和获得其他对象,比如数据源。





回页首


相关信息






回页首


下载

名字大小下载方法
0310_bhogal_ThinClientSample.zipN.N MBHTTP
关于下载方法的信息


作者简介

Kulvir Bhogal 的照片

Kulvir Singh Bhogal是一名 IBM 顾问,在遍布全国的消费者站点上设计和实现以 Java 为中心的解决方案。您可以通过 kbhogal@us.ibm.com与 Kulvir 联系。


AUTHORNAME 的照片

Kwang S. Kang 是IBM Software Services for WebSphere 的一名顾问。您可以通过 kkwang@us.ibm.com与 Kwang 联系。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款