级别: 初级 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 企业应用程序项目:
- 选择
File => New Enterprise Application Project。
- 在 Enterprise Application Project Creation 窗口中,选择
Create J2EE 1.3 Enterprise Application project:
图1. 创建一个 J2EE 1.3 企业应用程序项目
- 单击
Next。
- 在 Enterprise Application Project Creation window 窗口中,将该项目命名为
Simple 。对于附加的模块项目,选择
EJB Module并且将该模块命名为
SimpleEJBModule :
图2. 为该企业应用程序项目创建一个 EJB 模块
- 单击
Finish。
创建一个 EJB 模块
在 Application Developer J2EE Hierarchy 视图中,展开
EJB Modules文件夹,以显示新创建的模块。将一个新的无状态会话 Bean 与此模块相关联:
- 右键单击
EJB Module => SimpleEJBModule,然后选择
New => Enterprise Bean。
- 在 Enterprise Bean Creation 窗口中,确认
SimpleEJBModule被选中:
图4. 创建一个与 SimpleEJBModule 相关联的企业 Bean
- 单击
Next。
- 在 Create a 2.0 Enterprise Bean 窗口中,指定
Session bean为 bean 类型。同时指定 bean 名为
SimpleEJB ,指定缺省包为
com.ibm.simple :
图5. 指定 EJB 2.0 类型、bean 名和缺省包
- 单击
Next。
- 在 Enterprise Bean Details窗口中,请不要修改任何缺省设置。不过请注意 EJB 绑定名,后面我们将对其进行更详细的讨论:
图6. 为该 EJB 创建远程/本地接口
- 单击
Finish。
实现一个 EJB 方法
展开新创建的 EJB,以显示该 EJB 及其远程/本地接口。现在将方法添加到该 EJB:
- 双击
SimpleEJBBean来编辑 EJB 代码(参见图7)。在自动生成了 EJB 方法之后,添加下列方法:
public
String echoMe(String whatToEcho)
{
return
(
"I am echoing: " + whatToEcho);
}
|
图7. 编辑 SimpleEJBBean
echoMe() 方法使该 EJB能够回送一个给定的字符串。继续前进并保存该文件。现在,我们必须使远程调用者能调用这个新的 EJB 方法:
- 在 Outline 视图中,右键单击
echoMe()方法,然后选择
Enterprise Bean => Promote to Remote Interface:
图8. 将该方法升级为远程接口
在将该方法升级为远程接口之后,重新生成部署和 RMIC 代码:
- 在J2EE Hierarchy视图中,右键单击
SimpleEJBModule,然后选择
Generate => Deploy and RMIC code:
图9. 生成部署代码和 RMIC 代码
接下来,您需要将新创建的存根导出到一个 JAR 文件中。应用程序客户端需要该存根来与远程对象进行通信。
- 在 J2EE Navigator 视图中,展开
com.ibm.simple包,然后选择下列文件:
_SimpleEJB_Stub.java、_SimpleEJBHome_Stub.java、SimpleEJB.java、SimpleEJBHome.java。单击鼠标右键,然后选择
Export:
图10. 导出生成的存根和 EJB 接口
- 在 Export 窗口中,选择
JAR file,然后单击
Next。
- 在 JAR Export 窗口中,输入该 JAR 文件的全路径和文件名:
图12. 定义要打包成 JAR 文件的资源
部署 J2EE 企业应用程序
现在,我们将企业应用程序部署到 Application Developer 中的 WebSphere Application Server SingleServer Edition。请遵循下面的操作说明来创建和配置服务器环境:
- 在 J2EE Hierarchy 视图中,右键单击
Servers,然后选择
New => Server and Server Configuration。
- 在 Create a New Server and Server Configuration 窗口中,指定服务器名为 WAS5TestServer,指定服务器类型为 WebSphere version 5.0 TestEnvironment:
图14. 创建一个 WebSphere 版本 5.0 测试环境
- 单击
Next。
在 J2EE Hierarchy 视图中,展开 Server Configuration 文件夹,以显示您刚刚创建的 WebSphereApplication Server V5 Test Environment Server。下面部署该企业应用程序:
- 右键单击
WAS5TestServer服务器配置,然后选择
Add => Simple。
- 展开
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 文件,它会准备我们的瘦客户端应用程序的运行环境。让我们更仔细地分析这个文件:
- 在您喜欢的编辑器中打开
setupClient.bat 文件。指定下列参数值(参见图17):
- WebSphere 允许有几个不同的客户端应用程序类型,包括可插入客户端、J2EE 客户端和 J2EE瘦客户端。本操作演示了 J2EE 瘦客户端。确保下列参数值存在:
SETCLIENT_TYPE=J2EETHIN
- 缺省服务器名和端口号是必需的。缺省服务器名是安装企业应用程序的服务器的可访问主机名和IP地址。缺省服务器端口号是服务器的 ORB端口号。此操作将服务器和客户端都安装在同一台机器上(即您的本机)。
SET DEFAULTSERVERNAME=127.0.0.1
SET SERVERPORTNUMBER=2809
- 保存该文件。
图17. 修改 setupClient.bat 中的设置参数
- 打开命令窗口,然后运行
setupclient 批处理文件:
图18. 从命令行中运行
setupclient 批处理文件。
从外部调用该对象
现在,我们准备从外部与我们的 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 批处理文件:
- 从命令行中运行
dumpnamespace.bat 。定位与
SimpleEJBHome 相关联的 JNDI 名:
图19. dumpnamespace 展示了上下文中的所有对象
另一种方法是连接前缀字符串(
cell/nodes/localhost/servers/server1/ ),它位于带有 EJB 绑定名(
ejb/com/ibm/simple/SimpleEJBHome )的 Server Configuration(参见图20)中的范围字段。也可以在 Universal Test Client 中找到 JNDI 名。
图20. 可以在 WebSphere Server Configuration 中找到范围
将该文件保存为
ExternalCaller.java ,然后执行以下命令来编译该 Java 类:
Javac ?classpath <location of SimpleEJBStubs.jar>;C:\progra~1\websphere\applclient\lib\j2ee.jar ExternalCaller.java
|
图21. 编译 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.zip | N.N MB | HTTP |
作者简介  | 
|  |
Kulvir Singh Bhogal是一名 IBM 顾问,在遍布全国的消费者站点上设计和实现以 Java 为中心的解决方案。您可以通过
kbhogal@us.ibm.com与 Kulvir 联系。
|
 | 
|  |
Kwang S. Kang 是IBM Software Services for
WebSphere 的一名顾问。您可以通过
kkwang@us.ibm.com与 Kwang 联系。
|
对本文的评价
|