[转载]将 JNDI 用于 WebSphere Application Server J2EE 瘦客户端应用程序

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


本文介绍了命名服务管理,并通过实例配置说明了如何在瘦客户端使用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 平台的开销。


blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


创建一个供查找的资源

在 这一部分,您将创建一个简单的无状态会话 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

blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


准备环境

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

安装完毕后,进入安装了 Application Client 的 bin 目录(缺省位置为 C:Program FilesWebSphereAppClientin )。在此目录中,您将看到 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


blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


从外部调用该对象

现在,我们准备从外部与我们的 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 ;C:progra~1websphereapplclientlibj2ee.jar ExternalCaller.java


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

blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


运行瘦客户端应用程序

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

%JAVA_HOME%/bin/java -Xbootclasspath/p:%WAS_BOOTCLASSPATH%
-classpath
-Djava.ext.dirs=%WAS_EXT_DIRS%
-Djava.naming.provider.url=iiop://
-Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
%SERVER_ROOT% %CLIENTSAS%

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

%JAVA_HOME%/bin/java -Xbootclasspath/p:%WAS_BOOTCLASSPATH%
-classpath %WAS_CLASSPATH%;c:jarsSimpleEJBStubs.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. 运行瘦客户端应用程序
运行瘦应用程序客户端

blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


结束语

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

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130618/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-130618/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值