近年来随着我国金融体制改革的不断深人,银行企业不断利用信息技术拓宽业务,其中对于自助银行,使其得到了飞速发展,因此,依托现在计算机技术、网络通信技术、数据安全技术开发出能对各种自助终端进行监控,网络拓展性良好,使用灵活方便,安全的银行自助终端监控系统成为当务之急。利用J2EE系统平台[1],能有效地实现分布式多层体系结构的应用程序开发。
1 RMI[2]
RMI(Remote Method Invocation,远程方法调用)是J2EE技术中的一项,是Java语言实现有力网络功能的固有机制,RMI允许Java编写分布式对象,并允许对象在内存中通信,可跨越Java虚拟机通信[3-4],也可跨越物理设备。
RMI实现实际上由3个抽象层建立:
Stubs/Skeletons Layer(存根/主架层);Remote Reference Layer(远程引用层);Transport Layer(传输层)。
2 监控系统的设计与实现
2.1 系统网络结构
本系统以中国银行内部Intranet网络为依托,采用集中式网络结构构建而成。如图1所示。
系统采用一台监控服务器,连在中国银行Intranet主干网上,和提供数据源的前置机放入同一网段。服务器主机上运行Web服务器、应用服务器和数据库服务器,为用户提供Web方式访问。监控客户端以浏览器的形式在工作站上通过网络直接访问web服务器,进行信息查询、监控管理、报表打印、系统维护等。Intranet环境内其他用户可通过路由器、DDN专线从相应工作站以web形式访问Web服务器。
2.2 系统逻辑层次结构图
监控系统由数据库服务器、应用服务器、web服务器和浏览器组成,通过Intranet/Internet与综合前置系统连接。
本文将3层结构模式应用于银行自助终端监控系统,这3层分别是:客户层;Web层(应用逻辑层);数据存储层(见图2)。
这种结构无疑是富有生命力的,监控台使用浏览器直接与银行Intranet连接,监控服务器(监控服务器由Application Server和DB Servet两台服务器组成)在接入Intranet之前与一个Web Server连接,再通过Web Server接入Internet。通过Internet在监控服务器与监控台之间建立物理连接。
2.3 应用系统结构
自助设备监控系统是监控前端自助设备运行状态,交易情况的网上应用系统,他的数据来自于数据采集模块。前端自助设备运行时发送状态交易数据到前置机、主机系统,由前置机、主机系统进行处理,并将状态数据、交易情况记入数据库或LOG文件中。如图3所示,由监控系统数据采集模块定时采集数据库或LOG文件中的数据到监控数据库中,监控应用系统负责对监控数据统一处理,并通过监控客户端实时请求发送到监控客户端进行显示及其他处理。
3 RMI技术在监控系统中的应用
中国银行天津分行在每个地区都下设支行,每个支行负责管理本地区的ATM网点,因此各个支行之间网点ATM自助设备的状态、交易信息不能共享.那么各个地区的监控客户端就只能通过本地区支行的监控服务器实时监控本地区的ATM网点的自助终端设备,为了使身处各个地区的监控客户端都能够监控各个支行所辖的ATM网点自助终端设备,就必须采用分布式的监控系统。每个支行都设置一台监控服务器,与各自所在支行的前置系统相连接,利用RMI技术将实时监控、远程控制、查询统计组件注册为远程对象,监控客户机在任何支行的监控服务器上的注册服务表用远程对象的名字查找相应远程对象,然后调用他的方法,就可以像监控本地区的ATM自助终端设备那样监控其他地区的ATM自助终端设备。
下面本文将以对ATM状态的实时监控如何借助RMI技术实现做以讨论[5]。
3.1 定义远程接口
在Java中,远程对象是实现远程接口的类的实例,远程接口声明每个要远程调用的方法。在需要创建一个远程对象的时候,通过传递一个接口来隐藏基层的实施细节,客户通过接口句柄发送消息即可。远程接口具有如下特点:
(1)远程接口必须为public属性。
(2)远程接口必须扩展接口java.rmi.Remote。
(3)除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中声明java.rmi.RemoteException。
(4)作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远程接口,而不应声明为实施类。
下面是对ATM状态实时监控的远程接口ATM_StatusShow_Interface的定义。
3.2 实现远程接口[6]
远程对象实现类必须扩展远程对象java.rmi.UnicastRemoteObject类,并实现所定义的远程接口。远程对象的实现类中包含实现每个远程接口所指定的远程方法的代码。这个类也可以含有附加的方法,但客户只能使用远程接口中的方法。因为客户是指向接口的一个句柄,而不是他的哪个类。必须为远程对象定义构造函数,即使只准备定义一个默认构造函数,用他调用基础类构造函数。
3.3 编写服务器类
通过ATM_StatusShow_Server创建一个远程对象的实例,并通过java.rmi.registry.LocateRegistry类的createRegistry方法从指定端口号启动注册服务程序,注册服务程序的缺省运行端口为1099。必须将远程对象名字绑定到对远程对象的引用上。
3.4 编写使用远程服务的客户机类。
客户机类的主要功能有2个:一是通过Naming.lookup方法来构造注册服务程序stub程序实例;二是调用服务器远程对象上的远程方法。
3.5 为远程对象实现创建根和干
要创建存根程序和主架文件,应以包含远程对象实现的已编译类包全名运行rmic编译器。存根(Stub)是远程对象在客户端的代理,他将RMI调用传递给服务器端的主架(Skeleton),后者负责将该调用传递给实际的远程方法:
运行rmic,RMI目录下就会多出2个新类:
ATM_StatusShow_Impl_Stub.class
ATM_StatusShow_Impl_Skel.class
他们分别对应的是存根(stub)和主架(skeleton)。
4 结 论
本系统在中国银行天津分行的支持下已投入使用,经过多次测试和实际运行,用户对于本系统的评价比较满意。在运行速度和运行稳定性上都能达到要求。对于用户的日常工作负担起到了较大减轻的作用,提高了工作效率,简化了沟通手续,丰富了查询能力,使统计结果更加实时、灵活和准确。从技术角度上看,本系统采用RMI技术非常好地解决了分布式应用的问题。
|