JSPCN主页
|
JSP空间
|
网站制作
|
JSP下载
|
JSP论坛
|
JSP教程
|
关于JSPCN
|
联系我们
做最专业的JSP中文网站
当前位置
:
首页
--
JSP技术
--
JSP实例
文章搜索:
关键字
标题
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器
JSPCN文章目录分类
JSP配置
[
219
]
JSP基础
[
136
]
中文问题
[
69
]
上传问题
[
27
]
JAVABEAN
[
46
]
数据库
[
212
]
文件操作
[
126
]
图片声音
[
17
]
JSP其他
[
57
]
时间相关
[
16
]
JAVAMAIL
[
72
]
STRUTS
[
144
]
开发工具
[
28
]
教程系列
[
157
]
JSP实例
[
89
]
JAVA基础
[
421
]
APPLET
[
78
]
JAVA网络
[
179
]
Applica
[
115
]
Servlet
[
98
]
XML
[
163
]
J2ME
[
257
]
J2EE
[
374
]
考试相关
[
63
]
JAVA线程
[
90
]
EJB
[
261
]
Swing
[
26
]
Java API
[
141
]
声音图片
[
28
]
异常处理
[
33
]
JAVA实例
[
290
]
JAVA类
[
139
]
SUN
[
89
]
Hibernate
[
6
]
JMX
[
8
]
Spring
[
34
]
本版推荐文章
用JSP构建动态网站
JSP应用的安全问题
在JSP页面中实现检索数据的分页显示
用JSP和数据库实现购物车的源程序
用JSP建立实例网站
JSP实现在浏览器关闭cookies情况下的会话管
JSP高级技术如何开发动态网站(附完整网上商
JSP中变量的定义域
完全JSP分页代码
在JSP中处理虚拟路径
使用JSP技术和JDBC技术访问基于Web的动态数据
JSP编程技巧:用JSP操作Cookie
JSP论述和音乐店设计
jsp“抓”网页代码的程序
在JSP-SERVLET开发中导入事件驱动技术
第一次jsp接触(win32安装版)
用JSP在客户端生成JavaScript代码来实现表单校验
JSP中email格式的判断
电子商务模型的JSP、JavaBean实现
jsp中读取远程机器的Properties文件和ip地址
本版热点文章
用JSP建立实例网站
用JSP构建动态网站
完全JSP分页代码
用JSP和数据库实现购物车的源程序
JSP高级技术如何开发动态网站(附完整网上商
电子商务模型的JSP、JavaBean实现
在JSP页面中轻松实现数据饼图
在JSP页面中实现检索数据的分页显示
使用JSP技术和JDBC技术访问基于Web的动态数据
用JSP在客户端生成JavaScript代码来实现表单校验
制作圆形Swing按钮(中文版)
JSP中email格式的判断
jsp中读取远程机器的Properties文件和ip地址
JSP论述和音乐店设计
jsp“抓”网页代码的程序
在java中实现对FORM的打印功能
第一次jsp接触(win32安装版)
JSP编程技巧:用JSP操作Cookie
JSP应用的安全问题
用JAVA实现Undo、Redo,Copy、Paste、Cu...
相关文章链接
JSP作为客户方访问CORBA服务对象
作者: 文章来源:
访问次数:10次 加入时间:2007年04月05日
公飞
结合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):
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 =
PortableServer::
POA
::_narrow(poaObj);
PortableServer::POAManager_var manager =
rootPOA -> the_POAManager();
A_impl* AImpl =
new
A_impl();
PortableServer::ServantBase_var servantA = AImpl;
PortableServer::ObjectId_var Aid =
rootPOA -> activate_object(servantA);
CORBA::Object_var A =
rootPOA -> servant_to_reference(servantA);
CosNaming::
Name
AName;
AName.
length
(1);
AName[0].id = CORBA::string_dup(
"A"
);
AName[0].kind = CORBA::string_dup(
"OperationA"
);
nc -> rebind(AName, A.in());
manager -> activate();
orb -> run();
nc -> unbind(AName);
return
EXIT_SUCCESS;
}
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):
/*
* AClient.java
*/
package
example;
import
org.omg.CORBA.*;
import
org.omg.CORBA.ORBPackage.
InvalidName
;
import
org.omg.CosNaming.*;
import
org.omg.CosNaming.NamingContextPackage.
CannotProceed
;
import
org.omg.CosNaming.NamingContextPackage.
NotFound
;
/**
* @author 公飞
*/
public
class
AClient {
public
static
int
opA(
int
num)
throws
Exception
{
String
[] args = {
"-ORBInitRef"
,
"NameService=corbaloc:iiop:192.168.60.158:900/NameService"
};
ORB
orb =
ORB
.init(args,
null
);
org.omg.CORBA.
Object
objRef;
objRef = orb.resolve_initial_references(
"NameService"
);
NamingContext
ncRef =
NamingContextHelper
.narrow(objRef);
NameComponent
nc =
new
NameComponent
(
"A"
,
"OperationA"
);
NameComponent
path[] = { nc };
org.omg.CORBA.
Object
objA;
objA = ncRef.resolve(path);
A a = AHelper.narrow(objA);
int
out;
out = a.AOperation(num);
return
out;
}
}
JSP文件的代码如下(index.jsp):
<%@ page contentType=
"text/html;charset=gb2312"
%>
<%@ page
import
=
"example.AClient"
%>
<html>
<head>
<title>Hello JSP CORBA Client</title>
</head>
<body>
3*2=<%=AClient.opA(3)%>
</body>
</html>
好了,编译好你的程序,运行名字服务,运行CORBA服务程序,运行应用服务器InforWeb,部署Web应用,然后就可以通过浏览器访问了。
Copyright © 2002-2005
JSP
CN.net. All rights reserved.
JSP中文网 备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司 成都市一环路南二段6号新瑞楼三楼8号