- 浏览: 59045 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 1841本文介绍利用jsp读取远程文件保存到本地的文章专题。 用js ... -
jsp+tomcat+mysql&sevlet&javabean配置
2010-07-14 18:01 682在配置jsp开发环境的过 ... -
JSP中用bean封装常用的功能
2010-07-14 18:00 713本文介绍JSP中用bean封装常用的功能的文章专题。 1、建 ... -
JSP中关于html的转换技巧
2010-07-14 17:59 609本文介绍JSP中关于html的转换技巧的文章专题。 publ ... -
在JSP中设置HTTP应答头
2010-07-14 17:58 771本文介绍在JSP中设置HTTP应答头的文章专题。 Prime ... -
学习jsp与javascript结合在页面间传递参数
2010-07-14 17:57 1285本文介绍学习jsp与javascript结合在页面间传递参数的 ... -
JSP Commons FileUpload 组件上传文件的总结
2010-07-14 17:57 913本文介绍JSP Commons FileUpload 组件上传 ... -
JSP开发前设置
2010-07-14 17:56 682由于朋友问起我开发JSP前都要做些什么,就写了这篇东东。 ? ... -
JSP应用语法详解集三
2010-07-14 17:56 734本文介绍JSP应用语法详 ... -
JSP应用语法详解集二
2010-07-14 17:55 681本文介绍JSP应用语法详解集二的文章专题。 8)标签: 转发 ... -
JSP应用语法详解集一
2010-07-14 17:55 605本文介绍JSP应用语法详解:HTML注释,隐藏注释,Page指 ... -
提升JSP应用程序的7大绝招
2010-07-14 17:54 734本文的目的是通过对servlet和JSP的一些调优技术来极大地 ... -
JSP技巧之:session在何时被创建
2010-07-14 17:54 643本文介绍JSP技巧之:session在何时被创建的文章专题。 ... -
谈谈JSP的九个隐含对象
2010-07-14 17:53 880本文介绍谈谈JSP的九个隐含对象的文章专题,例如:储存和取得属 ... -
解决JSP与MySQL交互的中文乱码问题
2010-07-14 17:51 670首先实现了一个StringConvert bean(GBtoI ... -
JSP几个常见问题
2010-07-14 17:51 704本文介绍JSP几个常见问题的文章专题,Hashtable和 H ... -
JSp的Taglib Directiv语法,属性概述
2010-07-14 17:50 750指示(directive)允许您使用自定义的标签,为标签库命名 ... -
JSP连接SQL Server 2000系统详细配置
2010-07-14 17:50 595到SUN官方站点(http://java.sun.com)下载 ... -
JSP中标签库的深入研究
2010-07-14 17:50 636标签处理器和标签附加信息需要定位在JSP容器类载入器可以找到的 ... -
JSP中基于Session的在线用户统计分析
2010-07-14 17:49 752JSP作为后起之秀能够在 ...
相关推荐
第三部分 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...
- **JSP中如何使用JavaBeans**:在JSP页面中,可以通过`<jsp:useBean>`标签来实例化和引用JavaBeans,以及通过`<jsp:setProperty>`和`<jsp:getProperty>`标签来设置和获取Bean的属性。 - **JavaBeans的Scope属性**...
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 20、abstract class和interface有什么区别? ...
实例6 在窗口中显示背景图 16 实例7 在窗体中绘制图形 18 实例8 利用JNI实现窗口特效 20 实例9 文件选择对话框 24 实例10 改变字体 26 实例11 应用JTree 28 实例12 应用JTable 30 实例13 记事本 32 实例14 使用...
在JSP页面中使用JavaBeans非常简便,主要步骤包括创建一个符合JavaBeans规范的Java类、编译该类、在JSP页面中声明并实例化JavaBean对象、通过getter和setter方法操作属性等。 #### 1.3 JavaBeans 的Scope 属性 ...
在JSP 1.0版本中引入的 `<jsp:useBean>` 标签允许在页面中实例化和操作Java对象,它的XML等价形式是 `<jsp:useBean> ... </jsp:useBean>`。这个标签使得在页面中直接引用和管理JavaBeans变得简单,增强了页面的复用...
以上内容覆盖了系统分析师复习中的关键知识点,涉及JavaBean与EJB组件模型、JSP与Servlet对比、企业级服务、J2EE核心技术、RMI与RPC区别、XML与HTML差异及其与JSP集成,以及JDBC在JSP中的使用实例。这些知识点对于...
5. **对象中间件**:如CORBA(Common Object Request Broker Architecture),用于实现对象之间的通信。 **实例说明** 例如,**RMI**(Remote Method Invocation,远程方法调用)是一种Java提供的远程调用中间件,...
这个压缩包包含了多个与Java技术相关的文章,包括对J2EE的理解、基础类型如int和String的互转方法、CORBA技术的实例以及Web开发中的Cookie规范和EJB(Enterprise JavaBeans)内部资源的介绍。 1. J2EE技术:J2EE...
在不同的机器上时,可能采用EJB、CORBA或DCOM技术。 - **数据访问层**:与数据库交互,执行数据的增删改查等操作。 **1-3 Java的不同版本及其应用领域** - **J2SE**:Java 2 Standard Edition,用于创建桌面与...
2. **OMA(Object Management Architecture)参考模型**:在OMA模型中,开发基于CORBA的应用时,我们需要实现的是应用程序接口(D),即定义服务的接口,让客户端能够调用远程对象。 3. **集成中间件**:集成中间件...
130、如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE中? 32 131、在JSP中如何设置COOKIE? 32 132、在JSP中如何删除一个COOKIE? 32 133、在一个JSP的请求处理中如何停止JSP的执行 33 134、在JSP中如何定义...
3. **分布式对象服务**:支持分布式环境下对象的通信和交互。 4. **企业管理服务**:包括监控、日志记录等功能,帮助企业高效管理应用程序。 5. **事务处理服务**:确保分布式事务的一致性和完整性。 6. **消息服务*...
这里边包括:第1章 Java图形用户界面编程 1 实例1 布局管理 2 实例2 设计软件启动界面 9 实例3 实现多色窗口 11 实例4 切分窗口 13 实例5 丰富多彩的按钮 15 实例6 在窗口中显示背景图 16 实例...
2. 在分布式对象访问的桩/框架(Stub/Skeleton)结构中,客户端桩(Stub)负责替客户端完成底层通信相关工作,而服务端框架(Skeleton)则负责替服务端完成底层通信工作。桩和骨架使得远程对象如同本地对象一样使用...
在Java中,通过`new`关键字来实例化一个对象,并为其分配内存空间。 - **垃圾回收机制:** - Java自动管理内存,通过垃圾回收机制自动回收不再使用的对象所占用的内存资源。 - 垃圾回收策略包括分代收集算法、...
10. **JTA(Java Transaction Architecture)**:JTA定义了访问事务管理器的API,使得应用程序可以在分布式环境中处理事务。JTS(Java Transaction Service)是基于CORBA OTS的事务服务实现。 11. **JavaMail**:...