SG-UAP_V3 0 0_高级开发手册_分册4 公共套件_第1页
SG-UAP_V3 0 0_高级开发手册_分册4 公共套件_第2页
SG-UAP_V3 0 0_高级开发手册_分册4 公共套件_第3页
SG-UAP_V3 0 0_高级开发手册_分册4 公共套件_第4页
SG-UAP_V3 0 0_高级开发手册_分册4 公共套件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SG-UAP高级开发手册国家电网公司应用系统统一开发平台(SG-UAP V3.0.0)高级开发手册4.公共套件国网信息通信产业集团研发中心2017年8月V2.0修订记录章节号修订说明修订人修订时间审核人1增加SG-UAP任务调度本地部署方式高寻2013-04-262修改了v1.2部分更新的内容邱新才2013-04-28目录1.1SG-UAP任务调度11.1.1概述11.1.2任务调度管理配置21.1.3集成执行组件开发概述集成执行组件运行机制组件配置操作.1远程组件部署配置.2本地组件部署配置.3编写Java执行组件实现.4为业务系统组件发布服务在业务系统中获取任务调度信息.1在业务系统中引入依赖bundle.2在Java执行组件中获取任务信息验证集成执行组件.1输入正确地址.2可能出现的错误121.2SG-UAP即席报表141.2.1概述141.2.2即席报表使用(二次开发)151.2.3业务系统与即席报表集成开发直接调用即席报表页面HTML页面组件集成16351.1 SG-UAP任务调度1.1.1 概述图表1.1-1 功能图统一开发平台任务调度系统基于统一开发平台,为业务应用中的任务调度提供设计和运行支持。任务调度产品由三个部分组成:任务定义、任务执行和监控和任务分析统计。任务定义:定义一个任务,包含若干执行的执行组件,并确定任务执行的若干个调度规则。选定执行组件,并根据选择的执行组件,录入任务执行时所需参数任务执行:任务和调度规则的解析,任务执行。任务监控:监控任务调度服务的运行状态,并在服务发生不可控制的异常停止时自动收集错误信息,可自动拉起服务,以保持服务的正常运行,增强系统的可靠性。可实时监视任务的执行状态和运行过程,接受任务调度服务运行时的状态信息,任务的运行时调试信息、以及任务运行时异常信息的接收并显示;可以手动方式控制任务的执行,比如启动、停止任务;可以根据任务模型进行历史运行记录查询。任务统计分析:任务日志记录及查看并且提供图形化分析功能。用户通过任务设计器定义任务模型最终存储在关系型数据库中。在任务调度服务启动时会加载任务模型,并注册到调度引擎中。任务的执行和逻辑并不运行在任务调度程序中,而是部署和运行在业务系统中,按照任务调度系统制定的接口规范将其暴露成OSGI服务。任务模型中以配置方式定义任务逻辑的调用入口,任务调度引擎在触发任务后基于配置调用指定服务。用户可以通过直接登录任务调度系统进行监视和控制任务,如:监视运行状态,控制任务启停等。并可对历史数据进行查看和分析。1.1.2 任务调度管理配置SG-UAP 任务调度登录地址:通过workbench登录后再输入任务调度的地址,http:/localhost:9000/uapproject/taskdispatch/mxweb/index.jsp,其中uapproject是UAP项目上下文,具体配置方法和步骤请参考文档SG-UAP任务调度系统用户使用手册。1.1.3 集成执行组件开发概述任务调度组件是在Quartz基础上扩展开发的任务监控和任务建模工具,任务监控以Web方式实现控制界面、分析管理图表,任务调度提供开放式的任务定义、调度、规则配置等功能,任务调度组件具有自定义业务逻辑、图形化界面、自定义超时处理策略、任务执行控制标准接口、任务执行日志记录、多任务组合、任务调度监控、实时任务监控等功能特点。集成执行组件运行机制A业务系统自定义spring Bean,继承执行组件bundle中的组件接口ITaskDispatchService,并通过配置文件将该Bean发布成OSGI服务,将服务注入到组件bundle中。从而执行组件可以接受远程或本地任务调度引擎的触发调度。B远程restful方式,业务系统需要引入任务调度执行组件bundle(ponent),在执行组件bundle内会自动发布两个rest服务: 系统调用post服务:/taskdispatchcomp/rest/taskcom/components/ 测试连接的get服务:/taskdispatchcomp/rest/taskcom/components/serviceid,serviceid为服务ID。C.本地部署方式,业务系统需要引入任务调度模块bundle(ponent),在调度模块bundle内会调用A中在OSGI容器注册过的服务,并且自动发布一个测试连接的get服务:http:/ip:port/系统客户端名称/bundle名称/过滤资源字符串/rest资源名1级/ rest资源名2级/服务ID,例如:88:9998/sguap-client/taskdispatch/rest/tasklocalcom/components/testTaskService。D.WebService方式,业务系统发布WebService服务后,任务调度基于Xfire框架根据URI例如:88:9898/sguap-client/BussinessRemote/services/ITaskDispatchWebService?wsdl进行服务调用E.JMS调用方式,又称异步调用方式,为平台指定消息中间件后平台将调度对象以消息形式发到中间件,业务系统根据自己配置的消息队列自行监听消息服务,获取任务消息。组件配置操作.1 rest组件部署配置在组件定义中选择rest组件。如图-1: 图-1首先配置MANIFEST.MF文件。如图-3所示点击MANIFEST.MF:图-3如图-4所示,将执行组件bundle(ponent)引入项目,点击“Add”按钮。图-4查找bundle(ponent)引入项目,点击“OK”,如图-5所示。业务系统实现类参考。图-5远程组件部署需要在组件定义中填写URI,如图-6所示。图-.1.1 编写rest组件实现在业务系统中新建Class,在Interfaces选择中添加继承执行组件bundle(ponent)中的接口。如图-1图-1点击Add后,在接口选择界面中选择ITaskDispatchService,如图-2所示:图-2生成Class 后如图-3所示,在dispatchComponent方法中实现执行组件的业务方法 ,返回值同样为TaskComponent,为保证RestTemplate通信正确此处返回值不能为null,具体实现内容由业务系统决定。具体填充内容由业务系统决定。图-3参数TaskComponent类的主要属性和描述:i属性名称描述jobNamejob名称jobGroupNamejob组名createDate执行组件创建时间createJobDatejob创建时间schedName调度实例名称componentDescription执行组件描述applicationID应用IDapplicationName应用名称componentID组件IDcomponentType执行组件类型jobDescription任务描述dispatchTime触发时间ServiceID业务组件IDJsonParam扩展参数.1.2 为业务系统发布rest组件服务执行组件编写好之后,需要做两部分的配置:1、将组件实现配置到Spring IOC容器中:2、将spring 容器中的Bean实例发布成OSGI服务,并注入到执行组件bundle(ponent):配置中id为服务ID,后面测试时使用服务ID测试,注意该Service ID在UAP任务调度平台中唯一。 beanId为配置1中的spring beanid在系统bundle唯一。后面配置为组件bundle固定配置。.2 本地组件部署配置在组件定义中选择rest组件。如图-1: 图-1首先配置MANIFEST.MF文件。如图-3所示点击MANIFEST.MF:图-3如图-4所示,将执行组件bundle(ponent)引入项目,点击“Add”按钮。图-4查找bundle(ponent)引入项目,点击“OK”,如图-5所示。业务系统实现类参考。图-5远程组件部署需要在组件定义中填写URI,如图-6所示。图-.2.1 编写本地组件实现在业务系统中新建Class,在Interfaces选择中添加继承执行组件bundle(ponent)中的接口。如图-1图-1点击Add后,在接口选择界面中选择ITaskDispatchService,如图-2所示:图-2生成Class 后如图-3所示,在dispatchComponent方法中实现执行组件的业务方法 ,返回值同样为TaskComponent,为保证RestTemplate通信正确此处返回值不能为null,具体实现内容由业务系统决定。具体填充内容由业务系统决定。图-3参数TaskComponent类的主要属性和描述:i属性名称描述jobNamejob名称jobGroupNamejob组名createDate执行组件创建时间createJobDatejob创建时间schedName调度实例名称componentDescription执行组件描述applicationID应用IDapplicationName应用名称componentID组件IDcomponentType执行组件类型jobDescription任务描述dispatchTime触发时间ServiceID业务组件IDJsonParam扩展参数.2.2 为业务系统发布本地组件服务执行组件编写好之后,需要做两部分的配置:1、将组件实现配置到Spring IOC容器中:2、将spring 容器中的Bean实例发布成OSGI服务,并注入到执行组件bundle(ponent):配置中id为服务ID,后面测试时使用服务ID测试,注意该Service ID在UAP任务调度平台中唯一。 beanId为配置1中的spring beanid在系统bundle唯一。后面配置为组件bundle固定配置。.3 WebService组件部署配置在组件定义中选择Webservice组件其中url以?WSDL结尾。如图:.3.1 编写WebService组件实现在业务系统中新建Class,在Interfaces选择中添加继承执行组件bundle(ponent)中的接口。如图-1图-1点击Add后,在接口选择界面中选择ITaskDispatchWebService,如图-2所示:图-2生成Class 后如图-3所示,在dispatchComponent方法中实现执行组件的业务方法 ,返回值同样为TaskWSComponent,为保证RestTemplate通信正确此处返回值不能为null,具体实现内容由业务系统决定。具体填充内容由业务系统决定。图-3参数TaskWSComponent类的主要属性和描述:属性名称描述jobNamejob名称jobGroupNamejob组名createDate执行组件创建时间createJobDatejob创建时间schedName调度实例名称componentDescription执行组件描述applicationID应用IDapplicationName应用名称componentID组件IDcomponentType执行组件类型jobDescription任务描述dispatchTime触发时间ServiceID业务组件IDJsonParam扩展参数ITaskDispatchWebService接口比ITaskDispatchService多一个Test方法需要实现,该方法用于组件测试,返回值为字符串,如果字符串必须有内容否则系统判断为服务不通。.3.2 为业务系统发布WebService组件服务参数执行组件编写好之后,需要做三部分的配置:1、在Spring IOC容器中声明XFireSpringServletOSGI映射:XfireServletcom.sgcc.uap.xfire.spring.XFireSpringServletOSGI/services/*2、引入xfire.xml:3、声明业务Bean,将业务Bean注入到spring发布的XFire服务中:.4 JMS组件部署配置在perties中配置TASKDISPATCH_JMS_URL=tcp:/ip:61616(不配置默认:tcp:/localhost:61616)如图: 在组件定义中选择jms组件。如图:点击测试组件可以登陆activeMQ中间点监控界面查看:88:8161/admin/如图:如上图所示增加了一条名为com.sgcc.uap.jms.test的队列,这是任务调度的测试队列并且任务调度提供该队列的监听,如果测试成功了说明用户配置的TASKDISPATCH_JMS_URL所指向的中间件是可用的(注意这里测试的并不是业务系统的队列 该例子业务系统队列是:com.bussiness.test)。SerivceID是业务系统自己的队列名称和URI一致即可。.4.1 编写JMS组件监听在业务系统中新建Class,在Interfaces选择中添加继承执行组件bundle(ponent)中的接口。如图-1图-1代码继承: javax.jms.MessageListener接口实现,TaskJMSComponent component = (TaskJMSComponent) objMsg.getObject();通过objMsg.getObject()返回任务调度的数据对象。图-2参数TaskJMSComponent类的主要属性和描述:属性名称描述jobNamejob名称jobGroupNamejob组名createDate执行组件创建时间createJobDatejob创建时间schedName调度实例名称componentDescription执行组件描述applicationID应用IDapplicationName应用名称componentID组件IDcomponentType执行组件类型jobDescription任务描述dispatchTime触发时间ServiceID业务组件IDJsonParam扩展参数.4.2 为业务系统发布JMS组件服务执行组件编写好之后,需要做两部分的配置:1、声明监听工厂: 2、声明队列名称,下例的com.bussiness.test就是该业务系统的队列名称: 3、声明业务系统监听messageListener,并请将该实例注入到DefaultMessageListenerContainer中:在业务系统中获取任务调度信息.5 在业务系统中引入依赖bundle打开配置MANIFEST.MF文件,如图1所示点击MANIFEST.MF:图1如图所示,引入org.codehaus.jsckson.core和org.codehaus.jackson.mapper两个bundle。.6 在Java执行组件中获取任务信息任务信息:任务定义中配置的一些信息,如任务名称、任务参数、任务描述等。在Java执行组件的dispatchComponent方法中,获取任务信息代码片段如下:String jobname = arg0.getJobName();/获取任务名称JsonNode jn = arg0.getJsonParam();/获取任务的参数数据String username = jn.get(username).getTextValue();/获取任务执行组件中的参数值String dept = jn.get(dept).getTextValue();/获取任务执行组件中的参数值.7 在Java执行组件中获取动态脚本信息在任务定义中添加动态脚本请参考SG-UAP_V2.0_任务调度使用手册.doc里的动态脚本章节。在Java执行组件的dispatchComponent方法中,获取任务信息代码片段如下:String jobname = arg0.getJobName();/获取任务名称JsonNode jn = arg0.getJsonParam();/获取任务的参数数据 String scriptedResult = arg0.getScriptedResult();/获取任务的动态脚本.8 通过脚本来调用JAVA执行组件1:更改platformconfig.xml文件,将任务调度发布方式改为本地#=# Configure plugins#=org.quartz.plugin.listenerLoader.class=com.sgcc.uap.task.plugin.ListenerLoaderPlugin#componentManagerLocal#TASKDISPATCH_DEPLOY=componentManagerRemoteTASKDISPATCH_DEPLOY=componentManagerLocalTASKDISPATCH_TIMEZOMEID=GMT+82:在xml中配置JAVA执行组件,如下图所示 3:编写JAVA执行组件,如下图所示package ponent.impl;import com.sgcc.uap.serverScript.facadeScript.ScriptCharacterOSGIBridge;import com.sgcc.uap.serverScript.groovyEngine.exception.ScriptDispatchException;public class TestBean implements ScriptCharacterOSGIBridgepublic Object dispatch(Object ob) throws ScriptDispatchException / TODO Auto-generated method stubSystem.out.println(TestBean getScriptInstance);return true;4:在任务调度前端页面中通过脚本调用JAVA执行组件并调试验证集成执行组件服务配置完成后,执行组件bundle(ponent)会自动发布两个Rest服务,其中一个功能为测试并检查服务ID。组件访问地址组成:http:/ip:port/系统客户端名称/bundle名称/过滤资源字符串/rest资源名1级/ rest资源名2级/服务ID,即:88:9998/sguap-client/taskdispatchcomp/rest/taskcom/components/testTaskService。在非IE浏览器地址栏输入地址rest地址,本案例以Google chrome测试端,例下:.9 输入正确地址Rest组件输入:88:9998/sguap-client/taskdispatchcomp/rest/taskcom/components/testTaskService结论:收到Json数据,组件配置成功。WebService组件输入:http:/ip:port/sguap-client/BussinessRemote/services/ITaskDispatchWebService?wsdl结论:该WebService可用。.10 可能出现的错误.10.1 输入地址正确地址,将serviceId 填写错误88:9998/sguap-client/taskdispatchcomp/rest/taskcom/components/testTaskServicexxx结论:收到Json数据,组件配置成功,输入ServiceID(红字部分)找不到。.10.2 输入IP或端口错误88:9898/sguap-client/taskdispatchcomp/rest/taskcom/components/testTaskService结论:无法连接到服务器。.10.3 输入系统客户端名称错误或Rest资源名错误88:9998/sguap-clientX/taskdispatchcomp/rest/taskcom/components/testTaskService88:9998/sguap-client/taskdispatchcomp/rest/taskcomx/components/testTaskService88:9998/sguap-client/taskdispatchcomp/rest/taskcom/componentsX/testTaskService结论:无法找到服务器相应的WEB资源服务。.10.4 输入错误的执行组件bundle名称88:9998/sguap-client/taskdispatchcompX/rest/taskcom/components/testTaskService结论:UAP无法找到OSGI相应的模块项目。.10.5 输入错误的过滤资源字符串88:9998/sguap-client/taskdispatchcomp/restx/taskcom/components/testTaskService结论:UAP资源定位是发生错误。1.2 SG-UAP即席报表1.2.1 概述图表1功能图统一开发平台报表系统基于统一开发平台,为业务应用中的报表应用提供设计和运行支持。报表产品由四个部分组成:报表设计器、报表服务、报表客户端以及报表引擎。用户在报表设计器中设计报表后可发布到报表服务器上,由报表引擎来运行报表,报表服务器为报表引擎提供运行环境,报表引擎会利用统一开发平台的集成设施访问数据,并且可通过公式引擎进行数据运算。报表服务同时提供监控管理功能。报表展示客户端是一个抽象的概念,浏览器可通过url链接直接展示报表页面,也可在web页面中嵌入报表客户端javascript组件,提供在某个局部区域动态注入报表页面的功能。1.2.2 即席报表使用(二次开发)请参考SG-UAP即席报表用户使用手册1.2.3 业务系统与即席报表集成开发如果要集成即席报表设计的报表,必须先在国网统一应用平台的报表管理模块中新建报表模版,并进行报表设计。如下图所示:图表2统一应用平台-报表管理 直接调用即席报表页面1. 在要展示报表的JSP或HTML界面中直接调用报表服务器提供的报表设计界面和预览界面,例如提供的报表服务的地址为84:9002/WebReport/reportserver/(WebReport为项目名称,/reportserver/reportdesigner.html为固定访问地址) ,那么访问报表设计界面的地址为:84:9002/WebReport/reportserver/reportdesigner.html?templateId=*其中templateId为需要访问的报表模版ID。2. 访问的报表预览界面的地址为:84:9002/WebReport/reportserver/reportviewer.html?templateId=*其中templateId为要集成的报表模版的ID,其在报表管理模块中设置。3. 可根据实际应用的需要使用上述的url调用报表页面,例如JSP或HTML界面中使用预览模版模版一 完成调用报表界面。 HTML页面组件集成1. 安装报表服务,获取报表服务地址,例如此时的报表服务地址为http:/localhost:9002/Webreport/reportserver/2. 在要展示报表的JSP或HTML界面中加载uapreport.js文件,例如代码片段如下(src中的内容为uapreport.js的路径):3. 设置报表展示区4. 调用报表对象。1)调用报表预览对象使用以下配置:Var rv = new reportviewer(showId,divId,reportServerUrl);rv.show(templateId,false/true,false/true);其中showId为任意生成的展示id(例如1,2,3等任意整数);divId为展示区的divId;reportserverUrl为步骤1获取的报表服务地址;templateId为要集成的报表模版的ID,其在报表管理模块中设置;show方法的第二个参数可选true或者false,true表示显示工具栏,false表示不显示,可不填写(默认true);show方法的第三个参数可选true或者false,true表示显示参数,false表示不显示参数,可不填写(默认true)。例如:Var reportviewer = new reportviewer(1,flashContent,http:/localhost:9002/WebReport/reportserver/);reportviewer.show(ff8080813aa72515013aab168ebe0007); 2) 调用含有参数的报表预览对象部分报表含有参数,可以直接传入参数进行预览,配置方式如下Var rv = new reportviewer(showId,divId,reportServerUrl);rv.showNewPage(templateId,false/true,false/true,allparams);showNewPage方法中,前三个参数说明请参考前面的说明,allparams 是String类型,参数结构为param1key#=#param1Value#param2key#=#Param2Value,“#=#” 是key 和value 的连接符,相当于原来的等号,用于解决参数或者参数值中包含“=”等特殊符号;“#”是参数与参数之间的隔断符号。此种传参方式不支持“&”这种特殊符号。例如:Var reportviewer = new reportviewer(1,flashContent,http:/localhost:9002/WebReport/reportserver/);reportviewer.show(ff8080813aa72515013aab168ebe0007,false,false,”param1#=#1#param2#=#2”); 2)调用报表设计对象使用以下配置:Var rv = new reportdesigner(showId,divId,reportServerUrl);rv.show(templateId);其中showId为任意生成的展示id(例如1,2,3等任意整数);divId为展示区的divId;reportserverUrl为步骤1获取的报表服务地址;templateId为要集成的报表模版的ID,其在报表管理模块中设置。例如:Var rv = new reportdesigner(2,flashContent,http:/localhost:9002/WebReport/reportserver/);rv.show(ff8080813aa72515013aab168ebe0007);至此,完成报表集成工作,当访问JSP或HTML页面时,就会把对应ID中的报表内容展示出来。 业务系统直接获取报表码流其他业务系统,如果任务调度系统,需要定时生成某种格式的报表文件,需要获取报表的码流,然后进行保存,处理或者其他逻辑。报表2.0版本,支持导出word,excel,rtf,pdf 四种格式的文件码流。下面是代码生成方法:UapExportService exportService = new UapExportService();Map paramsMap = new HashMap();paramsMap.put(test, ss);byte outword = exportService.export(word, 402894364014958201401497a7570002, paramsMap);FileOutputStream out = new FileOutputStream(new File(E:test1.docx);out.write(outword);out.close();byte outExcel = exportService.export(excel, 402894364014958201401497a7570002, paramsMap);FileOutputStream out1 = new FileOutputStream(new File(E:test1.xls);out1.write(outExcel);out1.close();byte outpdf = exportService.export(pdf, 402894364014958201401497a7570002, paramsMap);FileOutputStream out2 = new FileOutputStream(new File(E:test1.pdf);out2.write(outpdf);out2.close();byte outrtf = exportService.export(rtf, 402894364014958201401497a7570002, paramsMap);FileOutputStream out3 = new FileOutputStream(new File(E:test1.rtf);out3.write

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论