科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用Delphi客户端访问EJB组件

用Delphi客户端访问EJB组件

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文分析了COM客户使用COM桥访问EJB组件的原理,并给出了Delphi访问EJB组件的实例

作者:thx 来源:论坛 2007年10月31日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
2、使用Delphi下COM客户实现对EJB组件的访问

  2.1 COM桥的服务层次

  如同操作系统的分层模型,COM桥提供的服务也是以不同的层次来使用的,最底层是它提供的核心层。核心层由三个COM类组成:JvmStartup, JavaVirtualMachine, 和JavaProxy(使用它们必须引用类型库J2EE Client Access Services COM Bridge 1.0 Type Library,其他服务模块分别对应不同的类型库)。只有JvmStartup能被直接创建。JvmStartup用来创建JavaVirtualMachine的实例,JavaVirtualMachine是一个单态类,也就是说,不管你创建多少次,他们其实共享一个实例。JavaVirtualMachine提供查找、载入和创建Java类实例的接口。所有的Java类实例使用JavaProxy代表,以上是COM桥最重要的接口。每个java对象拥有自己的JavaProxy,他们之间一一对应。你访问JavaProxy时,会被JVM把调用转发至一个Java类的实例。
COM桥里存在的所有其他对象和接口是为了直接或者间接的获得JavaProxy。核心服务层提供的接口足够执行COM桥所能实现的所有任务,然而对于多数都是比较常用的任务而言,直接使用这些接口显得过于复杂和笨拙。所以基于一些常用应用提供了简化的服务模块。

  Java服务模块(J2EECAS Java Services 1.0 TypeLib)提供了对常用的如类的载入,对象创建,访问静态方法和类型转换等任务的改进访问方式。并且还提供了java控制台窗口显示、java标准输出和查看出错信息。

  企业级服务模块包含多个模块,提供对不同J2EE服务器的访问。访问不同的J2EE服务器要使用不同的模块,但是他们提供了统一的接口用于登陆服务器和查找EJB的Home接口。脚本服务层是为不能直接使用IDispath接口的脚本语言环境(如ASP)提供访问能力。JVM控件提供一个用于动态修改运行时JVM参数的ActiveX控件。

  COM桥提供了一套工具集用于更方便的配置COM桥和虚拟机选项以及创建和部署类型库。COM桥配置工具集设置COM桥运行时默认的JVM的参数。JVM Configuration Editor用于JvmControl组件参数的编辑,他可以创建JvmControl运行时能读取的配置文件。GenTypeLib 用于为java类生成类型库。类型库工具用来支持静态绑定COM方式编程。如果你要把类型库随你的应用一起部署,你必须使用REGTYPELIB工具在目标机器上注册类型库。

  2.2开发环境

  本文实例在Windows 2000 Server系统下,使用j2sdk1.4.0_03、J2EE CAS COM Bridge 1.0 、Delphi 7、Jbuilder 8、Weblogic server 7作为开发工具,全部通过测试并运用于实际项目中。EJB组件部署在Weblogic server,客户端运行时必须安装JVM和COM桥。

  2.3实现访问EJB组件

  这里以访问一个简单的会话Bean为例来说明如何在Delphi中集成EJB和COM客户。

  这个部署在Weblogic Server上的会话Bean有一个简单的test()方法:

public String test() {
return new String("Test successfully!");
}

  这里就不描述Bean的具体开发过程,按通常的方式实现它,无需任何特别的修改。假定这个Bean的JNDI名称为"ServiceFacade",Home接口和Remote接口分别为ServiceFacade和ServiceFacadeHome。
现在我们来实现客户端。为了简化起见,我们直接使用默认的JVM属性,所以这里要把weblogic.jar和Bean的客户部署类(示例使用client.jar)添加到环境变量CLASSPATH里面(只要类在JVM的类搜索路径里,我们就能通过COM桥来访问它)。

  为了简化编程我们使用动态绑定方式调用COM桥(如果使用静态绑定方式必须使用COM桥提供的类型库工具为需要访问的Java类生成类型库和注册类型库)。这里需要提出的一点是默认情况下COM桥只支持J2EE的参考实现,要想让COM桥支持Weblogic server,要注册COM桥提供的Weblogic服务模块(在命令行提示下执行 regsvr32 %J2EE_CAS_BRIDGE%\doc\appserver-connectivity-asmples\bin\ weblogic-services.dll)。因为COM桥把客户的调用转换成了真正的java调用,所以我们可以按照java客户访问EJB的步骤来使用COM访问。
COM桥与客户交互时传递的对象实现了OLE自动化接口,在Delphi里面我们可以使用IDispatch来容纳[3]。企业级服务模块简化了其中的部分步骤,它为我们完成了初始化上下文等任务。以下为客户端示例。

  初始化企业服务模块:

var : ws: variant;

{1、访问其他服务器时,可以从注册表查找到企业服务的名称
2、 不同的服务器对应的模块提供相同的接口
3、 企业级服务模块简化了操作
4、 COM桥返回的对象都是IDispatch接口,可以把一个IDispath接口赋给一个variant变量
}
ws:=CreateOleObject('J2EECAS.WeblogicServices');//新建Weblogic服务类的实例
ws.ProviderURL:='t3://127.0.0.1:7001';//JNDI的初始URL

  查找Home对象和创建EJB对象:

var : jHome,obj variant;

JHome: =ws. LookUpEjb ('ServiceFacade','ServiceFacadeHome');
//参数为JNDI名和Home接口名 ,把Home对象作为Idispatch接口返回。
Obj: =jHome. Create;//
ShowMessage(obj.test);//调用EJB对象的方法test()。

  至此已经成功实现了COM客户对EJB组件的访问。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章