pafa3应用开发入门教程

更新时间:2024-04-03 07:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

中国平安保险(集团)股份有限公司

信息管理中心

名称 PingAn PAFA3 编 号 版本号 密 级 版本 v0.1 v0.5 v1.0 秘密 共 42 页 拟 制 审 核 批 准 马骏、Richard Jin 更改日期 2005-04-11 2005-04-13 2005-04-19

更改信息 部门及更改人 Richard Jin Richard Jin, 马骏,刘申岭 Richar Jin 版本说明 初版 重构 Review & Formatting

PAFA3应用开发入门教程

创建日期:2005-4-8 定版日期:2004-4-20

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 1 页 共 43 页

目录

1. 文档概述 ............................................................................................................................................................... 4 1.1 1.2 1.3 1.4 1.5 1.6

读者定位 ....................................................................................................................................................... 4 限制与约定 ................................................................................................................................................... 4 相关参考文档 ............................................................................................................................................... 4 软、硬件要求 ............................................................................................................................................... 4 示例应用的功能设定 ................................................................................................................................... 4 页面预览 ....................................................................................................................................................... 5

2. 开发环境配置 ....................................................................................................................................................... 7 2.1 2.2 2.3 2.4

安装ECLIPSE ................................................................................................................................................. 7 下载PAFA3类库和项目模板 ..................................................................................................................... 9 数据库表的设计 ......................................................................................................................................... 10 配置WEBLOGIC数据源 .............................................................................................................................. 11

3. 使用项目模板 ..................................................................................................................................................... 13 3.1 3.2 3.3 3.4

在ECLIPSE中导入项目模板 ....................................................................................................................... 13 ANT视图的配置与使用 .............................................................................................................................. 15 ECLIPSE 自动编译设置 ............................................................................................................................... 16 配置文件的分类、目的与作用.................................................................................................................. 18

4. 页面布局设计与实现 ......................................................................................................................................... 19 4.1 4.2 4.3 4.4 4.5

.DO和.SCREEN .............................................................................................................................................. 19 布局分析与设计 ......................................................................................................................................... 19 布局的配置 ................................................................................................................................................. 21 利用ANT构建部署目录 ............................................................................................................................. 22 WEBLOGIC部署测试 ................................................................................................................................... 23

5. “增加用户”功能的设计与实现 ..................................................................................................................... 25 5.1 5.2 5.3 5.4 5.5 5.6 5.7

功能分析 ..................................................................................................................................................... 25 公用层设计与实现 ..................................................................................................................................... 25 WEB层开发与实现 ..................................................................................................................................... 27 配置IBATIS SQLMAPPING ........................................................................................................................... 29 BIZ层开发与实现 ....................................................................................................................................... 29 编辑配置文件 ............................................................................................................................................. 32 WEBLOGIC部署测试 ................................................................................................................................... 33

6. “检索用户”功能的设计与实现 ..................................................................................................................... 35 6.1 6.2 6.3 6.4 6.5 6.6 6.7

功能分析 ..................................................................................................................................................... 35 公用层设计与实现 ..................................................................................................................................... 35 WEB层开发与实现 ..................................................................................................................................... 36 配置IBATIS SQLMAPPING ........................................................................................................................... 37 BIZ层开发与实现 ....................................................................................................................................... 38 编辑配置文件 ............................................................................................................................................. 41 WEBLOGIC部署测试 ................................................................................................................................... 42

7. 生产环境下的部署 ............................................................................................................................................. 43 7.1

禁止DEVLOG输出 ..................................................................................................................................... 43

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 2 页 共 43 页

7.2

构建EAR发布包........................................................................................................................................ 43

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 3 页 共 43 页

1.

1.1

文档概述

读者定位

本文档的目的是为了使用户初步了解PAFA3应用的基本开发环境和开发模式

1.2 ? ? ?

限制与约定

本文档涉及很多的pafa 和 j2ee 的概念和术语,请参考相关文档。

当涉及到其它技术和工具时,只会提示查阅相关资料,在本文中不做讨论。

Eclipse是本文所使用的集成开发环境,由于本文的主要目的并非讨论Eclipse本身,所以只会介绍安装和配置最基本的功能,使用建立文件的方式进行开发。有关Eclipse更多的使用方法和增加插件进行功能增强,请参考其相关文档。

有关Weblogic的安装、使用和配置,请参考其产品文档,本文只简要介绍与本例相关的内容。文档不提供DataSource 等配置的说明文档,请找熟悉j2ee的同事帮助配置DataSource。 本文不涉及关于调试的内容。

由于本文不涉及如何利用Eclipse的增强功能进行源文件编辑,所以之后所提到的所有文件均以纯文本文件的形式创建并给出,参考时可以按照代码框中的内容编辑或拷贝。Java源文件的路径起点为“src\\java”,Web资源如JSP等的源文件路径起点为“src\\webroot”。在Eclipse目录浏览框中相应的目录节点上,点击鼠标右键,选择“新建”? “文件”来创建上述文件,如果包含多重目录,则应该先创建“目录”。 相关参考文档

? ? ?

1.3 ? ? ? ?

本文只介绍最基本的开发环境与过程,其它内容请参考标准文档和演示程序,如: PAFA3开发规范与指南

PAFA Demos(Web Demo,App Demo) FAQ

源文件请参考文档对应的源代码

软、硬件要求

本文基于以下基本软、硬件设定:

Windows 操作系统【2000、XP】 J2SDK 1.4.2【本机安装】

Weblogic 8.1 Application Server【本机安装】

Oracle Database 【8i 以上版本,拥有连接和资源权限即可,不要求本机安装】 建议内存 > 512M

以上指定系统或软件的安装请参考其相关文档,本文不做讨论。

1.4

? ? ? ? ?

1.5 示例应用的功能设定

在这个PAFA3应用入门教程中,将利用pafa3的项目模版构建一个很小的例子用于示范。这个例子的主要功能是添加和检索用户。在这个例子中,假设系统名称为“userapp”,模块名称为

“management”。在用户利用模版构建自己真实应用的时候,请注意系统与模块的命名应该符合公司相关规范。简单的流程如下图所示:

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 4 页 共 43 页

在后续章节中将给出功能的分析和设计模型。 1.6

页面预览

为了对功能设定有直观的理解,在下面的图形中展示了开发完成之后所得到的显示界面:

a) 输入新用户信息

b) 成功录入 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 5 页 共 43 页

c) 输入检索条件

d) 检索结果

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 6 页 共 43 页

2.

2.1

开发环境配置

安装Eclipse

在安装Eclipse之前,需要获得两个相关的安装包,如下图所示:

上图所示Eclipse的版本号为“3.0.2”以及相对应的语言包。这两个安装文件均为ZIP格式,解压缩到指定目录即可,注意应该先解压缩Eclipse的安装文件包“eclipse-SDK-3.0.2-win32.zip”,再解压缩相应的语言包到Eclipse的安装目录,下图即为解压缩后的情况,Eclipse和语言包安装目录为“E:\\eclipse”:

此时基本的Eclipse安装就完成了,如果需要其它Eclipse插件,可以以后再安装。安装完成后点击“eclipse.exe”即可启动Eclipse,Eclipse会自动寻找本机所安装的JDK;还可以在桌面上创建一个链接到“eclipse.exe”的快捷方式。Eclipse启动时会提示选择工作空间的存储位置,使用默认即可,启动后的界面如下图所示:

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 7 页 共 43 页

在上图界面的链接中包括关于Eclipse的简介和教程,此外,通过Eclipse帮助也可以学习Eclipse的使用。关闭“欢迎使用”窗口后,显示界面如下图所示,从下图开始,我们将利用Eclipse进行一个简单应用的开发。

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 8 页 共 43 页

2.2

下载PAFA3类库和项目模板

在进行PAFA3应用项目的开发前,首先应该获取相应的资源,包括:

? 项目模板:一个已经格式化的目录ZIP压缩包,专门用于使用Eclipse进行PAFA3应用开发。 ? Pafa类库:PAFA3应用的基本支持库,包括PAFA3类库和第三方类库。 ? 访问其它系统的所需的类库:如访问UM、CIF2等所需的类库。

资源的下载位置为“IT工作站/Pafa新架构”下相关位置。

在获取了相关资源后,按照下图的方式解压缩并进行组织,其中用红色框出的是应该按照项目要求进行重命名的部分:

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 9 页 共 43 页

在上图中,以“D:\\MyProject\\pafa3Template”为项目根目录,Pafa库和外部系统库均放置在“D:\\MyProject\\lib”目录下。关于PAFA3应用模板下目录的结构定义和每个目录的作用部分会在本文的后续部分提及,完成参考请查阅“PAFA3 文档库”中的相关说明。 在接下来的应用开发中,上图中标识出的目录名称变化为:

? pafa3Template ? userProj : 项目名称,应符合项目命名规范 ? appname ? userapp:应用名称,应符合应用命名规范

? modulename ? management:Java模块名称,应符合模块命名规范 ? module1 ? management:Web模块名称,应符合模块命名规范

从此处开始,除特别说明外,所给出的文件路径均相对于“D:\\MyProj\%userProj”。 2.3

数据库表的设计

从之前给出的预览可以看出,在这个例子中所需的表结构比较简单,下面即为相对应的Oracle SQL脚本的内容:

CREATE TABLE USERS(

ID VARCHAR2(10) NOT NULL, NAME VARCHAR2(20) NOT NULL,

DESCRIPTION VARCHAR2(200) NOT NULL);

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 10 页 共 43 页

将上述脚本存入文件“src\\schema\%user.sql”,然后通过Oracle Sqlplus客户端创建此表,如下图所示:

2.4

配置Weblogic数据源

在这个示例应用中,将使用数据源(Data Source)获得到数据库的连接,因此需要在Weblogic中进行数据源的配置,配置数据源之前则应该首先配置“连接缓冲池”。

缓冲池配置需要确认的参数和范例如下所示: jdbc:oracle:thin:@127.0.0.1:1521:oraking URL oracle.jdbc.driver.OracleDriver Driver Classname pafa User Name password Password 缓冲池配置完成之后,就可以配置数据源了,如下图中所示,其中“Pool Name”就是指之前配置的缓冲池的名称:

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 11 页 共 43 页

记住数据源的JNDI名称“jdbc/pafademoDS”,这个名称将会在后续开发设置数据源时用到。

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 12 页 共 43 页

3.

3.1

使用项目模板

在Eclipse中导入项目模板

使用项目模板可以提高PAFA3应用项目的可管理性、提高开发效率。在之前所准备的开发目录中,用文本编辑器打开项目模板根目录下的“.project”和“build.properties”两个文件,如下图所示,修改属性值或确认属性设置是否与本机环境相符,需要检查的包括下面几项:

? 项目名称:.project中的“”域

? 以目录形式部署时的目录:deploy.single.dir属性 ? 存放EAR的目录:deploy.ear.dir属性 ? PAFA3类库的位置:pafa.lib属性

? 其它项目类库的位置:project.lib属性 ? Weblogic.jar的位置:weblogic.jar属性

保存修改后的文件并保存,打开Eclipse,在Eclipse的菜单中选择“文件 ? 导入…”,将出现下图

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 13 页 共 43 页

中所示的导航界面:

选择“现有项目到工作空间中”后,点击“下一步”,在如下图界面中选择重命名过的项目根目录,“确定”后点击“完成”:

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 14 页 共 43 页

操作完成后,重命名过的模板项目即被导入到Eclipse环境之中。 3.2

Ant视图的配置与使用

通过Eclipse菜单,选择“窗口” ? “显示视图” ? “Ant”,就可以在Eclipse界面中显示出Ant视图,在Ant视图中点击第一个有加号的图标以增加构建文件,如下图所示:

在将项目的构建文件加入Ant视图后,就可以看到构建文件“build.xml”所提供的所有“Task”,在“usage”任务上双击(执行),则可获得关于用法的提示,如下图所示:

Buildfile: D:\\MyProject\%userProj\\build.xml usage: [echo] Pafa Application Build File [echo] 用法:ant -[target] [echo] ------------------------------------------------------ [echo] [target] [echo] clean --> 清空所有输出文件包括build和部署目录 [echo] compile --> 编译Java文件 [echo] ear --> 创建用于发布的EAR包文件 [echo] exploded-ear --> 创建展开目录形式的EAR应用(开发模式) [echo] ------------------------------------------------------ BUILD SUCCESSFUL Total time: 580 milliseconds

执行某个目标时只需要双击或在【target】上点击鼠标右键并选择“Run”即可。【注意,项目下的“dist”部署目录需要执行“刷新”后才看得到,在项目根节点“userapp”的右键弹出菜单中选择“刷

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 15 页 共 43 页

新”即可。】

3.3

Eclipse 自动编译设置

Eclipse具有自动编译Java源文件的功能,这在编写代码阶段对于编译错误的发现是很有用的。为了利用Eclipse的这项功能,需要“设置对类库的引用”。

导入完成之后,在下图中选择项目名称“userapp”,点击鼠标右键,在弹出菜单中选择“属性”,将弹出项目属性框:

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 16 页 共 43 页

为了利用Eclipse的自动编译功能,需要设置对类库的引用,如上图中“Java Build Path”的

“Libraries”中就定义了对项目外部类库的引用,图标上有感叹号“!”意思是路径配置有误;选择有误的类包,通过“Edit”修正类包路径,如下图所示,直至所有类包图标正常显示;在后续的开发中,如果用到类库中的其它类包,为使用Eclipse的自动编译,仍需要通过这个界面中的“Add External JARs”进行外部类包的引入。

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 17 页 共 43 页

3.4

配置文件的分类、目的与作用

PAFA3本身是一种各层松散耦合的框架结构,这种形式大大提高了应用的灵活性和适应性。各层次和功能的联系通过配置文件联系在一起,下表列出了项目模板提供的示例配置文件及其功用,这些配置文件的路径起点均为“config”:

文件名 作用 app/application.xml J2EE应用配置文件,定义EJB和WAR模块等 biz/appnameBizContext.xml Pafa3应用Biz层配置,定义Biz层、集成层等的组件 biz/bizMessages.properties Biz层Message Resource Bundle,定义在Biz层使用的Message biz/sqlmap-config.xml Ibatis Sqlmap配置文件,定义Ibatis的基础属性以及Mapping文件 biz/sqlmap-mapping.xml Ibatis Sqlmap Mapping文件,定义具体的SQL语句 core/appCommonContext.xml Pafa3应用公共配置,定义JNDI模板等 core/coreContext.xml Pafa3应用核心配置,定义Log等基础组件 core/devLog.properties 开发调试工具的配置文件,由DevLog使用 core/log4j.properties Pafa3本身的Log配置 ejb/ejb-jar.xml 标准EJB部署描述符 ejb/weblogic-ejb-jar.xml Weblogic EJB部署描述符 web/appnameWebContext.xml Pafa3应用Web层配置,定义Web层的组件 web/tiles-defs.xml 页面布局定义 web/web.xml 标准Web应用部署描述符 web/weblogic.xml Weblogic Web部署描述符 web/webMessages.properties Web层Message Resource Bundle,供fmt标签等使用 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。

?中国平安保险(集团)股份有限公司,版权所有,不得侵犯

第 18 页 共 43 页

4.

4.1

页面布局设计与实现

.do和.screen

在用户没有执行任何功能之前,访问我们的应用就应该有一个起始页面,如下图所示:

.do和.screen是PAFA3应用规范中的定义的两种请求类型,.screen请求意味着纯粹的页面显示请求,不包含后台Biz层的业务处理;而.do则意味着需要后台的Biz层进行业务处理,数据将会在不同逻辑层中传递。 4.2

布局分析与设计

如前所示,为简单起见,页面布局设定为左右结构,左边显示功能链接,右边为功能页面。为构建这个布局,需要编写下列文件:

文件名 位置 作用 mainLayout.jsp include.jsp menu.jsp welcome.jsp error.jsp src/webroot src/webroot src/webroot src/webroot src/webroot 定义页面的布局结构 导入标签库,用于其它页面的导入 显示功能菜单,位于布局左侧 欢迎页面,位于布局右侧 错误页面,用于显示错误信息

以下给出各文件的具体内容,其中代码的含义请参考相应的注释。

【mainLayout.jsp】 <%@ page contentType=\ <%@ taglib prefix=\ PAFA3 User App - <tiles:getAsString name=\<meta http-equiv=\</head> <body> 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 19 页 共 43 页 </p><p> </body> </html> 【include.jsp】:供其它页面包含,以减少代码量并有利于统一管理 <%@ page contentType=\ <%@ taglib prefix=\ <%@ taglib prefix=\ <p> </p> <p> </p> 【welcome.jsp】:欢迎信息 <%@ include file=\ <p>欢迎!</p> 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 20 页 共 43 页 </p><p></p><p> 【error.jsp】:用于显示错误信息 <%@ page isErrorPage=\<%@ include file=\错误信息 <textarea style=\<c:out value=\</textarea> 4.3 </p><p>布局的配置 </p><p> PAFA3项目模板本身已经定义好了和页面布局相关的基本配置,到目前为止,还不需要增加或修改布局方面的配置。以下几个配置取自相关的配置文件。 </p><p> </p><p> 【appnameWebContext.xml】(注意:这个文件在beta4中对应XX-servlet.xml文件) 定义了视图的解析类以及布局的配置文件“tiles-defs.xml”,如下所示: <bean id=\ class=\ <property name=\ <value>com.paic.pafa.app.web.servlet.view.tiles.TilesJstlView</value> </property> </bean> <bean id=\ class=\ <property name=\ <list> <value>/WEB-INF/tiles-defs.xml</value> </list> </property> </bean> 【tiles-defs.xml】定义与页面布局相关的属性,如title信息等;最主要的部分是定义视图名称和JSP页面之间的映射关系,如下所示,其中“welcomeView”对应的“welcome.jsp”即为欢迎页面: <definition name=\ <put name=\ <put name=\用户管理应用\ </definition> <definition name=\<put name=\</definition> <definition name=\ <put name=\ </definition> 【web.xml】定义Web应用的缺省页面,相关内容如下: <welcome-file-list> <welcome-file>index.screen</welcome-file> 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 21 页 共 43 页 </p><p> </welcome-file-list> 由以上定义可以知道“index.screen”设为缺省页面,而缺省页面与“welcomeView”的映射关系需要在“appnameWebContext.xml”中定义,并且所有.screen定义所对应class都是相同的,即“com.paic.pafa.app.web.servlet.mvc.ParameterizableViewController”: <bean name=\index.screen\ class=\ <property name=\ <value>welcomeView</value> </property> </bean> 4.4 </p><p>利用Ant构建部署目录 </p><p>在完成了欢迎页面的开发和配置之后,应该可以实际看到运行效果了,在部署之前,修改</p><p>“src/config/app/application.xml”,和部署目录的内容相比较,确认WAR模块和EJB模块的名称是否正确,如果按照之前所说的修改了模板的项目名称,则修改后的内容应该如下所示: </p><p> <?xml version=\<!DOCTYPE application PUBLIC \1.3//EN\ <display-name>Pafa3 Application</display-name> <module> <ejb>userapp-ejb.jar</ejb> </module> <module> <web> <web-uri>userapp.war</web-uri> <context-root>/userapp</context-root> </web> </module> </application> 在Eclipse的Ant视图中的“exploded-ear”节点上双击执行Ant任务,就可以生成部署目录,如下图所示: </p><p> </p><p>本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 22 页 共 43 页 </p><p> </p><p> 4.5 </p><p>Weblogic部署测试 </p><p> 启动Weblogic并进入应用部署页面,选择Ant生成的部署目录,如下图所示,点击“Target Application”,然后按照Weblogic的提示和自己的部署目标进行部署: </p><p> </p><p> </p><p>本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 23 页 共 43 页 </p><p> </p><p> 部署完成之后,打开IE浏览器按照设定的URL访问,如果出现下图中的页面,则证明之前的工作没有错误,否则请重新检查之前的每一步骤直到完成下图目标。 </p><p> </p><p>本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 24 页 共 43 页 </p><p> </p><p> 5. </p><p>5.1 </p><p>“增加用户”功能的设计与实现 </p><p>功能分析 </p><p>根据之前“增加用户”功能的流程设计和通过预览看到的样子,细化的内部流程如下图中所示: </p><p>点击“增加用户”链接[addUser.do]按颜色区分流程先后次序 分别为 黑?蓝?红数据库com.paic.userapp.management.web.controller.AddUserControllerIbatis sqlmap-config.xmlsqlmap-mapping.xml提取绑定对象;构建ServiceRequest;调用UserDAO UserIbatisDAO 显示Form View tiles-defs.xml :addUser.jsp显示Success View tiles-defs.xml :success.jsp发送ServiceResponse给“PAFA-AC” 以获取包含执行结果的ServiceRequest调用UserService UserPojoService 编辑信息 点击提交按钮 addUser.Do 结束PAFA-AC 根据请求查找动作对象? ??com.paic.userapp.management.biz.action.AddUserAction 5.2 </p><p>公用层设计与实现 </p><p> </p><p>公共层的含义是指Web层和Biz层共用的部分,包括在两层之间用于数据传递的DTO和用于定义ServiceRequestID名称的共用Util等,在部署时这些内容将被放置到EAR的“APP-INF”之中,而不是EJB或者WAR; </p><p> </p><p>除此之外,在Web层和Biz层都还有用于定义名称常量的Util类,这些名称源于配置文件,以避免在业务代码中“Hard Code”字符常量。以下将会给出在这个用例中所涉及到的公用层组件及其代码。 </p><p> </p><p>【com.paic.userapp.management.util.ServiceRequestID】 package com.paic.userapp.management.util; public class ServiceRequestID { public static final String ADD_USER=\} 【com.paic.userapp.management.web.util.ModelNames】 package com.paic.userapp.management.web.util; public class ModelNames { public static final String MODEL_ERROR_MSG = \} 【com.paic.userapp.management.web.util.ViewNames】 </p><p>本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 25 页 共 43 页 </p><p></p><p> package com.paic.userapp.management.web.util; public class ViewNames { public static final String ERROR_VIEW = \public static final String SUCCESS_VIEW = \} 【com.paic.userapp.management.web.util.WebContextNames】 package com.paic.userapp.management.web.util; public class WebContextNames { public static final String PAFA_AC = \} 【com.paic.userapp.management.biz.util.BizContextNames】 package com.paic.userapp.management.biz.util; public class BizContextNames { public static final String USER_SERVICE=\public static final String USER_DAO=\} 除了以上给出的名称常量定义,在应用开发中比较重要的一项内容就是定义在Web层和Biz层之间传递的DTO,在本例中用于传递用户的信息,定义如下: 【com.paic.userapp.management.dto.UserDTO】 package com.paic.userapp.management.dto; import com.paic.pafa.app.dto.PafaDTO; public class UserDTO extends PafaDTO{ private String id; private String name; private String description; public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 26 页 共 43 页 </p><p> return name; } public void setName(String name) { this.name = name; } } 5.3 </p><p>Web层开发与实现 </p><p> 通过之前的功能分析,我们知道在Web层需要开发的内容包括:“addUser.jsp”,用于显示输入用户信息的窗体;“success.jsp”,显示操作成功信息;</p><p>“com.paic.userapp.management.web.controller.AddUserController”,Web层的功能控制器。相关代码如下,注意其中的注释信息: </p><p>【webroot\\management\\addUser.jsp】 <%@ include file=\ </p><p> 【webroot\\management\\success.jsp】 <%@ include file=\ 操作成功! 【com.paic.userapp.management.web.controller.AddUserController】 package com.paic.userapp.management.web.controller; import com.paic.pafa.app.dto.ServiceRequest; import com.paic.pafa.app.dto.ServiceResponse; import com.paic.pafa.app.lwc.core.util.DevLog; import com.paic.pafa.app.lwc.service.databinding.BindException; import com.paic.pafa.app.web.exception.PafaWebException; import com.paic.pafa.app.web.servlet.ModelAndView; import com.paic.pafa.app.web.servlet.mvc.SimpleFormController; import com.paic.userapp.management.dto.UserDTO; import com.paic.userapp.management.util.ServiceRequestID; import com.paic.userapp.management.web.util.WebContextNames; public class AddUserController extends SimpleFormController{ protected ModelAndView onSubmit(Object cmd, BindException ex)throws Exception { UserDTO user=(UserDTO)cmd; //用于开发阶段的调试 DevLog.debug(\ //准备ServiceRequest ServiceRequest serviceRequest = new ServiceRequest(); serviceRequest.setRequestedServiceID(ServiceRequestID.ADD_USER); serviceRequest.setCurrentRequestObject(user); //发送ServiceRequest以获得ServiceResponse ServiceResponse serviceResponse = dispatchService(serviceRequest,WebContextNames.PAFA_AC); //准备Web视图 return new ModelAndView(this.getSuccessView()); } } 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 28 页 共 43 页 </p><p> 5.4 </p><p>配置Ibatis SqlMapping </p><p> 通过之前的功能分析可以发现,最终的数据库操作是由Ibatis完成的,在本例中有两个相关的、位于“src\\config\\biz”的配置文件“sqlmap-config.xml”和“sqlmap-mapping.xml”;在这个例子中我们只需要在“sql-mapping.xml”中增加SQL语句,如下所示: </p><p> </p><p>【src\\config\\biz\\sql-mapping.xml】:在INSERT语句中定义了参数对象为UserDTO <?xml version=\<!DOCTYPE sqlMap PUBLIC \\ <sqlMap namespace=\<insert id=\com.paic.userapp.management.dto.UserDTO\<![CDATA[ INSERT INTO USERS (ID,NAME,DESCRIPTION) VALUES ( #id#, #name#, #description#) ]]></insert> </sqlMap> 5.5 </p><p>Biz层开发与实现 </p><p>实际上这里包括Biz层和集成层,通过之前的分析,我们需要在Biz层编写的Java类包括“AddUserAction”、“UserService”接口、接口的实现类“UserPojoService”以及集成层的“UserDAO”接口和接口的实现类“UserIbatisDAO”,代码则如下所示: </p><p> </p><p>【com.paic.userapp.management.integration.UserDAO】 package com.paic.userapp.management.integration; import java.util.List; import com.paic.pafa.app.integration.dao.PafaDAOException; import com.paic.pafa.app.integration.dao.PafaDAO; import com.paic.userapp.management.dto.UserDTO; public interface UserDAO extends PafaDAO{ public void createUser(UserDTO user) throws PafaDAOException; } 【com.paic.userapp.management.integration.impl.UserIbatisDAO】 package com.paic.userapp.management.integration.impl; import java.util.List; import com.paic.pafa.app.integration.dao.PafaDAOException; import com.paic.pafa.app.lwc.service.persistence.dao.ibatis.support.SqlMapClientDaoSupport; import com.paic.userapp.management.dto.UserDTO; import com.paic.userapp.management.integration.UserDAO; import com.paic.pafa.app.lwc.core.context.support.PafaCoreContexton; import com.paic.pafa.app.lwc.service.persistence.dao.DataAccessException; 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 29 页 共 43 页 </p><p> public class UserIbatisDAO extends SqlMapClientDaoSupport implements UserDAO{ public void createUser(UserDTO user) throws PafaDAOException{ //获得当前事务的ID String txnId = PafaCoreContexton.getInstance().getThreadContext().getTxnID(); try{ //通过Ibatis执行名称为“addUser”的SQL语句 getSqlMapClientTemplate().insert(\}catch(DataAccessException e){ //将数据库例外包装为pafa的例外类型 throw new PafaDAOException(txnId, \ \\} } public void setBeanName(String arg0) { // TODO Auto-generated method stub } } 【com.paic.userapp.management.biz.service.UserService】 package com.paic.userapp.management.biz.service; import java.util.List; import com.paic.pafa.app.biz.service.BusinessServiceException; import com.paic.userapp.management.dto.UserDTO; public interface UserService { public void addUser(UserDTO user)throws BusinessServiceException; } 【com.paic.userapp.management.biz.service.impl.UserPojoService】 package com.paic.userapp.management.biz.service.impl; import java.util.List; import com.paic.pafa.app.biz.service.BaseService; import com.paic.pafa.app.biz.service.BusinessServiceException; import com.paic.pafa.app.integration.dao.PafaDAOException; import com.paic.userapp.management.biz.service.UserService; import com.paic.userapp.management.biz.util.BizContextNames; import com.paic.userapp.management.dto.UserDTO; import com.paic.userapp.management.integration.UserDAO; import com.paic.pafa.app.lwc.core.util.DevLog; public class UserPojoService extends BaseService implements UserService{ public void addUser(UserDTO user)throws BusinessServiceException{ try { 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 30 页 共 43 页 </p><p></p><p> //通过Context获得DAO实例 UserDAO userDAO = (UserDAO) context. getBean(BizContextNames.USER_DAO); DevLog.debug(\ userDAO.createUser(user); DevLog.debug(\} catch (PafaDAOException e) { DevLog.debug(\ throw new BusinessServiceException(e); } } } 【com.paic.userapp.management.biz.action.AddUserAction】 package com.paic.userapp.management.biz.action; import com.paic.pafa.app.biz.action.AbstractAction; import com.paic.pafa.app.biz.service.BusinessServiceException; import com.paic.pafa.app.dto.ServiceRequest; import com.paic.pafa.app.dto.ServiceResponse; import com.paic.userapp.management.biz.service.UserService; import com.paic.userapp.management.biz.util.BizContextNames; import com.paic.userapp.management.dto.UserDTO; import com.paic.pafa.app.lwc.core.context.support.PafaCoreContexton; import com.paic.pafa.core.exceptions.PafaRuntimeException; public class AddUserAction extends AbstractAction{ public ServiceResponse perform(ServiceRequest request) throws BusinessServiceException { //获得当前事务的ID String txnId = PafaCoreContexton.getInstance().getThreadContext().getTxnID(); try{ //从请求中获取DTO参数 UserDTO user=(UserDTO)request.getCurrentRequestObject(); //调用服务以完成功能 UserService userSrv = (UserService) context. getBean(BizContextNames.USER_SERVICE); userSrv.addUser(user); //返回响应 ServiceResponse response = new ServiceResponse(); return response; }catch(BusinessServiceException be){ throw be; }catch(PafaRuntimeException pe){ throw pe; }catch(Exception e){ throw new PafaRuntimeException(txnId, \ 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 31 页 共 43 页 </p><p> } } } 5.6 </p><p>编辑配置文件 </p><p> 至此“增加用户”功能的开发就完成了,但还需要通过编辑配置文件将这些功能组件串在一起。需要修改的配置文件如下所述: </p><p>【tiles-defs.xml】:定义视图名称所对应的JSP页面,增加以下定义 <definition name=\ <put name=\ </definition> <definition name=\ <put name=\ </definition> 【appnameWebContext.xml】:定义AddUserController的配置 <bean name=\class=\ <property name=\ <property name=\<value>com.paic.userapp.management.dto.UserDTO</value></property> <property name=\ <property name=\ </bean> 到目前位置,在Biz层的配置中除了Service、DAO、Action等组件的定义外,最重要的是要为DAO配置数据源,我们在前面已经在Weblogic中配置好了数据源,并且定义了JNDI名称“jdbc/pafademoDS”;项目模板已经提供了数据源配置的模板,唯一需要确认的就是这个数据源的名称必须与服务器中的名称定义一致。 </p><p>【appnameBizContext.xml】:修改并确认包含下列定义 <!--================================================================--> <!--=================================================================--> <bean id=\class=\yBean\ <property name=\ <value>00</value> </property> <property name=\ <map> <entry key=\ <ref local=\ </entry> </map> 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 32 页 共 43 页 </p><p> </property> </bean> <bean id=\class=\ <property name=\ <value>jdbc/pafademoDS</value> </property> <property name=\ <ref local=\ </property> </bean> <!--================================================================--> <!--================================================================--> <bean id=\class=\ryBean\ <property name=\ <description>NOTE, you need modify the config file name</description> <value>sqlmap-config.xml</value> </property> </bean> <bean id=%userService\class=\UserPojoService\ <bean id=\addUser\class=\AddUserAction\ <bean id=%userDAO\class=\UserIbatisDAO\<property name=\<ref local=\</property> <property name=\<ref local=\</property> </bean> 此外,还需要确定Ibatis的映射配置文件,请参考前一小节。 5.7 </p><p>Weblogic部署测试 </p><p> 至此,“新增用户”功能的开发就完成了,在Ant视图中双击“exploded-ear”以更新部署目录(Ant使用增量构建,可以大大减少构建时间); </p><p> </p><p>启动Weblogic并进入应用部署页面就可以进行部署;如果之前部署的应用还在,也可以选择</p><p>本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 33 页 共 43 页 </p><p> </p><p>“Redeploy Application”进行更新即可。 </p><p> </p><p>点击链接进行用户增加,如果顺利出现之前的预览页面“b”则意味着成功,否则请重复之前的步骤并确保每一步的正确。 </p><p> </p><p> </p><p>本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 34 页 共 43 页 </p><p> </p><p> 6. </p><p>6.1 </p><p>“检索用户”功能的设计与实现 </p><p>功能分析 </p><p>根据之前“检索用户”功能的流程设计和通过预览看到的样子,细化的内部流程如下图中所示: </p><p>点击“检索用户”链接[searchUser.screen]?searchUser.jsp按颜色区分流程先后次序 分别为 黑?蓝?红数据库编辑检索条件 点击提交 searchUser.do Ibatis sqlmap-config.xmlsqlmap-mapping.xml提取绑定对象;构建ServiceRequest;com.paic.userapp.management.web.controller.SearchUserController调用UserDAO UserIbatisDAO 发送ServiceResponse给“PAFA-AC” 以获取包含执行结果的ServiceRequest调用UserService UserPojoService 提取检索结果 准备数据Model 显示View tiles-defs.xml :userList.jsp结束PAFA-AC 根据请求查找动作对象? ??com.paic.userapp.management.biz.action.SearchUserAction 6.2 </p><p>公用层设计与实现 </p><p>通过“新增用户”功能的开发,我们已经搭建好了公用层的基本组件结构,现在只需要在原有的基础上添加一些内容即可,注意以下代码中突出的部分: </p><p> </p><p>【com.paic.userapp.management.util.ServiceRequestID】 package com.paic.userapp.management.util; public class ServiceRequestID { public static final String ADD_USER=\public static final String SEARCH_USER=\} 【com.paic.userapp.management.web.util.ModelNames】 package com.paic.userapp.management.web.util; public class ModelNames { public static final String MODEL_ERROR_MSG = \ //检索结果列表的名称 public static final String MODEL_USER_LIST = \} 【com.paic.userapp.management.web.util.ViewNames】 package com.paic.userapp.management.web.util; public class ViewNames { 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 35 页 共 43 页 </p><p></p><p> public static final String ERROR_VIEW = \public static final String SUCCESS_VIEW = \//显示检索结果的视图的名称 public static final String USER_LIST_VIEW = \} 【com.paic.userapp.management.web.util.WebContextNames】:没有变化 </p><p>【com.paic.userapp.management.biz.util.BizContextNames】:没有变化 </p><p>【com.paic.userapp.management.dto.UserDTO】:没有变化 </p><p> 6.3 </p><p>Web层开发与实现 </p><p> 通过之前的功能分析,在“检索用户”功能的Web层有两种动作:一是“searchUser.screen”,这个动作将输入检索条件的页面显示出来,细节参考接下来的配置部分;二是“searchUser.do”,这个动作完成实际的检索功能。 </p><p>需要开发的内容包括:“searchUser.jsp”,用于输入检索条件;“userList.jsp”,用于显示检索到的用户列表,使用JSTL的“c”标签进行显示处理;检索的Web层功能控制器为</p><p>“com.paic.userapp.management.web.controller.SearchUserController”。相关代码如下,注意其中的注释信息: </p><p>【webroot\\management\\searchUser.jsp】 <%@ include file=\ 【webroot\\management\%userList.jsp】 <%@ include file=\ ID Name Description <c:forEach var=\ <c:out value=\ <c:out value=\ <c:out value=\ </c:forEach> 【com.paic.userapp.management.web.controller.SearchUserController】 </p><p>本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 36 页 共 43 页 </p><p> package com.paic.userapp.management.web.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.paic.pafa.app.dto.ServiceRequest; import com.paic.pafa.app.dto.ServiceResponse; import com.paic.pafa.app.web.exception.PafaWebException; import com.paic.pafa.app.web.servlet.ModelAndView; import com.paic.pafa.app.web.servlet.mvc.AbstractController; import com.paic.userapp.management.util.ServiceRequestID; import com.paic.userapp.management.web.util.ModelNames; import com.paic.userapp.management.web.util.ViewNames; import com.paic.userapp.management.web.util.WebContextNames; public class SearchUserController extends AbstractController{ protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse httpResponse) throws Exception { //准备ServiceRequest String name=request.getParameter(\idPiece\ ServiceRequest serviceRequest = new ServiceRequest(); serviceRequest.setRequestedServiceID(ServiceRequestID.SEARCH_USER); serviceRequest.setParameter(\idPiece\ //发送ServiceRequest以获得ServiceResponse ServiceResponse serviceResponse = dispatchService(serviceRequest,WebContextNames.PAFA_AC); //准备Web视图 Map model = serviceResponse.getModel(); return new ModelAndView(ViewNames.USER_LIST_VIEW, ModelNames.MODEL_USER_LIST, model.get(ServiceResponse.SERVICE_RESPONSE_RESULT)); } } 6.4 </p><p>配置Ibatis SqlMapping </p><p> 为进行数据检索,还需要在“sqlmap-mapping.xml”中增加SQL查询语句,如下表中突出的部分: </p><p>【src\\config\\biz\\sql-mapping.xml】:新增Search语句 <?xml version=\<!DOCTYPE sqlMap PUBLIC \\ <sqlMap namespace=\ <select id=\ com.paic.userapp.management.dto.UserDTO \本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 37 页 共 43 页 </p><p> <![CDATA[SELECT ID,NAME,DESCRIPTION FROM USERS WHERE id like #value#]]> </select> <insert id=\com.paic.userapp.management.dto.UserDTO\<![CDATA[ INSERT INTO USERS (ID,NAME,DESCRIPTION) VALUES ( #id#, #name#, #description#) ]]></insert> </sqlMap> 6.5 </p><p>Biz层开发与实现 </p><p> Biz层的框架也通过之前“新增用户”功能建立了起来,只需在Service和DAO中增加新的检索方法即可,但是我们还需要一个独立的Action处理用于检索的ServiceRequest,如下面的代码所示,注意其中突出的部分: </p><p>【com.paic.userapp.management.integration.UserDAO】 package com.paic.userapp.management.integration; import java.util.List; import com.paic.pafa.app.integration.dao.PafaDAOException; import com.paic.pafa.app.integration.dao.PafaDAO; import com.paic.userapp.management.dto.UserDTO; public interface UserDAO extends PafaDAO{ public void createUser(UserDTO user) throws PafaDAOException; public List searchUserByIdPiece(String idPiece) throws PafaDAOException; } 【com.paic.userapp.management.integration.impl.UserIbatisDAO】 package com.paic.userapp.management.integration.impl; import java.util.List; import com.paic.pafa.app.integration.dao.PafaDAOException; import com.paic.pafa.app.lwc.service.persistence.dao.ibatis.support.SqlMapClientDaoSupport; import com.paic.userapp.management.dto.UserDTO; import com.paic.userapp.management.integration.UserDAO; import com.paic.pafa.app.lwc.core.context.support.PafaCoreContexton; import com.paic.pafa.app.lwc.service.persistence.dao.DataAccessException; public class UserIbatisDAO extends SqlMapClientDaoSupport implements UserDAO{ public void createUser(UserDTO user) throws PafaDAOException{ //获得当前事务的ID String txnId = PafaCoreContexton.getInstance().getThreadContext().getTxnID(); try{ //通过Ibatis执行名称为“addUser”的SQL语句 getSqlMapClientTemplate().insert(\}catch(DataAccessException e){ 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 38 页 共 43 页 </p><p> //将数据库例外包装为pafa的例外类型 throw new PafaDAOException(txnId, \ \} } public List searchUserByIdPiece(String idPiece)throws PafaDAOException{ //获得当前事务的ID String txnId = PafaCoreContexton.getInstance().getThreadContext().getTxnID(); try{ //通过Ibatis执行名称为“searchUserByIdPiece”的SQL语句 return getSqlMapClientTemplate(). queryForList(\}catch(DataAccessException e){ //将数据库例外包装为pafa的例外类型 throw new PafaDAOException(txnId, \ \e);} } public void setBeanName(String arg0) { // TODO Auto-generated method stub } } </p><p>【com.paic.userapp.management.biz.service.UserService】:定义新的search方法 package com.paic.userapp.management.biz.service; import java.util.List; import com.paic.pafa.app.biz.service.BusinessServiceException; import com.paic.userapp.management.dto.UserDTO; public interface UserService { public void addUser(UserDTO user)throws BusinessServiceException; public List searchUser(String idPiece) throws BusinessServiceException; } 【com.paic.userapp.management.biz.service.impl.UserPojoService】:实现search方法 package com.paic.userapp.management.biz.service.impl; import java.util.List; import com.paic.pafa.app.biz.service.BaseService; import com.paic.pafa.app.biz.service.BusinessServiceException; import com.paic.pafa.app.integration.dao.PafaDAOException; import com.paic.userapp.management.biz.service.UserService; import com.paic.userapp.management.biz.util.BizContextNames; import com.paic.userapp.management.dto.UserDTO; import com.paic.userapp.management.integration.UserDAO; 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 39 页 共 43 页 </p><p> public class UserPojoService extends BaseService implements UserService{ public void addUser(UserDTO user)throws BusinessServiceException{ try { //通过Context获得DAO实例 UserDAO userDAO = (UserDAO) context. getBean(BizContextNames.USER_DAO); userDAO.createUser(user); } catch (PafaDAOException e) { throw new BusinessServiceException(e); } } public List searchUser(String idPiece) throws BusinessServiceException{ try { UserDAO userDAO = (UserDAO) context. getBean(BizContextNames.USER_DAO); return userDAO.searchUserByIdPiece(idPiece); } catch (PafaDAOException e) { throw new BusinessServiceException(e); } } } 【com.paic.userapp.management.biz.action.SearchUserAction】 package com.paic.userapp.management.biz.action; import java.util.HashMap; import java.util.List; import java.util.Map; import com.paic.pafa.app.biz.action.AbstractAction; import com.paic.pafa.app.biz.service.BusinessServiceException; import com.paic.pafa.app.dto.ServiceRequest; import com.paic.pafa.app.dto.ServiceResponse; import com.paic.userapp.management.biz.service.UserService; import com.paic.userapp.management.biz.util.BizContextNames; import com.paic.pafa.app.lwc.core.context.support.PafaCoreContexton; import com.paic.pafa.core.exceptions.PafaRuntimeException; public class SearchUserAction extends AbstractAction{ public ServiceResponse perform(ServiceRequest request) throws BusinessServiceException { //获得当前事务的ID String txnId = PafaCoreContexton.getInstance().getThreadContext().getTxnID(); try{ //获取检索条件 String idPiece=(String)request.getParameter(\ 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 40 页 共 43 页 </p><p></p><p> //通过Service执行检索 UserService userSrv = (UserService) context. getBean(BizContextNames.USER_SERVICE); List list=userSrv.searchUser(idPiece); //将检索结果放入ServiceResponse Map model = new HashMap(); model.put(ServiceResponse.SERVICE_RESPONSE_RESULT,list); ServiceResponse response = new ServiceResponse(); response.setModel(model); return response; }catch(BusinessServiceException be){ throw be; }catch(PafaRuntimeException pe){ throw pe; }catch(Exception e){ throw new PafaRuntimeException(txnId, \} } } 6.6 </p><p>编辑配置文件 </p><p> 编辑配置文件以组织“检索用户”功能,过程与之前实现“增加用户”功能时的配置过程类似,需要修改的配置文件如下所述: </p><p>【tiles-defs.xml】:定义视图名称所对应的JSP页面,增加以下定义 <definition name=\ <put name=\ </definition> <definition name=\ <put name=\ </definition> 【appnameWebContext.xml】:定义SearchUserController以及.screen的配置 <bean name=\class=\ <property name=\ <value>searchUser</value> </property> </bean> <bean name=\class=\ 数据源、Service和DAO等的配置在之前的步骤中已经完成,现在只需将新的Action映射加入</p><p>本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 41 页 共 43 页 </p><p> “appnameBizContext.xml”即可,如下所示: </p><p>【appnameBizContext.xml】:新增的Action定义 <bean id=\class=\SearchUserAction\ 6.7 </p><p>Weblogic部署测试 </p><p> 至此,“检索用户”功能的开发也完成了,在Ant视图中双击“exploded-ear”以更新部署目录;启动Weblogic并进入应用部署页面进行部署;如果之前部署的应用还在,也可以选择“Redeploy </p><p>Application”进行更新即可。点击链接进行用户增加,如果顺利出现之前预览页面“d”则意味着成功,否则请重复之前的步骤并确保每一步的正确。 </p><p> </p><p> </p><p>本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 42 页 共 43 页 </p><p> </p><p> </p><p> </p><p>7. 生产环境下的部署 </p><p>在实际的生产环境下,需要以EAR包的形式发布,并且需要禁止开发时调试信息的输出,按照以下步骤执行: 7.1 </p><p>禁止DevLog输出 </p><p>“com.paic.pafa.app.lwc.core.util.DevLog”是PAFA3提供的一个工具类,用于开发阶段输出调试信息,以避免使用“System.out.println()”语句。 </p><p> </p><p>其配置文件为“src\\config\\core\\devLog.properties”,在生产环境下,应该将LOG_LEVEL设置为7以禁止调试信息的输出,如下图所示: </p><p> </p><p>7.2 </p><p>构建EAR发布包 </p><p> </p><p>在Eclipse的Ant视图中双击“ear”以生成单一的EAR包,用于应用发布,如下图所示: </p><p> </p><p>Ant构建任务“ear”将部分可能需要更改的配置文件提取到“config”目录中,如上图所示;因此用户在部署ear包应用时,需要在weblogicServer的classpath上指定好配置文件所在目录,以便pafa3应用可以找到相应的配置文件。将“config”目录设置到classpath变量中即可。 本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。 </p><p>?中国平安保险(集团)股份有限公司,版权所有,不得侵犯 </p><p> 第 43 页 共 43 页 </p><p></p> <p>本文来源:<a href="https://www.bwwdw.com/article/wtfr.html">https://www.bwwdw.com/article/wtfr.html</a></p><span class="doc-download-e"></span> </div> <script type="text/javascript">s("download_bottom");</script> <div class="related_article"> <div class="related_top"><code>相关文章:</code></div> <ul><li><a href="https://www.bwwdw.com/article/wtfr.html" target="_blank" title="pafa3应用开发入门教程">pafa3应用开发入门教程</a></li><li><a href="https://www.bwwdw.com/article/psvo.html" target="_blank" title="pafa3应用开发入门教程">pafa3应用开发入门教程</a></li><li><a href="https://www.bwwdw.com/article/2kuo.html" target="_blank" title="K3BOS插件开发入门教程">K3BOS插件开发入门教程</a></li><li><a href="https://www.bwwdw.com/article/t1aa.html" target="_blank" title="K3BOS插件开发入门教程">K3BOS插件开发入门教程</a></li><li><a href="https://www.bwwdw.com/article/6685.html" target="_blank" title="K3BOS插件开发入门教程">K3BOS插件开发入门教程</a></li><li><a href="https://www.bwwdw.com/article/sn7g.html" target="_blank" title="STM32 开发入门教程 - 图文">STM32 开发入门教程 - 图文</a></li><li><a href="https://www.bwwdw.com/article/dmf5.html" target="_blank" title="Visual Basic 6.0开发(入门教程分享)">Visual Basic 6.0开发(入门教程分享)</a></li><li><a href="https://www.bwwdw.com/article/k03g.html" target="_blank" title="STM32 开发入门教程 - 图文">STM32 开发入门教程 - 图文</a></li><li><a href="https://www.bwwdw.com/article/s097.html" target="_blank" title="STM32 开发入门教程 - 图文">STM32 开发入门教程 - 图文</a></li><li><a href="https://www.bwwdw.com/article/0qha.html" target="_blank" title="Visual Basic 6.0开发(入门教程分享)">Visual Basic 6.0开发(入门教程分享)</a></li></ul> </div> <div class="in_reading"><p class="rel_art_line">正在阅读:</p><p><a target="_blank" href="https://www.bwwdw.com/article/wtfr.html" title="pafa3应用开发入门教程">pafa3应用开发入门教程</a><span>04-03</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/sbb2.html" title="燃气集团2011年工作报告(12.28)">燃气集团2011年工作报告(12.28)</a><span>11-04</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/fj5g.html" title="物理学(师范类)专业本科教学计划 - 图文">物理学(师范类)专业本科教学计划 - 图文</a><span>05-07</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/od7q.html" title="110kV变电站毕业设计论文">110kV变电站毕业设计论文</a><span>04-28</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/fdpa.html" title="完整空白版个人简历表格 - 图文">完整空白版个人简历表格 - 图文</a><span>03-07</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/bl1x.html" title="测试用例实例++非常详细">测试用例实例++非常详细</a><span>12-30</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/yelr.html" title="xxxxxxxxxx锰铁矿开采施工合同">xxxxxxxxxx锰铁矿开采施工合同</a><span>03-29</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/472o.html" title="隧洞方案">隧洞方案</a><span>01-17</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/6dyh.html" title="2020年X集团应对市场变化工作计划">2020年X集团应对市场变化工作计划</a><span>09-06</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/ksxk.html" title="带着泪,飞翔作文500字">带着泪,飞翔作文500字</a><span>07-02</span></p></div> <div class="previous"> <span class="pre">上一篇:<a title="经典java面试题集" href="https://www.bwwdw.com/article/btfr.html">经典java面试题集</a></span> <span class="next">下一篇:<a title="公厕日常保洁流程" href="https://www.bwwdw.com/article/otfr.html">公厕日常保洁流程</a></span> </div> </div> </div> <div class="right-side"> <div class="right_fix"> <script type="text/javascript">s("right_top");</script> <div class="hotSearch"><div class="hotSearch_tl"><span></span>相关文章</div><ul><li><span>1</span><a href="https://www.bwwdw.com/article/kp5m.html" title="微信小程序开发入门教程" target="_blank">微信小程序开发入门教程</a></li><li><span>2</span><a href="https://www.bwwdw.com/article/jsro.html" title="MATLAB入门教程" target="_blank">MATLAB入门教程</a></li><li><span>3</span><a href="https://www.bwwdw.com/article/fbf6.html" title="JSP入门教程" target="_blank">JSP入门教程</a></li><li><span>4</span><a href="https://www.bwwdw.com/article/a2ar.html" title="MATLAB入门教程" target="_blank">MATLAB入门教程</a></li><li><span>5</span><a href="https://www.bwwdw.com/article/olja.html" title="AngularJS入门教程" target="_blank">AngularJS入门教程</a></li><li><span>6</span><a href="https://www.bwwdw.com/article/5f4i.html" title="口琴入门教程" target="_blank">口琴入门教程</a></li><li><span>7</span><a href="https://www.bwwdw.com/article/j681.html" title="Windows_Mobile开发新手入门教程" target="_blank">Windows_Mobile开发新手入门教程</a></li><li><span>8</span><a href="https://www.bwwdw.com/article/jlnm.html" title="Silverlight入门教程" target="_blank">Silverlight入门教程</a></li><li><span>9</span><a href="https://www.bwwdw.com/article/irw3.html" title="stata入门教程" target="_blank">stata入门教程</a></li><li><span>10</span><a href="https://www.bwwdw.com/article/anf7.html" title="MCNP入门教程" target="_blank">MCNP入门教程</a></li></ul></div> <script type="text/javascript">s("right_mid");</script> <div class="right_list"><div class="right_list_t"><i></i><span>最新文章</span></div><ul><li><a href="https://www.bwwdw.com/article/dvd.html" target="_blank" title="人教新课标必修4 Unit2 Working the land名师导航">人教新课标必修4 Unit2 Working the land名师导航</a></li><li><a href="https://www.bwwdw.com/article/fvd.html" target="_blank" title="毕业生“校漂族”大行其道 - 0">毕业生“校漂族”大行其道 - 0</a></li><li><a href="https://www.bwwdw.com/article/ivd.html" target="_blank" title="江苏各市中考作文题出炉 - 0">江苏各市中考作文题出炉 - 0</a></li><li><a href="https://www.bwwdw.com/article/hvd.html" target="_blank" title="暑期精品班 - 三角形 - 图文">暑期精品班 - 三角形 - 图文</a></li><li><a href="https://www.bwwdw.com/article/mvd.html" target="_blank" title="情人节送什么礼物好??超强礼物已抵达">情人节送什么礼物好??超强礼物已抵达</a></li><li><a href="https://www.bwwdw.com/article/jvd.html" target="_blank" title="工程项目管理制度1">工程项目管理制度1</a></li><li><a href="https://www.bwwdw.com/article/4vd.html" target="_blank" title="第四次业务学习 2016">第四次业务学习 2016</a></li><li><a href="https://www.bwwdw.com/article/1vd.html" target="_blank" title="会计要素与会计科目">会计要素与会计科目</a></li><li><a href="https://www.bwwdw.com/article/qvd.html" target="_blank" title="欠发达地区小企业会计准则运用问题研究">欠发达地区小企业会计准则运用问题研究</a></li><li><a href="https://www.bwwdw.com/article/evd.html" target="_blank" title="一级锅炉水G4题库">一级锅炉水G4题库</a></li><li><a href="https://www.bwwdw.com/article/nvd.html" target="_blank" title="BBD双进双出筒式磨煤机安装使用说明书 SM-1">BBD双进双出筒式磨煤机安装使用说明书 SM-1</a></li><li><a href="https://www.bwwdw.com/article/lvd.html" target="_blank" title="初一数学有理数教案">初一数学有理数教案</a></li><li><a href="https://www.bwwdw.com/article/svd.html" target="_blank" title="渝北区房地产评估市场调研报告">渝北区房地产评估市场调研报告</a></li><li><a href="https://www.bwwdw.com/article/kvd.html" target="_blank" title="iWebMall 数据字典">iWebMall 数据字典</a></li><li><a href="https://www.bwwdw.com/article/zvd.html" target="_blank" title="2018年小学入学教育工作计划">2018年小学入学教育工作计划</a></li><li><a href="https://www.bwwdw.com/article/0vd.html" target="_blank" title="计量专业实务与案例分析 - 模拟题三 - 2013年版">计量专业实务与案例分析 - 模拟题三 - 2013年版</a></li><li><a href="https://www.bwwdw.com/article/cvd.html" target="_blank" title="启示录讲义">启示录讲义</a></li><li><a href="https://www.bwwdw.com/article/9vd.html" target="_blank" title="路基灰土改良(方案)">路基灰土改良(方案)</a></li><li><a href="https://www.bwwdw.com/article/u2d.html" target="_blank" title="人行反洗钱岗位准入培训测试题集">人行反洗钱岗位准入培训测试题集</a></li><li><a href="https://www.bwwdw.com/article/yvd.html" target="_blank" title="2015电大《学前儿童发展心理学》期末试题及答案">2015电大《学前儿童发展心理学》期末试题及答案</a></li><li><a href="https://www.bwwdw.com/%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/" target="_blank" title="入门教程">入门教程</a></li><li><a href="https://www.bwwdw.com/%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/" target="_blank" title="应用开发">应用开发</a></li><li><a href="https://www.bwwdw.com/pafa3/" target="_blank" title="pafa3">pafa3</a></li></ul></div> <script type="text/javascript">s("right_bottom");</script> <div class="right_list"><div class="right_list_t"><i></i><span>推荐文章</span></div><ul><li><a href="https://www.bwwdw.com/article/xtfr.html" target="_blank" title="卡特LTE后台指标分析手册">卡特LTE后台指标分析手册</a></li><li><a href="https://www.bwwdw.com/article/5tfr.html" target="_blank" title="统计学原理,苏继伟,答案">统计学原理,苏继伟,答案</a></li><li><a href="https://www.bwwdw.com/article/ttfr.html" target="_blank" title="必修三语文默写">必修三语文默写</a></li><li><a href="https://www.bwwdw.com/article/vtfr.html" target="_blank" title="汽车构造下含答案">汽车构造下含答案</a></li><li><a href="https://www.bwwdw.com/article/2tfr.html" target="_blank" title="4.0智能照明综保说明书资料 - 图文">4.0智能照明综保说明书资料 - 图文</a></li><li><a href="https://www.bwwdw.com/article/ftfr.html" target="_blank" title="司法考试冲刺需面对的重要问题每日一练(2014.12.21)">司法考试冲刺需面对的重要问题每日一练(2014.12.21)</a></li><li><a href="https://www.bwwdw.com/article/dtfr.html" target="_blank" title="RNA聚合酶是否有解旋的作用">RNA聚合酶是否有解旋的作用</a></li><li><a href="https://www.bwwdw.com/article/htfr.html" target="_blank" title="苏教版四年级课外阅读《时代广场的蟋蟀》课外阅读测试题(含答案">苏教版四年级课外阅读《时代广场的蟋蟀》课外阅读测试题(含答案</a></li><li><a href="https://www.bwwdw.com/article/itfr.html" target="_blank" title="传感器课程标准">传感器课程标准</a></li><li><a href="https://www.bwwdw.com/article/jtfr.html" target="_blank" title="气压机试车方案1">气压机试车方案1</a></li><li><a href="https://www.bwwdw.com/article/atfr.html" target="_blank" title="数列单元测试题(重点班)">数列单元测试题(重点班)</a></li><li><a href="https://www.bwwdw.com/article/8tfr.html" target="_blank" title="人教版五年级下册数学第五至八单元表格教案 - 图文">人教版五年级下册数学第五至八单元表格教案 - 图文</a></li><li><a href="https://www.bwwdw.com/article/rtfr.html" target="_blank" title="学校食堂、饮水及宿舍卫生督导报告">学校食堂、饮水及宿舍卫生督导报告</a></li><li><a href="https://www.bwwdw.com/article/ptfr.html" target="_blank" title="四年级语文下册 花之咏一课一练 北师大版">四年级语文下册 花之咏一课一练 北师大版</a></li><li><a href="https://www.bwwdw.com/article/gtfr.html" target="_blank" title="《原子的构成》教学设计 - 图文">《原子的构成》教学设计 - 图文</a></li><li><a href="https://www.bwwdw.com/article/7tfr.html" target="_blank" title="SQL - Server数据库笔试题">SQL - Server数据库笔试题</a></li><li><a href="https://www.bwwdw.com/article/6tfr.html" target="_blank" title="在安全生产大检查工作督导会上的汇报">在安全生产大检查工作督导会上的汇报</a></li><li><a href="https://www.bwwdw.com/article/3tfr.html" target="_blank" title="分析化学复习资料">分析化学复习资料</a></li><li><a href="https://www.bwwdw.com/article/utfr.html" target="_blank" title="安徽省池州市2018届高三上学期期末考试理综物理试题Word版含答案">安徽省池州市2018届高三上学期期末考试理综物理试题Word版含答案</a></li><li><a href="https://www.bwwdw.com/article/y5fr.html" target="_blank" title="《学前儿童社会教育》模拟试题">《学前儿童社会教育》模拟试题</a></li></ul></div> </div> </div> </div> <div class="footer"> <p>Copyright©<script>timestamp2date(1);</script><a href="https://www.bwwdw.com/" target="_blank" title="博文网">博文网</a>bwwdw.com 版权所有</p> <p class="gray"><a href="https://www.bwwdw.com/article/" target="_blank">最新更新</a> | <a href="https://www.bwwdw.com/hot/" target="_blank">热点专题</a> | <a href="https://www.bwwdw.com/sitemap.html" target="_blank">网站地图</a> | <a href="https://www.bwwdw.com/tag/" target="_blank">TAG专题</a> | <a href="https://www.bwwdw.com/sitemap.xml" target="_blank">XML地图</a> | <a href="https://so.bwwdw.com" target="_blank">范文搜索</a><script type="text/javascript">tj();</script></p> </div> <a href="#0" class="cd-top">Top</a> <script src="/static/fanwen/js/jquery-1.9.1.min.js"></script> <script type="text/javascript"> document.write('<script type="text/javascript" src="/static/fanwen/js/pubuliu.js?'+RAND_STR+'"><\/script>'); document.write('<script type="text/javascript" src="/static/fanwen/js/lazyimg.js?'+RAND_STR+'"><\/script>'); document.write('<script type="text/javascript" src="/static/fanwen/js/gotop.js?'+RAND_STR+'"><\/script>'); </script> <script type="text/javascript"> $.ajax({ "url":"https://www.bwwdw.com/open/doc/readViews.json?id=wtfr", "type":"get", "data":"", "dataType":"json", "success":function(res){ $("#read_views").html(res.data); } }); </script> <script type="text/javascript">bottomAction();</script> </body> </html>