第一部分析了BEA提供的Java/COM互操作解决方案—jCOM的实现原理;本文是第二部分,比较全面地分析了Weblogic Server的jCOM实现技术之后,通过一个具体实例来说明了jCOM的具体使用过程。

WebLogic Server 8.1的发行包中带有大量参考示例,其中有专门供jCOM使用的示例,但遗憾的是这些全部的jCOM示例,演示的都是用基于COM的前端访问WebLogic Server上基于EJB的后端。故本文中仅提供从Java前端访问基于COM的后端的示例。

在本例中,我们构建一个简单的银行帐户接口应用程序。在这个程序中,我们用JSP程序从前端访问服务器上COM组件里包含的业务逻辑。我们假定在用户计算机上已经安装了WebLogic Server服务器。

一、建立JSP前端

首先,要为银行帐户应用程序建立JSP前端。为简单起见,我们把表示层和业务逻辑层都一起包含到了BankAccount.jsp应用中(在使用本文源代码时,只需把解压后得到的BankAccount.jsp源文件复制到%WEBLOGIC_HOME%\samples\server\examples\build\examplesWebApp目录下)。第一件需要注意的是,从Java的角度来看,引入要调用的COM组件时,没有用任何Java认识的方法,使用的就是一个正常的Java类。访问COM组件的所有底层代理机制,从表面来看都被隐藏了。实际开发中,我们一般把业务逻辑从BankAccount.jsp分离出来,以Servlet的形式放在中间层;但是在此为了演示的方便性,我们把表示层和业务层都放在jsp文件里了。请参考列表1中的代码片断。

列表1.BankAccount.jsp(在此仅列出主要代码片断)

<%! Private clsAccount account; %>
<% //创建一个Account COM组件并把一个指向它的句柄放入session中
Account=(clsAccount)session.getAttribute(“objAccount”);
if(account==null)
account=new clsAccount();
//会话期间跟踪所有的用户信息
Vector messages=(Vector)session.getAttribute(“messages”);
if(messages=null)
messages=new Vector();
//取得表单变量
String accountName=request.getparameter(“accountName”);
Boolean NEW_ACCOUNT=true;
if(accountName==null)
accountName=””;
else
NEW_ACCOUNT=accountExists(accountName);

二、建立后端帐户COM组件

接下来,要建立后端的银行账户COM组件。为了简化,本示例假定和COM组件在同一台计算机上运行并且选用Visual Basic 6.0来创建这里的银行账户COM组件。

1.启动Visual Basic,新建一个ActiveX Dll项目。
2.把项目名称修改为Account,类名设置为clsAccount。
3.在clsAccount类中建立如下代码:

'定义全局变量
Private mstrAccountNames(1 To 100) As String
Private mdblAccountBalances(1 To 100) As Double
Public Property Get AccountNames()
AccountNames = mstrAccountNames
End Property
Public Property Get AccountBalances()
AccountBalances = mdblAccountBalances
End Property
'创建一个新帐户
Public Function Create(accountName As String, amount As Double) As Integer
Dim i As Integer
Dim flag As Boolean
i = 1
Do While (True)
If mstrAccountNames(i) = "" Then
Create = i
mstrAccountNames(i) = accountName
mdblAccountBalances(i) = amount
Exit Do
End If
i = i + 1
If i > 100 Then
Exit Do
End If
Loop
End Function
‘…………(篇幅所限,在此省略,详见所附VB源文件)

4.单击菜单“文件-项目另存为”,把项目保存在D:\myex\jCOM\BankSamp目录下。
5.在文件菜单中,单击“Make Account.dll”,建立组件的动态链接库。

三、在服务器上安装COM组件

在服务器上安装COM需要好几项操作。上面创建的COM组件要通过jCOM公开给Java客户机,然后,Java对象即可以象调用其它Java类一样调用这个COM组件。
1.注册组件
我这里试验用的服务器为Windows 2000 Server。在Windows上注册COM组件是非常简单的事情,只需使用下列命令:
Regsvr32 Account.dll /s
2.设置组件服务
在这个示例中,我们所用的操作系统是简体中文Windows 2000 Server(以下步骤可能因OS的不同而有所不同),可以按如下步骤在计算机上设置组件服务:
1.在“控制面板”上“管理工具”下,打开“组件服务”。
2.在“组件服务”控制台里,依次展开“组件服务”->“计算机”-“我的电脑”,选择“COM+应用程序”,在菜单里选择“操作”->“新建->应用程序”,建立一个空的服务器应用程序,应用程序名称为jCOM。
3.在“组件服务”里,右键单击刚建立的应用程序上,在菜单中选择属性,在“安全设置”选项卡里选择“仅在进程级执行访问检查”,然后把“调用的身份验证级”设置为“连接”。
4.下一步,打开“jCOM”目录下的“组件”目录。把刚刚建立的Account.dll组件文件拖动到这个“组件”目录下。

3.用com2java生成代理文件
在设置服务器之前要做的最后一步就是生成jCOM中间件,用它把前后端各层连接起来。请遵循如下步骤生成中间件:
1.进入%WEBLOGIC_HOME%\server\bin目录下,运行com2java.exe。
2.选择刚才创建的Account.dll作为要扫描的类型库。
3.用com.jCOMSample.account作为包名称。
4.单击“Generate Proxies”,选择一个临时目录,保存程序生成的代理文件。

最后,com2java生成4个代理文件,用于在API一级访问银行账户COM组件之用。这4个代理文件分别是_clsAccount.java、_clsAccountProxy.java、clsAccount.java和JintegraInit.java。编译这4个类,把它们放到WebLogic Server上示例应用程序能够访问到的目录中。

所有与jCOM相关的、编译时要使用的类,都保存在\bea\weblogic81\server\lib\weblogic.jar这个文件里。要确保在编译时,在类路径里引用这个JAR文件。

在WebLogic Server上,建立目录结构\beaweblogic81\samples\server\examples\build\examplesWebApp\WEBINF\classes\com\jCOMSample\account,把4个编译好的类都放在这里,以便示例应用程序能够找到它们。

四、WebLogic Server设置

jCOM随WebLogic Server 8.1一起安装,但是必须通过管理控制台激活。现在要做的是让应用程序能够调用COM:
1.打开管理控制台。
2.在左边窗格里,单击Server,然后打开examples Server。
3.在右边窗格里,单击Protocols选项卡,然后jCOM选项卡。
4.选中“Enable COM”复选框。
5.单击Apply按钮。
6.重新启动服务器。所做的设置在服务器重新启动后生效。

五、运行银行帐户客户端应用程序

打开浏览器,在地址栏中输入http://localhost:7001/examplesWebApp/BankAccount.jsp。观察实验结果,如果一切正常,你将会得到一个银行帐户接口数据操作表单。

在这个程序中,客户的请求由JSP页面处理,JSP页面通过clsAccount对象调用银行帐户COM组件。为了简单起见,在整个会话期间,所有数据都持久保存在COM对象中(在实际开发中,后端组件应该把信息缓存到数据库里)。
注意 如果你想修改前面用VB创建的COM组件,而且没有设置二进制兼容,那么必须重新运行com2java实用工具,以确保正确的代码同步。

总结

本文在较全面地分析了Weblogic Server的jCOM实现技术之后,通过一个具体实例来说明了jCOM的具体使用过程。
其实,Java/COM互操作是个相当复杂的主题,对市场上提供的各种方案的选用应视具体的环境而定。总之,如果想寻找一个稳定可靠的,而且无缝地在Java对象和微软COM对象之间通信的机制的话,我建议优先考虑jCOM。

转载 http://developer.51cto.com/art/200604/25855.htm

基于jCOM搭建Java-微软信息桥梁(下)的更多相关文章

  1. 基于jCOM搭建Java-微软信息桥梁(上)

    本文将重点讨论BEA的Java/COM解决方案,是全文的第一部分,细致分析BEA提供的Java/COM互操作解决方案—jCOM的实现原理. 一.jCOM简介 据Gartner的研究分析,在名列全球前1 ...

  2. Docker学习笔记之二,基于Dockerfile搭建JAVA Tomcat运行环境

    前言 在第一篇文字中,我们完全人工方式,一个命令一个命令输入,实现一个 java tomcat运行环境,虽然也初见成效,但很累人.如果依靠依靠脚本构建一个Tomcat容器实例,一个命令可以搞定,何乐而 ...

  3. 基于Dockerfile搭建JAVA Tomcat运行环境

    前言 在第一篇文字中,我们完全人工方式,一个命令一个命令输入,实现一个java tomcat运行环境,虽然也初见成效,但很累人.如果依靠依靠脚本构建一个Tomcat容器实例,一个命令可以搞定,何乐而不 ...

  4. Java之基于Eclipse搭建SSH框架(下)

    在上篇博客里,我简介了Tomcat滴配置与Struts2滴搭建,假设对这个还不会滴童鞋去看一下我滴上篇博客<Java之基于Eclipse搭建SSH框架(上)>.今天我们接着上篇博客滴内容. ...

  5. 珠联壁合地设天造|M1 Mac os(Apple Silicon)基于vscode(arm64)配置搭建Java开发环境(集成web框架Springboot)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_194 也许有人从未听说过Python,但是不会有人没听说过Java,它作为一个拥有悠久历史的老牌编程语言,常年雄踞TIOBE编程语 ...

  6. Java学习心得之 Linux下搭建Java环境

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 Linux下搭建Java环境 1.前言2.JDK安装3.配置环境变量4. ...

  7. LINUX下搭建JAVA的开发环境

    LINUX下搭建JAVA的开发环境 (2009-07-13 10:04:13)     下面就将Linux下JAVA开发环境的搭建详细道来: 1.Linux下JDK的安装 至于下载JDK的二进制可执行 ...

  8. CentOS6下基于Nginx搭建mp4/flv流媒体服务器

    CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 1.先添加几个RPM下载源 1.1)安装RPMforge的CentOS6源 [roo ...

  9. windows、ubuntu下eclipse搭建java、Python环境问题总结

    前两篇博文分别讲述了如何在windows.ubuntu下用eclipse搭建java.python环境,下面就针对本人遇到的问题做一个总结. 一.windows下关于java环境变量JAVA_HOME ...

随机推荐

  1. X.509证书的编码及解析:程序解析以及winhex模板解析

    一.证书的整体结构:证书内容.签名算法.签名结果. 用ASN.1语法描述如下: Certificate::=SEQUENCE{ tbsCertificate TBSCertificate, signa ...

  2. An Introduction to Greta

    I was surprised by greta. I had assumed that the tensorflow and reticulate packages would eventually ...

  3. VCS双机原理

    VCS双机的配置目录:/etc/VRTSvcs/conf/config/main.cf VCS双机的监控脚本目录:/opt/VRTSvcs/bin/mdcc/ VCS双机日志目录:/var/VRTSv ...

  4. 基于Spring Boot和Spring Cloud实现微服务架构学习

    转载自:http://blog.csdn.net/enweitech/article/details/52582918 看了几周Spring相关框架的书籍和官方demo,是时候开始总结下这中间的学习感 ...

  5. UGUI 事件穿透规则

    UGUI事件分为两大类:点击和拖拽. 点击包括 pointerdown, pointerup. 拖拽包括 begindrag, drag, enddrag. 点击事件无穿透:只会被最上层UI响应,不会 ...

  6. 【319】Python 通过 Twilio 发短信

    参考:python利用twilio模块给自己发短信 参考:使用python实现往手机发短信(基于twilio) 步骤如下: 登录 Twilio 网站注册,貌似需要***,包括用户名.密码.手机号.项目 ...

  7. 给mysql数据添加一个只拥有一张表的权限

    grant all privileges on [database].* to 'database'@'localhost' identified by 'password' 例如: grant al ...

  8. 117. Populating Next Right Pointers in Each Node II (Tree; WFS)

    Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...

  9. placement new

    placement new就是把原本new做的两步工作分开来.第一步你自己分配内存,第二步你调用类的构造函数在自己分配的内存上构建新的对象. class Foo { float f; public: ...

  10. C#中释放数据库连接资源

    1.确保释放数据库连接资源的两种方式如下:   a.使用try...catch...finally语句块,在finally块中关闭连接:   b.使用using语句块,无论如何退出,都会自动关闭连接: ...