JDeveloper & ADF Ver. 11.1.1.2.0
DB Ver. XE
在一个典型的ADF开发中,通常开发者会依据功能开发大量taskflow,并将其部署为多个ADF Library Jar File,再在主应用中引用这些已经开发完成的ADF jar,并将主应用打包为EAR进行发布。这种开发方式有效的减低了开发人员需要进行协作的开发量,但当打包为Jar加入主应用的某功能需要更新时,必须重新发布主应用。而Weblogic提供允许将war/ear部署为Application或Shared Library,依此特性,可将开发完成的功能Jar部署为多个Shared Library,主应用引用各Shared Library。当需要进行功能的更新时,只需重新部署Shared Library即可。
本例中将开发3个Application,分别为:
- Demo_EmployeeApp -- 使用ADF开发的具体功能
- Demo_ToLib -- 打包ADF开发的功能jar包为可部署为shared library的war包
- Demo_Main -- 主应用
本例中将使用Oracle XE自带HR schema,并在Weblogic中建立jndi为jdbc/HRDS的数据源。
源代码下载
- Demo_EmployeeApp为一个简单的ADF应用,包含将HR schema中Employees表数据以树状展开的功能。应用开发不再详述,这里只介绍打包为Library Jar File的步骤。
- 双击AppModule,选择Configurations,设置Shared和Local两个连接均使用JNDI Datasource,并配置连接字符串为jdbc/HRDS或java:jdbc/HRDS,注意不能使用默认的java:comp/env/jdbc/HRDS。

- 双击ViewController项目,进入项目属性设置页面,选择Deployment,新建部署配置文件,类型为ADF Library Jar File

- 设置部署配置文件中Connections,选择Connection Name Only。

- 关闭项目属性设置窗口,右键点击ViewController项目,选择Deploy > 上一步创建的profile,则可将Demo_EmployeeApp应用部署为jar包。
- 创建Demo_ToLib应用
- 在JDeveloper中新建Generic Application,并新建Project名为ToLib
- 在文件系统中进入ToLib项目所在文件夹,分别新建文件路径public_html/WEB-INF/lib及src/META-INF

- 将第一步创建的Demo_EmployeeApp.jar复制入WEB-INF/lib目录,在META-INF目录下创建名为MANIFEST.MF的文件,内容如下
Manifest-Version: 1.0
Created-By: derek.jaa
Implementation-Title: derek.jaa
Extension-Name: dj.demo.libapp
Specification-Version: 1.0.1
Implementation-Version: 1.0.0
Implementation-Vendor: derek.jaa
注意Extension-Name字段,该字段用于指定应用以Shared Library形式部署在Weblogic上的名称。其他字段参考Jar规范。
- 双击ToLib项目,进入项目属性设置页面,选择Deployment,新建部署配置文件,类型为WAR File

- 编辑部署配置文件,首先设置General中Specify Java EE Web Context Root为空

- 设置WAR Options,勾选Include Manifest File,并添加之前创建的MANIFEST.MF至列表

- 选择 File Groups > WEB-INF/lib > Filters,勾选加入的Demo_EmployeeApp.jar

- 选择Library Dependencies,勾选加入的Demo_EmployeeApp.jar

- 选择Profile Dependencies,勾选加入的Demo_EmployeeApp.jar

- 点击OK保存退出,右键点击ToLib项目,选择Deploy > 之前创建的部署配置文件,选择Deploy to Application Server,点击Next,选择需要部署至的Weblogic Server及Deploy as a shared Library

- 点击Finish完成部署,登入Weblogic console,可查看到部署的Shared Library

- 创建Demo_Main应用,该应用为ADF应用
- 依据向导创建ADF应用,由于本次示例主应用不需要Model层,因此创建完成后删除Model项目,并双击ViewController项目,选择Dependencies,删除对Model项目的依赖

- 由于项目需要编译,因此需要将引用的Shared Library中的Jar包夹入主项目。选择Library and Classpath,以Add JAR/Directory形式加入Demo_EmployeeApp.jar

- 由于Demo_EmployeesApp.jar已存在于Shared Library中,因此部署Demo_Main时不需要部署该Jar文件。选择Deployment,编辑部署为WAR的部署配置文件,选择File Groups > WEB-INF/lib > Filters,不勾选Demo_EmployeeApp.jar。

- 在ViewController中创建页面index.jspx,在Component Palette下拉列表中选择Demo_EmployeeApp.jar,展开Regions,将需要引用的taskflow拖入页面

- 在ViewController项目WEB-INF目录中创建Weblogic Deployment Descriptor (weblogic.xml)


- 编辑weblogic.xml中的Libraries项,新增上一步创建的ToLib项目部署后在Weblogic Console中查看到的名称。这里使用dj.demo.libapp

- 展开Application面板中Application Resources,展开Descriptors > META-INF,编辑weblogic-application.xml的Libraries项,新增上一步创建的ToLib项目部署后在Weblogic Console中查看到的名称。这里使用dj.demo.libapp。
[最佳实践]当同一服务器上的多个Enterprise Application引用同一个Shared Library时,可能因为Context Root名称重复造成应用启动失败,亦可在此处声明Library Name对应的Context Root。建议在引用Shared Library时声明特别的Context Root。

- 右键点击Application面板中Demo_Main,编辑应用属性

- 选择Deployment,不勾选Auto Generate and Synchronize weblogic-jdbc.xml Descriptors During Deployment

- 右键点击Application面板中Demo_Main,选择Deploy,将应用部署至已部署Shared Library的应用服务器中。通过浏览器访问URL进行测试。