- 浏览: 57272 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
liumingtong:
我想要你的联系方式.可以吗?要不你加我Q 3813774
success -
抛出异常的爱:
congdepeng 写道Liskov替换原则(LSP)
描 ...
设计原则 -
wumingshi:
楼主关于LSP的解释是错误的。LSP的精髓是,使用父类的代码可 ...
设计原则 -
liumingtong:
struts2的OGNL表达式
struts2的值栈
st ...
总结struts2 完成中······ -
Cindy_Lee:
Joy.zhang 写道
下面是具体的设计模式:
单例 ...
设计模式中11种
结合J2EE和CORBA可以充分利用两者的优点建立性能更好功能更强的应用系统,例如可以使用C++实现的CORBA对象作为业务处理构件,形成高性能业务逻辑层,在JSP中访问CORBA构件建立展现层。?下面我们就一起来看一个在JSP中访问CORBA服务对象的例子。
软件选择:
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):
1. module?example?{
2. ????interface?A?{
3. ????????long?AOperation(in?long?ilData);
4. ????};
5. };
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,然后将结果返回,代码如下:
1. ////////////////////////////////////////
2. //?文件名:apptest_impl.h
3. #ifndef?APPTEST_IMPL_H
4. #define?APPTEST_IMPL_H
5. #include?\"apptest_skel.h\"
6.
7. class?A_impl:public?POA_example::A,?PortableServer::RefCountServantBase?{
8. ????public:
9. ????????virtual?CORBA::Long?AOperation(CORBA::Long?ilData)
10. ????????????throw(CORBA::SystemException);
11. };
12.
13. #endif
14.
15. //////////////////////////////////////////////////////
16. //?文件名:apptest_impl.cpp
17. //?包含CORBA系统类库
18. #include?<STARCORBA.h>
19. using?namespace?std;
20. #include?<apptest_impl.h>
21.
22. //?操作AOperation的实现
23. CORBA::Long?A_impl::AOperation(CORBA::Long?ilData)
24. ????????throw(CORBA::SystemException)?{
25. ????CORBA::Long?ret;
26. ????ret?=?ilData?*?2?;
27. ????return?ret;
28. }
3.?编写一个主程序实例化服务对象提供服务
在主程序中,建立CORBA环境,实例化服务对象并注册到名字服务,然后开始等待请求,代码如下(为了):
1. ///////////////////////////////////////////
2. //?文件名:Server.cpp
3. #include?<stdio.h>
4. #include?<STARCORBA.h>
5. #include?<STARCosNaming.h>
6. #include?<stdlib.h>
7. #include?<errno.h>
8. #include?\"apptest_impl.h\"
9. using?namespace?std;
10.
11. int?main(int?argc,?char*?argv[],?char*[])?{
12. ????CORBA::ORB_var?orb;????
13. ????orb?=?CORBA::ORB_init(argc,?argv);
14.
15. ????CORBA::Object_var?nameobj?=?
16. ????????orb?->?resolve_initial_references(\"NameService\");
17. ????CosNaming::NamingContext_var?nc?=?
18. ????????CosNaming::NamingContext::_narrow(nameobj.in());
19.
20. ????CORBA::Object_var?poaObj?=?
21. ????????orb?->?resolve_initial_references(\"RootPOA\");
22. ????PortableServer::POA_var?rootPOA?=?
23. ????????PortableServer::POA::_narrow(poaObj);
24. ????PortableServer::POAManager_var?manager?=?
25. ????????rootPOA?->?the_POAManager();
26. ????
27. ????A_impl*?AImpl?=?new?A_impl();
28. ????PortableServer::ServantBase_var?servantA?=?AImpl;
29. ????PortableServer::ObjectId_var?Aid?=?
30. ????????rootPOA?->?activate_object(servantA);
31. ????CORBA::Object_var?A?=?
32. ????????rootPOA?->?servant_to_reference(servantA);
33.
34. ????CosNaming::Name?AName;
35. ????AName.length(1);
36. ????AName[0].id?=?CORBA::string_dup(\"A\");
37. ????AName[0].kind?=?CORBA::string_dup(\"OperationA\");
38. ????nc?->?rebind(AName,?A.in());
39. ????
40. ????manager?->?activate();
41. ????orb?->?run();
42. ????
43. ????nc?->?unbind(AName);????
44. ????return?EXIT_SUCCESS;
45. }
Web应用实现
Web应用中主要是通过一个JSP访问CORBA服务对象并进行展示,在这里充当CORBA的客户方。实现Web应用需要完成两个方面任务:将IDL映射到Java,在JSP中发送请求并展示结果。
1.?将IDL映射到Java
这个只需要调用JDK的IDL编译器idlj,执行如下命令:
idlj?apptest.idl
这个命令将产生五个文件:A.java、AOperations.java、AHelper.java、AHolder.java和 _AStub.java,其中包含了Stub。
2.?在JSP中发送请求并展示结果。
为了避免在JSP中包含太多的Script,在这里将发送请求的代码从JSP分离到了一个简单的Java类中。
Java类的代码如下(AClient.java):
1. /*
2. ?*?AClient.java
3. ?*/
4. package?example;
5.
6. import?org.omg.CORBA.*;
7. import?org.omg.CORBA.ORBPackage.InvalidName;
8. import?org.omg.CosNaming.*;
9. import?org.omg.CosNaming.NamingContextPackage.CannotProceed;
10. import?org.omg.CosNaming.NamingContextPackage.NotFound;
11.
12. /**
13. ?*?@author?公飞
14. ?*/
15. public?class?AClient?{
16. ????public?static?int?opA(int?num)?throws?Exception?{
17. ????????String[]?args?=?{?\"-ORBInitRef\",
18. ????????????????\"NameService=corbaloc:iiop:192.168.60.158:900/NameService\"?};
19. ????????ORB?orb?=?ORB.init(args,?null);
20. ????????org.omg.CORBA.Object?objRef;
21. ????????objRef?=?orb.resolve_initial_references(\"NameService\");
22. ????????NamingContext?ncRef?=?NamingContextHelper.narrow(objRef);
23. ????????NameComponent?nc?=?new?NameComponent(\"A\",?\"OperationA\");
24. ????????NameComponent?path[]?=?{?nc?};
25.
26. ????????org.omg.CORBA.Object?objA;
27. ????????objA?=?ncRef.resolve(path);
28. ????????A?a?=?AHelper.narrow(objA);
29.
30. ????????int?out;
31. ????????out?=?a.AOperation(num);
32. ????????return?out;
33. ????}
34. }
JSP文件的代码如下(index.jsp):
1. <%@?page?contentType=\"text/html;charset=gb2312\"%>
2. <%@?page?import?=?\"example.AClient\"?%>
3. <html>
4. ????<head>
5. ????????<title>Hello?JSP?CORBA?Client</title>
6. ????</head>?
7. ????<body>
8. ????????3*2=<%=AClient.opA(3)%>
9. ????</body>
10. </html>
好了,编译好你的程序,运行名字服务,运行CORBA服务程序,运行应用服务器InforWeb,部署Web应用,然后就可以通过浏览器访问了。
软件选择:
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):
1. module?example?{
2. ????interface?A?{
3. ????????long?AOperation(in?long?ilData);
4. ????};
5. };
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,然后将结果返回,代码如下:
1. ////////////////////////////////////////
2. //?文件名:apptest_impl.h
3. #ifndef?APPTEST_IMPL_H
4. #define?APPTEST_IMPL_H
5. #include?\"apptest_skel.h\"
6.
7. class?A_impl:public?POA_example::A,?PortableServer::RefCountServantBase?{
8. ????public:
9. ????????virtual?CORBA::Long?AOperation(CORBA::Long?ilData)
10. ????????????throw(CORBA::SystemException);
11. };
12.
13. #endif
14.
15. //////////////////////////////////////////////////////
16. //?文件名:apptest_impl.cpp
17. //?包含CORBA系统类库
18. #include?<STARCORBA.h>
19. using?namespace?std;
20. #include?<apptest_impl.h>
21.
22. //?操作AOperation的实现
23. CORBA::Long?A_impl::AOperation(CORBA::Long?ilData)
24. ????????throw(CORBA::SystemException)?{
25. ????CORBA::Long?ret;
26. ????ret?=?ilData?*?2?;
27. ????return?ret;
28. }
3.?编写一个主程序实例化服务对象提供服务
在主程序中,建立CORBA环境,实例化服务对象并注册到名字服务,然后开始等待请求,代码如下(为了):
1. ///////////////////////////////////////////
2. //?文件名:Server.cpp
3. #include?<stdio.h>
4. #include?<STARCORBA.h>
5. #include?<STARCosNaming.h>
6. #include?<stdlib.h>
7. #include?<errno.h>
8. #include?\"apptest_impl.h\"
9. using?namespace?std;
10.
11. int?main(int?argc,?char*?argv[],?char*[])?{
12. ????CORBA::ORB_var?orb;????
13. ????orb?=?CORBA::ORB_init(argc,?argv);
14.
15. ????CORBA::Object_var?nameobj?=?
16. ????????orb?->?resolve_initial_references(\"NameService\");
17. ????CosNaming::NamingContext_var?nc?=?
18. ????????CosNaming::NamingContext::_narrow(nameobj.in());
19.
20. ????CORBA::Object_var?poaObj?=?
21. ????????orb?->?resolve_initial_references(\"RootPOA\");
22. ????PortableServer::POA_var?rootPOA?=?
23. ????????PortableServer::POA::_narrow(poaObj);
24. ????PortableServer::POAManager_var?manager?=?
25. ????????rootPOA?->?the_POAManager();
26. ????
27. ????A_impl*?AImpl?=?new?A_impl();
28. ????PortableServer::ServantBase_var?servantA?=?AImpl;
29. ????PortableServer::ObjectId_var?Aid?=?
30. ????????rootPOA?->?activate_object(servantA);
31. ????CORBA::Object_var?A?=?
32. ????????rootPOA?->?servant_to_reference(servantA);
33.
34. ????CosNaming::Name?AName;
35. ????AName.length(1);
36. ????AName[0].id?=?CORBA::string_dup(\"A\");
37. ????AName[0].kind?=?CORBA::string_dup(\"OperationA\");
38. ????nc?->?rebind(AName,?A.in());
39. ????
40. ????manager?->?activate();
41. ????orb?->?run();
42. ????
43. ????nc?->?unbind(AName);????
44. ????return?EXIT_SUCCESS;
45. }
Web应用实现
Web应用中主要是通过一个JSP访问CORBA服务对象并进行展示,在这里充当CORBA的客户方。实现Web应用需要完成两个方面任务:将IDL映射到Java,在JSP中发送请求并展示结果。
1.?将IDL映射到Java
这个只需要调用JDK的IDL编译器idlj,执行如下命令:
idlj?apptest.idl
这个命令将产生五个文件:A.java、AOperations.java、AHelper.java、AHolder.java和 _AStub.java,其中包含了Stub。
2.?在JSP中发送请求并展示结果。
为了避免在JSP中包含太多的Script,在这里将发送请求的代码从JSP分离到了一个简单的Java类中。
Java类的代码如下(AClient.java):
1. /*
2. ?*?AClient.java
3. ?*/
4. package?example;
5.
6. import?org.omg.CORBA.*;
7. import?org.omg.CORBA.ORBPackage.InvalidName;
8. import?org.omg.CosNaming.*;
9. import?org.omg.CosNaming.NamingContextPackage.CannotProceed;
10. import?org.omg.CosNaming.NamingContextPackage.NotFound;
11.
12. /**
13. ?*?@author?公飞
14. ?*/
15. public?class?AClient?{
16. ????public?static?int?opA(int?num)?throws?Exception?{
17. ????????String[]?args?=?{?\"-ORBInitRef\",
18. ????????????????\"NameService=corbaloc:iiop:192.168.60.158:900/NameService\"?};
19. ????????ORB?orb?=?ORB.init(args,?null);
20. ????????org.omg.CORBA.Object?objRef;
21. ????????objRef?=?orb.resolve_initial_references(\"NameService\");
22. ????????NamingContext?ncRef?=?NamingContextHelper.narrow(objRef);
23. ????????NameComponent?nc?=?new?NameComponent(\"A\",?\"OperationA\");
24. ????????NameComponent?path[]?=?{?nc?};
25.
26. ????????org.omg.CORBA.Object?objA;
27. ????????objA?=?ncRef.resolve(path);
28. ????????A?a?=?AHelper.narrow(objA);
29.
30. ????????int?out;
31. ????????out?=?a.AOperation(num);
32. ????????return?out;
33. ????}
34. }
JSP文件的代码如下(index.jsp):
1. <%@?page?contentType=\"text/html;charset=gb2312\"%>
2. <%@?page?import?=?\"example.AClient\"?%>
3. <html>
4. ????<head>
5. ????????<title>Hello?JSP?CORBA?Client</title>
6. ????</head>?
7. ????<body>
8. ????????3*2=<%=AClient.opA(3)%>
9. ????</body>
10. </html>
好了,编译好你的程序,运行名字服务,运行CORBA服务程序,运行应用服务器InforWeb,部署Web应用,然后就可以通过浏览器访问了。
发表评论
-
利用jsp读取远程文件保存到本地
2010-07-14 18:02 1801本文介绍利用jsp读取远程文件保存到本地的文章专题。 用js ... -
jsp+tomcat+mysql&sevlet&javabean配置
2010-07-14 18:01 653在配置jsp开发环境的过 ... -
JSP中用bean封装常用的功能
2010-07-14 18:00 691本文介绍JSP中用bean封装常用的功能的文章专题。 1、建 ... -
JSP中关于html的转换技巧
2010-07-14 17:59 590本文介绍JSP中关于html的转换技巧的文章专题。 publ ... -
在JSP中设置HTTP应答头
2010-07-14 17:58 738本文介绍在JSP中设置HTTP应答头的文章专题。 Prime ... -
学习jsp与javascript结合在页面间传递参数
2010-07-14 17:57 1263本文介绍学习jsp与javascript结合在页面间传递参数的 ... -
JSP Commons FileUpload 组件上传文件的总结
2010-07-14 17:57 879本文介绍JSP Commons FileUpload 组件上传 ... -
JSP开发前设置
2010-07-14 17:56 658由于朋友问起我开发JSP前都要做些什么,就写了这篇东东。 ? ... -
JSP应用语法详解集三
2010-07-14 17:56 696本文介绍JSP应用语法详 ... -
JSP应用语法详解集二
2010-07-14 17:55 647本文介绍JSP应用语法详解集二的文章专题。 8)标签: 转发 ... -
JSP应用语法详解集一
2010-07-14 17:55 575本文介绍JSP应用语法详解:HTML注释,隐藏注释,Page指 ... -
提升JSP应用程序的7大绝招
2010-07-14 17:54 706本文的目的是通过对servlet和JSP的一些调优技术来极大地 ... -
JSP技巧之:session在何时被创建
2010-07-14 17:54 622本文介绍JSP技巧之:session在何时被创建的文章专题。 ... -
谈谈JSP的九个隐含对象
2010-07-14 17:53 852本文介绍谈谈JSP的九个隐含对象的文章专题,例如:储存和取得属 ... -
解决JSP与MySQL交互的中文乱码问题
2010-07-14 17:51 645首先实现了一个StringConvert bean(GBtoI ... -
JSP几个常见问题
2010-07-14 17:51 662本文介绍JSP几个常见问题的文章专题,Hashtable和 H ... -
JSp的Taglib Directiv语法,属性概述
2010-07-14 17:50 722指示(directive)允许您使用自定义的标签,为标签库命名 ... -
JSP连接SQL Server 2000系统详细配置
2010-07-14 17:50 575到SUN官方站点(http://java.sun.com)下载 ... -
JSP中标签库的深入研究
2010-07-14 17:50 616标签处理器和标签附加信息需要定位在JSP容器类载入器可以找到的 ... -
JSP中基于Session的在线用户统计分析
2010-07-14 17:49 724JSP作为后起之秀能够在 ...
相关推荐
第三部分 JDBC 新技术及其在JSP/Servlet 中的应用 第9 章 JDBC 2.0/3.0 API 的新特性 9.1 JDBC API 2.0 的新特性 9.2 JDBC API 2.0 简介 9.3 JDBC API 3.0 简介 9.4 附录JDBC 数据类型和Java 数据类型的映射关系 9.5...
实例6 在窗口中显示背景图 16 实例7 在窗体中绘制图形 18 实例8 利用JNI实现窗口特效 20 实例9 文件选择对话框 24 实例10 改变字体 26 实例11 应用JTree 28 实例12 应用JTable 30 实例13 记事本 32 实例14 使用...
第三部分 JDBC 新技术及其在JSP/Servlet 中的应用 第9 章 JDBC 2.0/3.0 API 的新特性 9.1 JDBC API 2.0 的新特性 9.2 JDBC API 2.0 简介 9.3 JDBC API 3.0 简介 目录 9.4 附录JDBC 数据类型和Java 数据类型的映射...
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 20、abstract class和interface有什么区别? ...
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 17、abstract class和interface有什么区别? 声明方法...
130、如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE中? 32 131、在JSP中如何设置COOKIE? 32 132、在JSP中如何删除一个COOKIE? 32 133、在一个JSP的请求处理中如何停止JSP的执行 33 134、在JSP中如何定义...
130、如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE中? 32 131、在JSP中如何设置COOKIE? 32 132、在JSP中如何删除一个COOKIE? 32 133、在一个JSP的请求处理中如何停止JSP的执行 33 134、在JSP中如何定义...
这里边包括:第1章 Java图形用户界面编程 1 实例1 布局管理 2 实例2 设计软件启动界面 9 实例3 实现多色窗口 11 实例4 切分窗口 13 实例5 丰富多彩的按钮 15 实例6 在窗口中显示背景图 16 实例...
165 10.1.1 JavaBean的特点 166 10.1.2 JavaBean的元素及属性 167 10.1.3 JavaBean的分类 168 10.2 创建JavaBean 168 10.2.1 JavaBean的规格说明 168 10.2.2 创建一个简单的JavaBean 168 10.3 在JSP中使用JavaBean ...
[目录]为什么Applet修改后在浏览器中不发生变化 3. [目录]Java中的类型转换 4. [目录]怎样找到编译时缺少的类 2. [目录]Java疑难解答 1. [目录]Java原理问题 1. [目录]Java中是指针还是...
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步。在很多情况下采用异步往往更有效率。 数据库三大范式? 答:1:确保每列都是不可分割的原子值 2...
状态是编程中经常碰到的实例,将状态对象化,设立状态变换器,便可在状态中轻松切换. 设计模式之 Memento(注释状态?) 很简单一个模式,就是在内存中保留原来数据的拷贝. 设计模式之 Interpreter(解释器) 主要用来对...
介绍了有关网络服务的内容,并通过实例讲解了servlet和JSP的应用,然后列举了与其他Web服务相关的技术,例如WML、SOAP等。本书还讨论了构造企业级Java应用的关键技术,其中包括安全、JDBC、EJB等,并给出一个利用...
70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常! 71、说出一些常用的类,包,接口,请各举5个 72、java中有几种...
70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常! 48 71、说出一些常用的类,包,接口,请各举5个 49 72、java中有...
usePage changes如何成为一个优秀的jsp程序员国内不谈java《学不会的JAVA,消不了的忧愁》之五Servlet的基础结构一个简单的Servlet分布式应用开发技术概述CORBA技术及实例About UBB with java has a bu 资源太大,传...
70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常! 48 71、说出一些常用的类,包,接口,请各举5个 49 72、java中有...
70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常! 48 71、说出一些常用的类,包,接口,请各举5个 49 72、java中有...
70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常! 48 71、说出一些常用的类,包,接口,请各举5个 49 72、java中有...