封装服务.docx
《封装服务.docx》由会员分享,可在线阅读,更多相关《封装服务.docx(19页珍藏版)》请在冰豆网上搜索。
![封装服务.docx](https://file1.bdocx.com/fileroot1/2022-10/28/547beffe-b2fb-4367-af54-aa22719f40ef/547beffe-b2fb-4367-af54-aa22719f40ef1.gif)
封装服务
封装服务主要是指为某些功能或操作提供对外的接口,从而可以让远方的程序进行调用。
在服务代码中,可以自己编写业务逻辑,也可以调用已经编写好的JavaBean。
我们主要采用中间件GDT(GridDevelopmentTools)开发服务,GDT可以简化开发流程。
利用它我们可以方便的实现Stub类的生成、gar包的生成以及服务的本地部署。
安装以及基本的使用方法见http:
//mage.uni-marburg.de/trac/gdt/wiki。
一、封装资源为服务
在结构工程网格中,所有的资源必须以网格服务的形式存在。
因此,对资源的服务化封装是一个必须且重要的环节。
到目前为止,已经顺利将结构工程网格中的现有数据资源以及针对此数据资源的几个数据查询操作封装为网格服务,并能够从Portal处进行调用。
需要说明的是,我们实现的是从异地对网格服务进行调用。
网格服务的开发原理和部署过程都是类似的。
图3.2说明了在网格环境下开发网格服务的流程:
图3.2网格服务开发流程图
1.1、将数据资源代理的业务逻辑打为war包
由于是对数据资源进行异地封装且开发环境存在较大差异,因此在进行封装之前,需要将原有工程打为war包并重新配置开发环境。
这是统一开发环境的过程,其具体的操作过程如下所示:
1、右键点击所要打包的工程,如图3.2.1[1]界面,选择其中的Export项。
图3.2.1[1]
2、选择将要生成的文件为war文件,点击Next,如图3.2.1[2]所示。
图3.2.1[2]
3、选择要打为war包的工程,并确定生成的war文件的输出路径,点击Finish,如图3.2.1[3]所示。
图3.2.1[3]
4、为了便于重新配置开发环境,将wenesesgrid.war传送到信息服务小组并进行解压。
5、将wenesesgrid.war解压后生成的所有的jar文件拷贝到GT4的容器中去,具体位置是/usr/local/globus-4.0.5/lib。
6、重新启动GT4容器,使设置生效。
至此为止,环境的配置过程圆满结束。
1.2编写服务
建立工程
开发网格服务,首先要做的是建立一个相应的服务工程。
在工程内部,实现了对所开发网格服务的属性以及各种操作的定义、初始化以及注册过程。
新建一个网格服务工程的具体步骤如下所示:
1、新建一个java工程。
File→New→Project→JavaProject,输入完成后,点击Finish,如图3.2.2.1[1]所示
图3.2.2.1[1]
2、创建服务。
右键点击DatabaseService工程,New→Other,选择MAGE-GDTGridService,如图3.2.2.1[2]所示。
图3.2.2.1[2]
不需要做任何更改,直接点击Next,如图3.2.2.1[3]所示。
图3.2.2.1[3]
输入服务的名称、名字空间等信息并选择服务和资源的类型,点击Next,如图3.2.2.1[4]所示。
注意选项ServiceStyle和ResourceStyle。
图3.2.2.1[4]
选择资源属性的信息提供者以及查询方式,点击Finish,如图3.2.2.1[5]。
图3.2.2.1[5]
至此,一个网格服务工程创建完毕。
在Eclipse的各个工作区显示如图3.2.2.1[6]所示。
图3.2.2.1[6]
编写服务定义文件
在此部分中,主要是对要封装为服务的资源属性以及各种操作进行定义,并指明了收集资源属性信息的聚集源类型等相关信息。
其具体过程是在文件Database.java中实现的,大致内容如下所示:
publicclassDatabase{
@GridAttribute(mds_agg_type="Query",mds_renew="300",mds_term_time="2008-08-08T00:
00:
00",mds_query_type="GetMultipleResourceProperties",mds_query_poll="100000")privateStringResourceType;//资源的属性
publicStringgetResourceType(){//属性的set()和get()方法
returnResourceType;
}
publicvoidsetResourceType(StringresourceType){
ResourceType=resourceType;
}
@GridMethodpublicString[]findexpfrommaterial(Stringtype){//对外接口1
String[]result=null;
DataSearchq=newDataSearch();
result=q.SearchExpFromMaterial(type);
returnresult;
}
@GridMethodpublicString[]findexpfromsc(Stringtype,Stringdimension){//对外接口2
String[]result=null;
DataSearchq=newDataSearch();
result=q.SearchExpFromSC(type,dimension);
returnresult;
}
@GridMethodpublicString[]findexpfromscandmaterial(Stringmaterialtype,Stringsctype,Stringscdimension){//对外接口3
String[]result=null;
DataSearchq=newDataSearch();
result=q.SearchExpFromSCAndMaterial(materialtype,sctype,scdimension);
returnresult;
}
}
Database.java中可以只定义变量(资源属性)和方法(对外接口),具体的业务逻辑可以在生成的服务代码中添加。
编辑完Database.java文件后,点击保存按钮。
保存成功后,GDT会自动根据编写的java文件生成服务代码、wsdl文件以及各种配置文件。
在Eclipse的左侧工作区DatabaseService工程的目录如图3.2.2.2所示:
图3.2.2.2工程目录
1.3资源属性初始化及对外接口实现
在此部分,要做的工作有两项:
一方面是在网格服务的资源文件DatabaseResource.java中初始化上一部分所定义属性;另一方面是在网格服务文件DatabaseService.java中实现了对外接口。
首先,对所定义属性的初始化方法如下所示:
publicvoidinitialize()
{this.propSet=newSimpleResourcePropertySet(RESOURCE_PROPERTIES);
try{
ResourceTypeRP=newSimpleResourceProperty(RP_RESOURCETYPE);
this.ResourceTypeRP.add(newObject());
this.propSet.add(ResourceTypeRP);
}catch(Exceptione){thrownewRuntimeException(e.getMessage());}
//begin-user-code
this.setResourceType("DatabaseResource");//将属性ResourceType初始化为DatabaseResource
//end-user-code
}
其次,对外接口的实现方法如下所示:
publicFindexpfrommaterialResponsefindexpfrommaterial(FindexpfrommaterialcomplexType)throwsRemoteException{
FindexpfrommaterialResponseresponse=newFindexpfrommaterialResponse();
//begin-user-code
String[]result=null;//对外接口1的初始化
DataSearchq=newDataSearch();
result=q.SearchExpFromMaterial(complexType.getType());
response.setFindexpfrommaterialReturn(result);
//end-user-code
returnresponse;
}
publicFindexpfromscResponsefindexpfromsc(FindexpfromsccomplexType)throwsRemoteException{
FindexpfromscResponseresponse=newFindexpfromscResponse();
//begin-user-code
String[]result=null;//对外接口2的初始化
DataSearchq=newDataSearch();
result=q.SearchExpFromSC(complexType.getType(),complexType.getDimension());
response.setFindexpfromscReturn(result);
//end-user-code
returnresponse;
}
publicFindexpfromscandmaterialResponsefindexpfromscandmaterial(FindexpfromscandmaterialcomplexType)throwsRemoteException{
FindexpfromscandmaterialResponseresponse=newFindexpfromscandmaterialResponse();
//begin-user-code
String[]result=null;//对外接口3的初始化
DataSearchq=newDataSearch();
result=q.SearchExpFromSCAndMaterial(complexType.getMaterialtype(),complexType.getSctype(),complexType.getScdimension());
response.setFindexpfromscandmaterialReturn(result);
//end-user-code
returnresponse;
}
1.4编译生成存根类及gar包
以上所有的操作都完成后,可以说网格服务已经开发完成了。
接下来,还需要将生成把DatabaseService服务部署到GT4容器中去所需要的g