用Delphi客户端访问EJB组件

5 篇文章 0 订阅

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组件的访问。

3、访问策略的考虑

3.1与其他集成方案的比较

Windows下GUI模式非java客户访问EJB还可以有其他的集成方案,可以采用以下几种:

使用CORBA集成。CORBA是支持跨语言和跨平台的一种分布式应用解决方案,很多语言都支持CORBA,因此我们只需要用java建立一个CORBA服务器应用来调用EJB组件,就可以使用支持CORBA的任何客户端语言。这种方法有几个大的弊端,一是增加开发成本,另外在EJB和客户中间多了一个网络服务层,明显会降低系统性能,增加维护的复杂性,此外我们要为所涉及的所有Java类生成IDL文件供客户使用,增加了开发的复杂性。Delphi使用CORBA到BAS的访问虽然很简洁,但不够通用,它只支持BAS。

使用Web Services集成。EJB可以作为Web Service发布,使用它发布的WSDL文件,便可以方便的开发客户端应用。但这种方式不能充分利用EJB容器的安全策略。此外客户与服务器之间要传递Web Service不能直接支持的复合类型时,在服务器端要对这些类型编写附加的外覆类用于到XML数据之间的相互转换,增加了开发的复杂性。但这种方案较之COM桥更容易与其他应用进行数据交换,因为它是基于XML的。因此Web Service可以作为一种可选集成方案。

3.2优化考虑

如果业务逻辑和数据分散在不同的会话Bean和实体Bean中,我们直接使用COM访问它们,就必须查找每一个Home对象,这种JNDI查找非常费时,一种优化的策略是,我们对每种类型的客户使用一个会话Bean外观来封装他所需要的其他Bean提供的业务方法和数据,由这个会话Bean来调用其他Bean。最新的EJB规范增加了一个LocalHome接口用于服务端对Home接口的查找,比直接查找Home接口快。我们使用会话外观可以减小响应时间。

客户往往需要实体Bean的多个值,为了减少远程调用的数目,同时为了避免相关的负载,最好使用一个值对象把来自于实体Bean的数据传递给客户端。

4、结束语

COM桥使得GUI用户能高效访问EJB组件,将EJB组件的客户进行了扩展,同时充分结合了Windows平台下开发工具开发图形用户界面的优势。可以作为一种集成方案应用用在基于J2EE的分布式系统中。在不改变用户界面风格的情况下使得我们可以利用先进的EJB组件带来的优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值