![sg uap v300高級開發(fā)手冊分冊3服務端_第1頁](http://file4.renrendoc.com/view/1634b83d7e7bb30c74113fef04303a90/1634b83d7e7bb30c74113fef04303a901.gif)
![sg uap v300高級開發(fā)手冊分冊3服務端_第2頁](http://file4.renrendoc.com/view/1634b83d7e7bb30c74113fef04303a90/1634b83d7e7bb30c74113fef04303a902.gif)
![sg uap v300高級開發(fā)手冊分冊3服務端_第3頁](http://file4.renrendoc.com/view/1634b83d7e7bb30c74113fef04303a90/1634b83d7e7bb30c74113fef04303a903.gif)
![sg uap v300高級開發(fā)手冊分冊3服務端_第4頁](http://file4.renrendoc.com/view/1634b83d7e7bb30c74113fef04303a90/1634b83d7e7bb30c74113fef04303a904.gif)
![sg uap v300高級開發(fā)手冊分冊3服務端_第5頁](http://file4.renrendoc.com/view/1634b83d7e7bb30c74113fef04303a90/1634b83d7e7bb30c74113fef04303a905.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
V1.PAGEV1.03-2013-03-發(fā)2013-03-重新修訂UAP緩存開發(fā)應2013-03-2013-05-2014-12-2014-12-重新修訂SG-UAP業(yè)務系統(tǒng)之篇主要改2013-04-2013-04-重新修訂SG-UAP業(yè)務系統(tǒng)之統(tǒng)一權限系統(tǒng)2013-04-2013-04-2013-04-2013-04-xfire2013-5-2013-06-2013-06-2013-06-2013-06-2013-03-SG-UAP業(yè)務系統(tǒng)之 技術儲 REST風格的前端與交 注解 注解基本概 平臺提供的注 常用Spring注 服務端實體驗 邏輯結構注 Hibernate實體映射注解支 其它技術儲 框架概 概 運行機 與前端展現(xiàn)框架的關 REST風格服務調 面向服務的服務調 開 控制層(交互層 服務交互-面向資源(通過REST請求操作資源 服務交互-面向Web服 邏輯 邏輯層-用戶自定義Bizc邏輯組 持久 功能組件-工具 概 基本使 異常定 功能組件-日志管 概 基本使 異常定 功能組件-異常管 概 基本使 功能組件-支 概 基本使 異常定 平臺屬性注入 概 基本使 SQL語句方言配 概 基本使 SG-UAP業(yè)務系統(tǒng)之工作流 安裝 BPM與統(tǒng)一權限系統(tǒng)集 前提條 集成步 UAP與BPM集 創(chuàng)建人工任 關聯(lián)人工任 配置業(yè)務主鍵映 添加對流程包的依 開發(fā)流程處理邏 待辦任務列 已辦任務列 流程接口和服務說 流程接 BPM集成模塊 BPM集成模塊 BPM模塊 SG-UAP業(yè)務系統(tǒng)之權限 業(yè)務系統(tǒng)與權限集 概 業(yè)務系統(tǒng)與權限集成運行機 業(yè)務系統(tǒng)與權限集成開 頁面元素權限控制與集成開 業(yè)務系統(tǒng)與權限公共頁面集成開 權限接 統(tǒng)一權限平 SG-UAP業(yè)務系統(tǒng)之緩存 概 簡 專業(yè)詞 開發(fā)者技術儲 體系結 緩存運行機 功能架 數(shù)據緩存開 緩存管理 默認緩存管理 緩存管理器配置詳 緩存管理器擴展開 緩存適配 緩存適配器開發(fā)流 緩存適配器配置詳 緩存適配器接口說 緩存注解應 緩存注解應用開發(fā)流 緩存注解參數(shù)詳 緩存緩存異 分布式緩存服務器部 并解壓MongoDB程序 配置MongoDB系統(tǒng)變 啟動MongoDB服務 命令方式啟 配置文件啟 典型場景部 單服務 路由分片 路由分片+ SG-UAP業(yè)務系統(tǒng)之GIS UAP與GIS集 GIS概 在業(yè)務系統(tǒng)中引入GIS組件 在業(yè)務系統(tǒng)中調用GIS組件的 SG-UAP業(yè)務系統(tǒng)之UDS UAP與UDS集 概 在業(yè)務系統(tǒng)中引入UDS組件 在業(yè)務系統(tǒng)中調用UDS組 REST風格的前端與交件和業(yè)務應用的數(shù)據和邏輯以rest的形式統(tǒng)一封裝。提供rest服務,由前簡單說:Rest是一種URI風格,是一組架構約束條件和原則,是一種針對網過程中,服務器不需要記錄任何Session,所有的狀態(tài)都通過Url的形式記錄在REST網絡上的所有事物都被抽象為資源(resource每個資源對應一個唯一的資源標識(resourceidentifier對資源的不會改變資源標識所有的操作都是無狀態(tài)的 essREST示例GET0001userPOST注解注解基本概,Annotation(JDK5.0class,}{{}@ColumnRequestParam類名var=newmx.rpc.RESTvarstartUrl=vardata={"columns":"id,name,age,.get(startUrl,{"params":function(p_flag)if(p_flag.successful==true){mx.indicate("info調用成功");}elsemx.indicate("info調用失敗}ta>getMetaData(@ColumnRequestParam("params")String[]columns){List<ViewAttributeData>datas=datas=ViewAttributeUtils.getViewAttributes(columns,return}@ColumnResponseBody:方法體注解,對返回值進行類名{{[{"name":"id","caption":"ID",nullable:false,dataType:{"name":"name","caption":"name",nullable:true,dataType:"string"},]@IdRequestBody:類名指明方法的參數(shù)是從請求體中獲取的字符串數(shù)組,并將主鍵信息封裝為IDRequestObject對象。通過getPrimarykey()和getIds()取出主鍵名稱和主鍵var=newmx.rpc.RESTvarstartUrl=vardata={primaryKey:"userid","ids":["001",.post(startUrl,JSON.stringify(data),function(p_flag)if(p_flag.successful==true){mx.indicate("info成功。");}elsemx.indicate("info失敗。}@RequestMap(value="/testFunc",method=RequestMethod.POST)public@VoidResponseBodyObjecttestFunc(@IdRequestBodyIDRequestObjectitemType){}@VoidResponseBody:類名 使用方法參考@IdRequestBody@ItemRequestParam:類名將數(shù)據的itemTypeitemTypevar=newmx.rpc.RESTvarstartUrl=.get(startUrl,{params:function(p_flag)if(p_flag=="0"){mx.indicate("info成功。");}elsemx.indicate("info失敗。}:@RequestMap(value="/testParam",method=RequestMethod.GET)public@RawResponseBodyObjectquery(@ItemRequestParam("params")StringitemType){}@RawResponseBody:類名指明方法的返回值應當以原生返回值的形式,綁定到響應體中,使用該注objectjson使用方法參考@ItemRequestParam@ItemsRequestBody:類名listvar=newmx.rpc.RESTvarstartUrl=vardata.post(startUrl,JSON.stringify(data),function(p_flag)if(p_flag.successful==true){mx.indicate("info成功。");}else}public@ItemResponseBodyListtestFunc(@ItemsRequestBodyList<Map<String,String>>list){Map<String,String>map=newLinkedHashMap<String,for(inti=0;i<list.size();i++){map=list.get(i);for(Itor<String>it=map.keySet().iObjectkey=it.next();}}return}@ItemResponseBody:類名將返回的list集合轉化為json字符串指明返回值將以{items:[{}{}{}{}],itemCount:100(必須)}的形式返回,返回參數(shù)為封裝map或bean對象的list集用法參考@ItemsRequestBody使用示例,使該示例中接收到的參數(shù)格式為{"st":0,"dicts":[]},"resultHint":"","errorPage":"","type":""public@ItemResponseBodyQueryResultObjecttestFunc(@ItemsRequestBodyList<Map<String,String>>list){Map<String,public@ItemResponseBodyQueryResultObjecttestFunc(@ItemsRequestBodyList<Map<String,String>>list){Map<String,String>map=newLinkedHashMap<String,for(inti=0;i<list.size();i++){map=list.get(i); tor<String>it=map.keySet().i Objectkey=it.next();}}QueryResultObjectResultRestUtils.wrappQueryResult(list,return}@QueryRequestParam類名GETurlKEYQueryRequestParam("params")url":"id,name,age,"}}轉換為Reqondition對象。如果是查詢的子表的信息,需要傳入parentID。例如:{"params":{"filte其中"params"的參數(shù)columns、pageIndex、pageSize、filter、sorteget。var=newmx.rpc.RESTvarstartUrl=var.get(startUrl,{"params":function(p_flag)if(p_flag=="0"){mx.indicate("info成功。");}elsemx.indicate("info失敗。}@RequestMap(value="/testFunc",method=RequestMethod.GET)public@RawResponseBodyObjecttestFunc(@QueryRequestParam("params")ReqonditionrcObject){if(rcObject!=null){}}@TreeResponseBody:類名返回樹節(jié)點,該注解將節(jié)點信息的list集合轉換為如下json格式:public@TreeResponseBodyList<TreeNode>getRoot(){List<MxDepartment>list=List<TreeNode>nodelist=newfor(inti=0;i<list.size();i++){TreeNodenode=newTreeNode();MxDepartmentmxdepartmentMxDepartmentlist.get(i);node.setId(mxdepartment.getDepartId());//主鍵的get方法booleanhasChild=treeBizc.hasChild(mxdepartment.getDepartId(),;//}return} Spring注@ControllerHTTP URLURI 用于將數(shù)據層(DAO層)的類標識為SpringBean。具體只需將該注解標DAOSpring@RepositoryXMLBean XML<bean/>BeanSpringbase-packageclass文件,所有標注了@Repository的類都將被為SpringBean。下面通過示例具體解釋 解的用法 xtResourceLoaderourceSpring} } @ValidProductionproduction//實體設置+類+類 直接將頁面?zhèn)鬟^來production@PathVariableLongidid/*...}簡@Nullnull@NotNullnull@AssertTruetrue@Min(value值@Max(value值@Past@Future@Valid@被注釋的元素必須是電子郵箱地@Length@NotEmpty@URL(protocol=,host=,port=,regexp=,flags=)被注釋的元素必須是符合URL@Range(min=,max=)使用方1com.sgcc.uap.service.validator,javax.validation.constrai2JavaBean** * }ServiceValidatorUtil.邏輯構件注 ponent注解屬性介紹:ponent注解的掃描是通過spring配置< scanbase-package=""/>進行掃描的base-package配置包含該注解的類所在2、提供@BizcTransactional@BizcTransactionpropagation:事務行isolation:事務級timeout:readOnly:rollbackFor:noRollbackFor:開啟事務控制配置:在模塊的spring配置文件中增加如下配置<tx:annotation-driven/>transcationManager<tx:annotation-driventransaction-manager=xxxxtranscationManager1”/>}}Hibernate 其它技術儲springbeanspringMVCspringIOC;了解html和jsp;J2EE了解hibernatepojo、掌握面向對象進行持久化的中間件實現(xiàn)機制概在UAP中,為了向前端不同數(shù)據以及不同服務接口之間的差異,平臺套件和業(yè)務應用的數(shù)據和邏輯以rest的形式統(tǒng)一封裝。提供rest服務,由前運行機采用基于REST風格的web服務,是一種基于資源的服務架構,REST從資源的角度來觀察整個網絡,分布在各處的資源由URI確定,通常使HTTPwebWeb,JSon與前端展現(xiàn)框架的關REST是通過解析URL請求,將請求由邏輯構件處理,并將處理結果返回給前端的一種調用形式。GET,appnamemodule模塊間rest調用安全控制:定義模塊調用的安全器。在器中解析調IPIP(可多條安全規(guī)則出來;如果調用方的IP地址不存在配置文件中,則不進行安全控制,調用方可直安全控制相關的配置放在perties 說明:在perties中配置認證規(guī)則配置interfaceName:methodName:returnType:IP提供WebService支持,將邏輯組件發(fā)布成WebService。前端WebService控制層(交互層異構系統(tǒng)發(fā)送的請求,提供用戶請求數(shù)據的格式化、傳輸、封包與解包,URLWeb服務交互-面向資源(通過REST請求操作資源概(Resource每一個資源類和其資源實體都可以用一個URI地址來唯一標識。如bdz(“ID“e80d3cf8(ResourceRequest類和資源實體可以由一個唯一的URI表示,而資源動作(即對資源增刪改查)則資源概念橫跨和各類前端兩端之間采用REST風格的服務形式因此每一個資源URI會對應于一個HTTPURL,而資源請求中的方法正好對應于在,首先需要定義資源操作,約定根據URL請求路徑地址信息、URL請HTTP控制層的組控制層運行機制(交互圖HTTP在系統(tǒng)啟動的時候,掃描注解定義信息,保存于DefaultAnnotationHandlerMap中。DispatcherServlet這個請求之后,執(zhí)行getHandler方法查找已經的所有URL-處理器映射信息找到業(yè)務處理類。并組合配置的器,組成執(zhí)行鏈。DispatcherServlet調用執(zhí)行鏈器的前置方法如果某個方法返回false,DispatcherServlethandleAnnotationMethodHandlerAdapterDispatcherServlet調用執(zhí)行鏈器的后置方DispatcherServlet調用執(zhí)行鏈器的完成方DispatcherServletHTTP異常處{}{}successfulfalse,resultHintspring}MyException基本使用REST求處是資源的具體操作者在接收到瀏覽器發(fā)出的REST風格的請求之后后臺需要將HTTP請求內容“翻譯”為本身能夠理解的信息,然后按照確定的規(guī)則,映射關系的配HTTP協(xié)議規(guī)定了瀏覽器 網服務器之間相互通信的規(guī)則前端通過協(xié)議,向發(fā)送請求,請求包含請求方法、請求URI地址、協(xié)議版本、以及包在實現(xiàn)對于REST請求處理之前,需要首先確定HTTP請求和資源操作組件之間的映射規(guī)則。這樣,在接收到HTTP請求之后,才能夠夠根據這一規(guī)則,找在統(tǒng)一應用開發(fā)平臺,使用注解的方式定義HTTP請求和資源處理組件之間的映射關系。其中@ControllerHTTP@RequestMap注解將特定的URL和具體的控制器類或控制類類中的方法綁定。URL }}在①處的Controller注解表明這個類是平臺的控制器類,可以處理HTTP請求;②處的RequestMap注解定義了可以接收URI的地址為/forum.uap,這樣如果接收到一個URL為/forum.uap的HTTP請求時,就會交由ForumControllerlistAllBoardRequestMap的默認屬性為value,②處的注解也可以寫@RequestMap("/forum")RequestMap注解的值支持ANT風格的URI,其中有三種通配符定義?*URI配置 }}如果在類級別和方法級別上同時標注了RequestMap注解,兩者將URLlistAllBoardURI/forum/listURIREST從資源的角度來觀察整個網絡,分布在各處的資源由URI確定,通常使用一個唯一標識符來指定某個資源,例如 /transformer/beijing/sg。前端發(fā)出REST請求之后,需要獲取對資源的標識。使用@PathVariable注解結合@RequestMap注解,在URI中定義模板變量的方式,獲取URI中的標識符。 }}在上例中,②處RequestMap中注解值為/forum/{boardId}/{topicId},boardIdtopicId中,定義與模板變量同名的參數(shù),并添加@PathVariable注解,就可以通過方法URIHTTP在REST請求中,使用HTTP方法指定了對資源操作的動作 也應該能 } }}根據HTTP方法,確定對資源的操作。RequestMap注解的method屬性對HTTPHTTP例如讓一個方法處理HTTPDELTE請求,而另 } }}通過對HTTPREST } 對于不同類型的前端,REST對同一個資源的請求應當有不同的響應。在HTTP請求的頭信息中,定義了前端緩存處理策略、使用的字符集、可以接收處理的內容類型等信息。RequestMap注解的heads屬性 } }}例如在上邊的例子中,分別創(chuàng)建了真對大屏和筆記本兩種響應方式,Accept } }}HTTP標準中,URI不僅有地址部分,還包括?后以field1=value1&field2=value2 } }}例如在上邊的例子里,如果REST請求的URI的查詢字符串中包含order=month,將調用queryTopicByMonth方法,如果包含查詢字符串中order=author,queryTopicByAuthor寫成params={“key1=value1”,”key2=value2”}這種形式。通常使用自定義使用RequestParam注解,獲取HTTP請求中的參數(shù)信息,用法為@RequestParam(" }}如果請求中包含名為month的參數(shù),將自動賦值到方法參數(shù)中。如果參數(shù)名稱和對方法參數(shù)名稱相同,參數(shù)名稱可以省略。例如上邊就可以寫成映射關系的加平臺在啟動的時候,需要掃描上一個步驟所配置的注解信息,建立映射關系。這樣,當接收到前端發(fā)送的REST請求的時候,可以根據映射關系,請求轉發(fā)到具體的業(yè)務組件和業(yè)務方法進行處理。下面簡單介紹映射關系加載的步驟。HTTP對所有控制器類進行遍歷,掃描類的映射配置信息,并保存到應用緩存中。根據上個步驟映射信息的配置可以看到,URI類級別,也可以配置在方法級別,所以需要綜合進行處理。根據控制器的類型,定義在類上的映射關系注解信URI遍歷類級別URI映射值和類中所有方法的URI映射值,組合類級URIPatternPattern,URI通過以上的步驟,平臺啟動時就完成了映射信息的和加載過程REST請求的轉除了具體的業(yè)務處理,平臺需要在對請求處理之前進行安全驗證、日志記錄,在請求處理之后進行資源回收、日志記錄等必要性非業(yè)務工作??蚣苤卸x了一類稱之為器的對象,在器中可以定義前置方法和后置方法,通過配置的方式,在處理業(yè)務前后執(zhí)行 器中定義的方法。在上邊的步驟中,完成了對HTTP請求與組件之間映射關系的配置和讀取。當接收到REST請求之后,就可以根據HTTP請求信息查找當前加載的映射關系,找到處理當前請求的控制器類,并組合控制器類和定義的器,組裝成為一個完整的執(zhí)行鏈。請求處理與響在完成REST請求的轉發(fā)之后,針對某個REST請求,已經構造出需要執(zhí)按照器的配置順序,順序執(zhí)行其中定義的前置方法。如果某一個前置方false,停止執(zhí)行鏈的進行。按照器的配置順序,反序執(zhí)行其中定義的后置方響應信息格式瀏覽器向發(fā)送REST請求,根據請求內容調用具體的業(yè)務方法后將業(yè)務方法的執(zhí)行結果裝配成為瀏覽器端能夠理解的格式并返回響應。響應信息應該包括以下部分:請求結果,成功或者失敗,表示是否完成請求{successfultrue{successfultruefalse定}data服務交互-面向Web服服務發(fā)sguap-serverorg.codehaus.xfirexfire-service。打開uap項目的/WebContent/WEB-INF/configuration/.xml文件,設置XFire有“#”,則面加上“#”,改為如下圖所示xfire-service, implementsSerializable{privatestaticfinallongserialVersionUID=1L;privateStringname;privateString privateMap<Integer,String>map;privateList<String>list;publicintgetAge(){}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){}publicvoidsetName(Stringname){=name;}publicStringget (){ }publicvoidset ){ }publicMap<Integer,String>getMap(){}publicvoidsetMap(Map<Integer,String>map){this.map=map;}publicList<String>getList(){}publicvoidsetList(List<String>list){this.list=list;}}編寫服務接口services.Service} List<>getList(); List<>setList(List< getObj();publicStringgetGreeting(String>編寫服務實現(xiàn)類 ServiceImplService,SerializableprivatestaticfinallongserialVersionUID=publicList<>getList<>list=newArrayList<=new();2=new();return} Map<Integer,String>map=newHashMap<Integer,String>();map.put(1,"map1");map.put(2,List<String>list=newArrayList<String>(); }publicList< >set }publicStringgetGreeting(Stringname){ o"+name;}}導入需要的模塊和MANIFEST-MFDependenciesorg.codehaus.xfire添加配置文在模塊 下創(chuàng)建如下 結構applicationContext.xmlxfire<?xmlversion=<?xmlversion="1.0"encoding="UTF-"" web-testxfire.xmlServlet<?xmlversion=<?xmlversion="1.0"encoding="UTF- ""cn/schemacn/schemaservice.xml<?xmlversion=<?xmlversion="1.0"encoding="UTF-"" <propertyname="serviceClass" 導出包,啟動前端查看服務URL:s/Service?wsdl,截取部分如下服務編寫說XFireAegisPOJOXMLSOAPAegis數(shù)組集合類型XML另外,XFireJAXB2XMLBeansCastorJiBXMessageBinding等綁定,具體的請參見XFire用戶手冊。XFire如果使用ListMap等集合類型則必須泛型類型如List<String>,如只為List在生成wsdl文件時會出錯。服務調打開MANIFEST-MFDependenciesXFireweb動態(tài)前端(Dynamicweb創(chuàng)建服務,其中的url為調用服務的wsdl地址= (newObject[]results.invoke(methodName,new例如,采用這種方法調用剛發(fā)布的ServiceImpl服務的StringurlString==new(newObject[] .invoke("getGreeting",newServiceserviceModel=new要注意的是,這里的“YourService”URLStringserviceURL=為服務創(chuàng)建一個=(YourService)new使用服務提供的方法Stringname=結構。例如,調用ServiceImpl中的方法代碼:String ServiceserviceModel=newObjectServiceFactory().create( Service)new Factory().create(serviceModel,url); >list= } >list2=new //設 for per }3 Map<Integer,String>map= List<String>list3= for(Stringstr:list3){}System.out.println("\n服務器端返回的Map集合 tor<Integer>i intresultKey=i StringresultValue=map.get(resultKey);}前端/XFire提供了前端 Stubs生成功能利用Stubs調用web服務的過程WebURLStringserviceURL==newServiceNamePortTypeserviceweb[ReturnObjectType]result=這里要注意的是“ReturnObjectType”必須是StubsJAVA的簡單數(shù)據類型。例如:如果原來POJO的methodName()方法返回的是一個String[],ArrayOfStringXFireStubs,XFireReturnObjectTypeStubsweb服務時使用的原始數(shù)據結構。有關前端 的Stubs生成請參見 文檔運行環(huán)jaruapUAPcxfweb新建動態(tài)模塊cxf-service作為cxf服務端模塊,模塊必須依賴org.apache.cxf_1.3.1.jar新建動態(tài)模塊cxf-,模塊也必須依賴org.apache.cxf_1.3.1.jar發(fā)布與11cxf(添加相關注解2、在服務端模塊中開發(fā)實現(xiàn)類(添加相關注解3cxfserverWebService,服simple:server、jaxws:server、jaxws:endpoint34、創(chuàng)建客戶端模塊,編寫客戶端式、編程式)1、packagepackageimportimportimportjavax.jws.soap.SOAPBinding;importjavax.jws.soap.SOAPBinding.Style;@SOAPBinding(style=publicoWorldpublicpublicStringram(name="name")String}2、開發(fā)實現(xiàn)類packagepackageimportimportimportimportimport@SOAPBinding(style=publicoWorldImploWorldpublicStringram(name="name",header=true)name)returnname+"o }}3、在 下新建CXF配置文<<beans""" h <!--<module:servlet>simple:server<bean<beanoWorldImpl"<simple:server<refoWorldServiceBean"<entrykey="mtom-enabled"value="true"發(fā)布服務端模塊后,啟動UAP項目,模塊上下文路徑為cxf-service。根據上圖的配置的address,發(fā)布服務的地址的后綴為oWorld,CXFServlet的 oWorld=(value=publicObjectsayByConfig()Stringmessage returnXML,配置方式<entrykey="mtom-enabled"value="true">以上配置完成后,可以把服務當成beanId為oWorld的springbeanResourceAutowire}}發(fā)布客戶端模 cxf-,在瀏覽器地址中輸webserviceprivateFactoryBeanfactory=staticMap<String,Object>props=newHashMap<String,privateFactoryBeanfactory=staticMap<String,Object>props=newHashMap<String,Object>();props.put("mtom-enabled",Boolean.TRUE); }(value=publicObjectsayByCode()= oWorld)Stringmessagereturn}發(fā)布客戶端模塊,啟動UAP項目,在瀏覽器地址欄輸入:webservicejaxws:server在服務端模塊的 下新建xml文件,文件的配置如下<bean<beanoWorldImpl"<bean <beanid="inLoggingInterceptor"<jaxws:server<ref <ref<refsimple:server在cxf客戶端模塊的 下新建xml配置文件,配置的方式如下<entrykey="mtom-enabled"value="true">配置完成后,在代碼中使用的方式與simple:的方式一樣,可以參simple:的方式驗證這種方式是否成功調用發(fā)布服務的模塊的webservice的方法與simple:的方式相同。采用編程方式與調用simple:server發(fā)布的服務有些不同,采用的是 FactoryBean,privateprivatestatic FactoryBeanfactory=//privateFactoryBeanfactory=staticMap<String,Object>props=newHashMap<String,Object>();props.put("mtom-enabled",Boolean.TRUE); }(value=publicObjectsayByConfig()Stringmessage return}使用這種方式調用服務成功后,驗證方式與simple:的方式相同jaxws:endpoint在服務端模塊的 下增加以下配置<jaxws:endpoint<jaxws:endpoint <entrykey="mtom-enabled"value="true"發(fā)布服務端模塊,啟動UAP項目,驗證服務是否發(fā)布成功,驗證方式與simple:server客戶端調用WebService的方式與jaxws:server相同。配置方式采用jaxws:來調用服務,編程方式采用JaxWsFactoryBean安全機制-令牌<bean oWorldImpl"<beanid="outLoggingInterceptor"class="erceptor.LoggingOutInterceptor"/><bean oWorldImpl"<beanid="outLoggingInterceptor"class="erceptor.LoggingOutInterceptor"/> 的WebService的name--<beanid="inLoggingInterceptor"class="erceptor.LoggingInInterceptor"/><jaxws:server <ref oWorldServiceBean"<refbean="outLoggingInterceptor"<refbean="inLoggingInterceptor"<ref<beanid="soapAuthIntercepter"<propertyname="token" <entrykey="mtom-enabled"value="true"<refbean="mySoapAuth" <bean<propertyname="authHeader"ref="authHeader"<bean <propertyname="content" oworld"以上配置中AuthHeader的content的值必須與服務端token值一致,平臺會把content的值封裝到SoapMessage中傳輸?shù)椒斩?。在服務端調用的時候進動態(tài)發(fā)布Web服環(huán)境準在UAP項目的配置文件_exclude_perties中,注org.apache.cxfcom.sgcc.uap.core.webservice,如下圖所示:創(chuàng)建數(shù)據庫用戶,執(zhí)行以下數(shù)據 createcreatetableWEBSERVICE VARCHAR2(32)not VARCHAR2(20), SERVICEPROVIDERVARCHAR2(100),SERVICECONSUMERVARCHAR2(100), VARCHAR2(100),OUTDESCRIPTIONVARCHAR2(100), )altertableaddconstraintWEBSERVICE_PKprimarykeydatasource.xmlUAP新建Web服 ,出現(xiàn)如下頁Webservicecom.sgcc.uap.core.webservice的classpath下包含包名的全路徑的類地址必Webservice激活Web服WebserviceWebservice,點擊激活按鈕,注意一次只Webservice,WebserviceWebservice“/WebserviceWebservice Webservice,Webservice撤銷Web服WebserviceWebserviceWebserviceWebservice再次輸入編輯Web服WebserviceWebservice刪除Web服只有未激活狀態(tài)的Webservice才能刪除,勾選一條未激活狀態(tài)的Web導出Web服點擊“導出”按鈕,彈出如 框,選擇要保存 ,點擊“保存Web服務持已激活的Webservice在項目重啟后又會變?yōu)槲醇せ顮顟B(tài),無法被調用,配置perties的WEBSERVICE_INIT=true,則在啟動的時候會激Webservice。WEBSERVICE_INITfalse邏輯邏輯層-用戶自定義Bizc概邏輯層一般認為其處于UAP項目分層體系的服務層,介于交互層和持久層之的封裝。在UAP中,邏輯層技術主要指的是一個個邏輯構件,在一定程度上簡化了用戶在開發(fā)中,使用事務、WebServicesAOP基本使邏輯層是整個UAP應用模塊化開發(fā)的一部分,在UAP中,邏輯層技術主要指}} }} privateIMyBizcmyBizc;//注入邏輯構件myBizc,屬性名稱與配置文件中的id一}}}}}}}(紅色字體為事務配置異常定邏輯構件配置文件邏輯層-事務管SpringSpring邏輯層-安全管理組概基本使會話管數(shù)據安4加密、的裝置或算法接收方需通過密鑰及加密算法的逆算法進行DES、IDEA發(fā)送時可根據接收方的公鑰和相應的加密算法對進行加密傳輸接收方只有通過自己的密鑰才能進行單向加密算法包括BASE64、信 算法(MD5)、BASE64、安全散列算(SHA)、散列消息鑒別碼(HMAC)對稱加密算法包括DES(DataEncryptionStandardPBE(Password-basedencryption,基于驗證)等EncryptEncoder無無無無使用DES對數(shù)據str進行加密操使用3DES對數(shù)據str進行加密操使用AES對數(shù)據str進行加密操使用RSA對數(shù)據str進行加密操使用MD5對數(shù)據str進行加密操使用SHA對數(shù)據str進行加密操DecipherEncoder無無無無異常定加密操作時,我們提供了異常類EncryptFailureException持久概基本使Hibernate,支持這樣做的目的是為了能夠清晰地劃分應資源配在平臺的持久層中需要配置的資源主要有:DataSource、SessionFactorytransactionManager該工廠用于提供到此DataSource對象表示的物理數(shù)據源的連接。作為情況下平臺將為用戶自動配置一個DataSource對象以及其對應的SessionFactory對象和TransactionManager對象,具體的配置可以在datasource.xmldatasource.xml的DataSource對象,當然用戶也需要為自己定義的DataSource對象定義相應的SessionFactoryTransactionManager在配置DataSource對象時,需要注意DataSource的配置方式有兩種:不使driverClassNameOracle-Sqlserver–com.url:Oracle-jdbc:oracle:thin:@服務器地址DB2-jdbc:db2://服務器地址Sqlserver–jdbc::sqlserver://服務器地址username:數(shù)據庫的用戶名password:該用戶的數(shù)據庫連接 jndiName:java命名 接口服務,使用在高級網絡應用開發(fā)中的tomcat中jndiName是前 p/env+JDBC連接的資源WeblogicjndiNameJDBCresourceRef:如果你不想使用' p/env/'前綴的話請設置值為true,默認值為false。持久化方法的IHibernateDao,接口中封裝一系列的持久化}}}}**}}Hibernate相關配平臺Hibernate相關配置文件主要有兩個:Hibernate數(shù)據庫表映射文件(.hbm.xml)moduleEntityPersistence.xml 然后需要在模塊項目的config 配置文件只需在其中添加相應的配置映射文件的存放路徑即可具體信息如下 持久層接口po、map、doma)publicvoidsaveMap(MapmapMapb)publicvoidsaveDom(Elementdomdomc)publicvoidsaveObject(ObjectpopopopublicListfindAll(StringhqlSQLpublicListfindAllByCriteria(QueryCriteriacriteria同時支持數(shù)據庫類型:oracle、db2、在publicvoidsaveMap(Mapmap)方法調用mapTemte中方法持久化在publicvoidsaveDom(Elementdom)方法調用domTemte中方法持久化;在publicvoidsaveObject(Objectpo)方法調用pojoTemte中方法持久化;實例化途徑:通常情況下建議通過平臺邏輯層的管理機制注入,代碼示例}IHibernateDao接口的調用方法及其相關參數(shù)請參考框架持久層API,此hql語句時,hibernateSQLjava不同的關鍵字。例如:memberHQL為“fromMembermemberunexpectedtoken:MemberMemberHQLHQL些關鍵字。Hqlsguap多數(shù)據源配置方修改 在uap項目中的datasource.xmlid為datasource1的beanbeanbeandataSourceService1新建com.sgcc.uap.core.persistence.config展目錄,在該目錄下增加pertiespersistence-reference.xml、#oraclesessionFactory.hibernateProperties[hibernate.dialect]=#sqlserver#sessionFactory.hibernateProperties[hibernate.dialect]=#db2#sessionFactory.hibernateProperties[hibernate.dialect]=sessionFactory.hibernateProperties[hibernate.show_sql]=truesessionFactory.hibernateProperties[hibernate.jdbc.fetch_size]=50sessionFactory.hibernateProperties[hibernate.jdbc.batch_size]=#oraclesessionFactory1.hibernateProperties[hibernate.dialect]=#sqlserver#sessionFactory1.hibernateProperties[hibernate.dialect]=#db2#sessionFactory1.hibernateProperties[hibernate.dialect]=sessionFactory1.hibernateProperties[hibernate.show_sql]=truesessionFactory1.hibernateProperties[hibernate.jdbc.fetch_size]=50sessionFactory1.hibernateProperties[hibernate.jdbc.batch_size]=100= persistence-service.xml persistence.xml 以上配置的原則就是增加一套數(shù)據源配置來獲取hibernateDao1,把這個hibernateDao1OSGi使用新的數(shù)據modueEnttyersence.xml進來,如下 hibernateDao1hibernateDao分布式事務集成(根據pm生成的代碼Tomcat本身并不支持JTA事務,但是可以通過集成第來實現(xiàn)分布式事Atomikos新建多個數(shù)據源并發(fā)布服UAPdataSource.xml,(以兩個數(shù)據源為<!--加載數(shù)據庫配置,采用atomikosAtomikosDataSourceBean<beanid="dataSource1"init-method="init"destroy-<description>oraclexa<property<property<property<prop<prop<prop<property<property<property<property<propertyname="borrowConnectionTimeout"value="10000"<property<value>select1from<beanid="dataSource"init-method="init"destroy-<description>oraclexa<property<property<property<prop<prop<prop<property<property<property<property<property<value>select1from<module:serviceid="dataSourceService"beanId="dataSource"<module:serviceid="dataSourceService1"beanId="dataSource1"新建持久層擴展模com.sgcc.uap.core.persistence.config ,在 下增persistence-service.xml、persistence.xml,#oraclesessionFactory1.hibernateProperties[hibernate.dialect]=#sqlserver#sessionFactory.hibernateProperties[hibernate.dialect]=#db2#sessionFactory.hibernateProperties[hibernate.dialect]=sessionFactory1.hibernateProperties[hibernate.show_sql]=truesessionFactory1.hibernateProperties[hibernate.jdbc.fetch_size]=50sessionFactory1.hibernateProperties[hibernate.jdbc.batch_size]==#setmaxresultnumberforhibernatehibernateDaoSupport1.maxResults2000persistence-reference.xml的文件內容如下: persistence.xml<?xmlversion="1.0"encoding="UTF-<beansxmlns="xmlns:xsi="<property<reflocal="oracleLobHandler"<property<propkey="hibernate.dialect"><prop<prop<prop<property<refbean="dataSource1"<beanid="hibernateDaoSupport1"<propertyname="maxResults"value="2000"<property<refbean="sessionFactory1"<beanid="baseDao1"<property<refbean="dataSource1"<property<refbean="hibernateDaoSupport1"<beanid="hibernateDao1"<property<refbean="dataSource1"<property<refbean="baseDao1"<property<refbean="hibernateDaoSupport1"<beanid="hibernateHandle1"scope="prototype"<property<refbean="sessionFactory1"<propertyname="maxRows"value="2000"<beanid="hibernateInterceptor1"<property<refbean="sessionFactory1"<beanid="atomikosTransactionManager"<propertyname="<beanid="atomikosUserTransaction"<propertyname="transactionTimeout"value="20000"<bean<property<refbean="atomikosTransactionManager"<property<refbean="atomikosUserTransaction"<propertyname="allowCustomIsolationLevels"value="true"<propertyname="transactionSynchronizationName"persistence-service.xml<?xmlversion="1.0"encoding="UTF-<beansxmlns="xmlns:xsi=" <module:serviceid="sessionFactoryService1"<module:serviceid="baseDaoService1"beanId="baseDao1"targetName="com.sgcc.uap.persistence.IBaseDao"/><module:serviceid="hibernateDaoService1"beanId="hibernateDao1"targetName="com.sgcc.uap.persistence.IHibernateDao"/><module:serviceid="jtaTransactionManagerService"ger"/>hibernateDao1,并且把分業(yè)務模塊使用(PxTest.java,ShUser.java以及hbm文件修改業(yè)務應用項目MANIFEST.MF文件。導入包javax.transaction(modueEnttyersence.xml)事務進來,如下:<?xmlversion="1.0"encoding="utf-<beansxmlns="xmlns:xsi=" <module:entityid="testEntity" <module:entityid="testEntity1" <module:referenceid="hibernateDao1"<module:referenceid="hibernateDao"<module:referenceid="jtatransactionManager"<?xmlversion="1.0"encoding="UTF-<beansxmlns="<tx:annotation-driventransaction-<aop:advisorpointcut="execution(*<tx:adviceid="txTestBizcAdvice"transaction-<tx:methodname="save*"<tx:methodname="remove*"采用式事務<?xmlversion="1.0"encoding="UTF-<beansxmlns=" <bizc:logic<bizc:implementationtype="java"target="c.TestBizc"/><bizc:serviceinterface="c.ITestBizc"<bizc:referencetarget="hibernateDao"<bizc:referencename="hibernateDao"target="hibernateDao"type="bean"/><bizc:referencename="hibernateDao1"target="hibernateDao1"type="bean"/>publicclassTestBizcimplementsprivateIHibernateDaoprivateIHibernateDaopublicvoidsetHibernateDao1(IHibernateDaohibernateDao1)this.hibernateDao1=}publicvoidsetHibernateDao(IHibernateDaohibernateDao)this.hibernateDao=}publicList<PxTestVO>save(List<Map>list)return}}采用編程式事務<?xmlversion="1.0"encoding="UTF-<beansxmlns=" <bizc:logic<bizc:implementationtype="java"target="c.TestBizc"/><bizc:serviceinterface="c.ITestBizc"<bizc:referencetarget="hibernateDao"<bizc:referencename="hibernateDao"target="hibernateDao"type="bean"/><bizc:referencename="hibernateDao1"target="hibernateDao1"type="bean"/><bizc:referencename="jtatransactionManager"type="bean"publicclassTestBizcimplementsprivateIHibernateDaoprivateIHibernateDaoprivateTransactionManagerpublicvoidsetJtatransactionManager(JtaTransactionManagerjtatransactionManager){this.jtatransactionManager=}publicvoidsetHibernateDao1(IHibernateDaohibernateDao1)this.hibernateDao1=}publicvoidsetHibernateDao(IHibernateDaohibernateDao)this.hibernateDao=}publicList<PxTestVO>save(List<Map>list) }catch(Exceptiontry}catch(IllegalStateExceptione1)//TODOAuto-generatedcatchblock}catch(SecurityExceptione1)//TODOAuto-generatedcatchblock}catch(SystemExceptione1)//TODOAuto-generatedcatchblock}}return}}注意事exception:com.atomikos.datasource.ResourceException:Errorinrecovery】SYSDBASQLgrantselectonsys.dba_pending_transactionstograntselectonsys.pending_trans$to當前數(shù)據庫用戶;grantselectonsys.dba_2pc_pendingtograntexecuteons
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 事業(yè)單位臨時聘用人員合同
- 內外墻抹灰勞務合同書
- 購房合同定金協(xié)議書
- 三農村電商三農村創(chuàng)新創(chuàng)業(yè)支持方案
- 2025年寧波貨運從業(yè)資格證考試模擬考試
- 2025年陽泉貨運車從業(yè)考試題
- 小學二年級數(shù)學下冊口算題人教版
- 電瓶車抵押給個人合同(2篇)
- 電機員工合同(2篇)
- 市貫徹落實第輪省生態(tài)環(huán)境保護督察報告整改方案
- 2024年中國黃油行業(yè)供需態(tài)勢及進出口狀況分析
- 永磁直流(汽車)電機計算程序
- 中學學校2024-2025學年教師發(fā)展中心工作計劃
- 小班期末家長會-雙向奔赴 共育花開【課件】
- 2024年江西省高考物理試卷(含答案解析)
- 頸部瘢痕攣縮畸形治療
- 貴州省貴陽市2023-2024學年五年級上學期語文期末試卷(含答案)
- 規(guī)劃課題申報范例:俄羅斯教育改革研究(附可修改技術路線圖)
- 運輸企業(yè)安全事故報告調查處理制度(簡單版5篇)
- 端午做香囊課件
- 墨香里的年味兒(2023年遼寧沈陽中考語文試卷記敘文閱讀題及答案)
評論
0/150
提交評論