JSP作为客户方访问CORBA服务对象
2008-02-23 08:07:18来源:互联网 阅读 ()
软件选择:
CORBA服务方,我们选择中创软件商用中间件有限公司(http://www.inforbus.com)的InforBus(一个遵循CORBA规范的分布对象中间件),基于C 进行开发。操作系统选择IBM AIX(当然,你也可以选择HP UNIX、Linux或者Windows之类的)。
CORBA客户方,为了展现CORBA的互操作能力,这里使用了JDK中包含的ORB。当然,作为一种更好的选择,您也可以使用InforBus的Java版本来实现CORBA的客户方。
JSP运行环境,我们选择中创软件商用中间件有限公司(http://www.inforbus.com)的InforWeb(一个遵循J2EE规范的应用服务器)。操作系统选择Window(当然,你也可以选择HP UNIX、Linux或者AIX之类的)。
程序实现
IDL
IDL是CORBA服务方和客户方进行请求调用的协议,只要使用相同的IDL,客户方和服务方就可以进行无缝的通讯,而与客户方和服务方的开发语言、操作系统都没有关系,甚至你可以为客户方和服务方选择不同的CORBA中间件(只要他们都遵循CORBA规范)。在实现CORBA客户方程序的时候,你不需要关心服务方的任何细节,你所需要关心的只有IDL!
在这里我们定义如下所示的IDL(文件名为apptest.idl):
- module example {
- interface A {
- long AOperation(in long ilData);
- };
- };
CORBA服务方程序实现
CORBA服务方实现需要做的工作主要有:将IDL映射到C ,实现IDL中定义的接口(即实现处理逻辑),编写一个主程序实例化服务对象提供服务。
1. 将IDL映射到C
这个只需要调用InforBus的IDL编译器idl,执行如下命令:
idl apptest.idl
这个命令将产生四个文件:apptest.h、apptest.cpp、apptest_skel.cpp、apptest_skel.cpp,其中包含了Skeleton。
2. 实现IDL中定义的接口
继承Skeleton,实现IDL接口定义,在实现类中完成你的业务逻辑,在这个例子中我们实现一个简单的逻辑,将接收到的参数乘以2,然后将结果返回,代码如下:
- ////////////////////////////////////////
- // 文件名:apptest_impl.h
- #ifndef APPTEST_IMPL_H
- #define APPTEST_IMPL_H
- #include \"apptest_skel.h\"
- class A_impl:public POA_example::A, PortableServer::RefCountServantBase {
- public:
- virtual CORBA::Long AOperation(CORBA::Long ilData)
- throw(CORBA::SystemException);
- };
- #endif
- //////////////////////////////////////////////////////
- // 文件名:apptest_impl.cpp
- // 包含CORBA系统类库
- #include <STARCORBA.h>
- using namespace std;
- #include <apptest_impl.h>
- // 操作AOperation的实现
- CORBA::Long A_impl::AOperation(CORBA::Long ilData)
- throw(CORBA::SystemException) {
- CORBA::Long ret;
- ret = ilData * 2 ;
- return ret;
- }
3. 编写一个主程序实例化服务对象提供服务
在主程序中,建立CORBA环境,实例化服务对象并注册到名字服务,然后开始等待请求,代码如下(为了):
- ///////////////////////////////////////////
- // 文件名:Server.cpp
- #include <stdio.h>
- #include <STARCORBA.h>
- #include <STARCosNaming.h>
- #include <stdlib.h>
- #include <errno.h>
- #include \"apptest_impl.h\"
- using namespace std;
- int main(int argc, char* argv[], char*[]) {
- CORBA::ORB_var orb;
- orb = CORBA::ORB_init(argc, argv);
- CORBA::Object_var nameobj =
- orb -> resolve_initial_references(\"NameService\");
- CosNaming::NamingContext_var nc =
- CosNaming::NamingContext::_narrow(nameobj.in());
- CORBA::Object_var poaObj =
- orb -> resolve_initial_references(\"RootPOA\");
- PortableServer::POA_var rootPOA =
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Hibernate的缓存机制介绍
下一篇:谈select列表框
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash