NC5技术平台架构zhangqUAP结构图SystemFrameworkUAPTechnologyFrameworkUAPApplicationFrameworkFinancialAccountPlatformDataTransferPreAlertBusinessFlowConfigurationApprovalFlowConfigurationUIDataCacheDataExchangeAccessControlI18NMessageManagementMobileManagementOrganizationManagementBasicApplicationServicesFormPatternsReportPatternsPrintPatternsApplicationPatternsWorkshopFormDesignerReportDesignerPrintDesignerQueryDesignerBusinessFlowDesignerRuleDesignerComponentManagementToolDeploymentToolClientInstallToolConfigurationToolSystemMonitorLogin/CASecuritySchedulerRuleEngineExceptionCacheLogPersistenceFrameworkConnectFrameworkSynchronizationBasicAlgorithmsMetadataManagementSQLTranslatorBasicTechnologyServicesWorkflowRichClientEngineSwingUIControlsSwingUIFrameworkJSPFrameworkJSPTagJavaScriptThinClientEngineSolaris/AIX/Linux/WindowsDB2/Oracle/SQLServer/OSCAROperatingSystemDatabaseJ2EEServer(WebSphere/WebLogic/UFIDAApplicationServer)PortalServerEnterpriseServiceArchitecture(ESA)客户端Application基于安装的客户端浏览器的瘦客户端Firewall负载均衡WebServerHTTPServerPlug-inWebServerPlugPlug-in防火墙NodeBNodeAApplicationServerWebContainerEJBContainerApplicationServerWebContainerEJBContainerApplicationServerWebContainerEJBContainerDatabaseServerDatabaseServerBusinessDataWebServer集群应用服务器集群数据库服务器集群UAP部署图InternetHTTP/HTTPSClientHTTPServerNCV5开发模型•远程接口(远程组件)•Impl远程接口实现类和业务逻辑类•持久化,数据库操作JDBCFramework•UI类•数值VO类代码结构规范•将代码分区域存放---public接口和公共代码(比如VO和公共算法)---private实现和其它实现细节---client客户端代码---gen工具生成ejb目录---META-INF模块配置文件目录•按接口编程---nc.itf.模块:表示该模块定义的接口---nc.impl.模块:表示该模块定义的接口实现---nc.vo模块:表示VO的实现---nc.bs.模块:普通的后台应用---nc.ui.模块.*:客户端代码区域存放结构规范代码结构图如何开始•开发环境的建立Eclipse•定义远程接口•实现远程接口•建立部署文件XX.module,用工具生成EJB•客户端调用远程接口•功能注册,运行调试开发环境建立•Eclipse3.2JDK1.5•UAPnc.uap.mde插件•NC_HOME指定基础技术平台的运行环境根目录(Window-preferences-MDEDevelopment)建立ModuleProject•点击菜单“新建/项目”,选择MDEDevelopment下的MoudleProject开发远程接口组件•V5.0版本的远程组件开发是基于接口,•定义远程接口,就是普通接口,分有事务和无事务。对于事务型的组件(是指该组件的方法调用中事务处理会自动参与)可通过后缀名来判断事务类型,通常为没有后缀•对该接口进行实现•编辑部署文件,发布组件接口,事务型组件和非事务型组件部署文件格式不一样。事务型接口•V5.0中的事务参与模型通过方法名后缀进行判断,判断的方法如下:•方法名后缀RequiresNew:新事务•方法名后缀Mandatory:必须在一个已有的事务环境中运行该方法•方法名后缀Never:不能有事务,否则出错•没有方法名后缀:如果有事务,就在该事务环境下工作,否则新启事务,这是大部分事务型组件的情况•事务型组件一般都是针对数据库等事务性资源进行操作,如果没有对事务性资源进行操作,请不要把组件定义为事务组件。定义和实现接口定义接口packagenc.itf.sample.service;publicinterfaceIHelloWorld{StringsayHello(StringtoName);}实现接口packagenc.impl.sample.service;publicclassHelloWorldImplimplementsIHelloWorld{publicStringsayHello(StringtoName){returnWelcome+toName+exploreV5;}通过XX.Module文件部署组件?xmlversion=1.0encoding=UTF-8?modulepubliccomponentpriority=0singleton=trueremote=truetx=NONEinterfacenc.itf.sample.IHelloPub/interfaceimplementationnc.impl.sample.HelloWorldPub/implementation/component/publicprivatecomponentname=IHelloWorldpriority=0singleton=falseimplementationnc.impl.sample.HelloWorldImpl/implementation/component/private/module配置规范配置规范•公共组件约定:•公共组件的属性中不能出现:name=””,•公共组件可以出现以下属性:tx=”NONE”,singleton=”true”//根据不同情况进行决定,建议采用trueremote=”true|false”•私有组件约定•私有组件的节点中不能出现:interface…/interface•不能出现以下属性:tx=””,remote=””•可以出现以下属性:singleton=”true”//根据不同情况进行决定,建议采用true•name=名称以接口名称为准(不包含包名称)使用工具生成EJB代码客户端调用•IHelloWorldIhello=(IHelloWorld)NCLocator.getInstance().lookup(IHelloWorld.class.getName());ihello.sayhello();•客户端和其他模块系统调用均通过NCLocator启动中间件•中间件配置:Navigate-Goto-Type找到“ufmiddle.start.tomcat.StartDirectServer”,然后Run,newNcApplication。•programarguments设置如下:•${FIELD_NC_HOME}/ierp/bin/prop.xml-Dnc.server.location=${FIELD_NC_HOME}-DEJBConfigDir=${FIELD_NC_HOME}/ejbXMLs-DExtServiceConfigDir=${FIELD_NC_HOME}/ejbXMLs•VMarguments设置如下:•-Dnc.server.location=${FIELD_NC_HOME}-DEJBConfigDir=${FIELD_NC_HOME}/ejbXMLs-DExtServiceConfigDir=${FIELD_NC_HOME}/ejbXMLs•Workingdirectory•选择Other内容为${FIELD_NC_HOME}启动Jstarter•Navigate-Goto-Type找到“nc.starter.test.JStarter”,然后Run,newJavaApplication。•JavaBuildPath中添加“\jdk1.5.0_07\jre\lib\plugin.jar”。日志,SQL语句等调试信息(logger-config.properties)•把anonymous.level改成TRACE,输出文件配置去掉•anonymous.level=ERROR•anonymous.pattern=[%t]%X{remoteAddr}%X{remotePort}%d{yyyy/MM/ddHH:mm:ss}[%A]%p-%m%n•anonymous.file=./nclogs/${server}/anony-log.log•anonymous.size.maxSize=5MB•anonymous.size.maxIndex=20其它常用开发规范•异常(BusinessException或BusinessRuntimeException)•日志,客户端日志(Debug)和服务器端日志(Logger)•持久层JDBCFramework谢谢!