2012年5月15日星期二

ADF_123:部署ADF应用到独立的WebLogic Server上

开发环境:JDeveloper 11.1.1.5 + RCU 11.1.1.5 + WebLogic 10.3.5 + Application Development Runtime 11.1.1.5。

我以《Enable Security in a Fusion Web Application》为例来说明如何把该应用发布到独立的WebLogic Server上。
首先要完成该教程,并在JDeveloper中内嵌的WLS上运行成功,开发完成后的Project可以点击这里下载:SecureApplication_11gPS4.7z

独立的WebLogic Server必须是安装了ADF Runtime Library的,安装方法请参考《图解安装 Application Development Runtime》。

重要步骤说明:

1. 在JDeveloper中创建指向独立WebLogic Server的连接





2. 修改Application Module的Connection Type为JDBC Data Source
为了简单起见,我把Application Module中LocalConfig和ShareConfig的Connection Type都改成了JDBC Data Source。



3. 在WebLogic Server Console中创建相应的JDBC Data Source

注意,Data Source的JNDI Name要和Application Module中的一致。



4. 修改ViewController Prject的Deployment Profile
说明:这一步不是必须的,只是为了让应用的访问URL开起来更好看一些。


5. 修改Application的Deployment Profile
说明:这一步不是必须的,只是为了让应用的访问URL开起来更好看一些。

这一步的四个选项的含义如下:
(1)Auto Generate and Synchronize weblogic-jdbc.xml Descriptors During Deployment:是否同步weblogic-jdbc.xml中的jdbc连接配置,因为没有使用该文件,所以一般不选中。
(2)Application Policies:一般不覆盖已有的Policy,所以一般不选中。
(3)Credentials:一般应用没有自己的密码,比如Email账号等等,即使有一般也不覆盖已有的Credentials,所以一般不选中。
(4)Users and Groups:应用中的用户和组一般不发布到生产和测试环境中,所以一般不选中。
总之,以上四个选项完全可以通过WLS/EM Console来单独配置,所以一般不需要在发布应用时覆盖已有的配置。


6. 部署 Application
目前ADF应用必须以打成ear包方式部署,不能够以war包方式部署。
直接发布war包,会报一个错误,Caused by: java.lang.ClassNotFoundException: oracle.adf.library.webapp.ResourceServlet。
Oracle JDev小组成员Shay也是这样说的,见参考文献1,看来目前就是这样设计的。
为了简单起见,我这里从JDevleoper中直接把应用发布到Admin Server上。
在生产环境中,不建议这样做,最好打成ear包,然后通过控制台发布。




在Deploy过程中,会询问你MDS Repositories的位置,关于MDS,请参考《创建基于数据库的MDS》。
如果你没有配置MDS,会显示空白,如下图:

如果你配置了MDS,JDeveloper会自动识别目前有哪些MDS,并自动创建一个MDS partition,使用.ear应用的名字作为partition的名称。
同时,它会使用刚刚创建的MDS Data Source作为MDS database。如下图:


7. 部署时遇到的异常
(1)首次部署时遇到一个异常:
Weblogic Server Exception: weblogic.management.DeploymentException:
[J2EE:160149]Error while processing library references. Unresolved application library references, defined in weblogic-application.xml: [Extension-Name: oracle.webcenter.framework, Specification-Version: 11.1.1, exact-match: false].
检查后,发现是weblogic-application.xml多了如下内容,于是去掉。
<library-ref>
<library-name>oracle.webcenter.framework</library-name>
<specification-version>11.1.1</specification-version>
</library-ref>
<library-ref>
<library-name>oracle.webcenter.skin</library-name>
<specification-version>11.1.1</specification-version>
</library-ref>
(2)再次部署,又遇到了一个新的异常:
Weblogic Server Exception: weblogic.application.ModuleException: :oracle.mds.exception.MDSExceptionList:MDS-01329: 无法加载元素 "persistence-config"
检查后,发现是adf-config.xml多了如下内容,于是去掉。
<persistence-config>
<metadata-namespaces>
<namespace path="/persdef/"
metadata-store-usage="WebCenterFileMetadataStore"/>
<namespace path="/xliffBundles/"
metadata-store-usage="WebCenterFileMetadataStore"/>
</metadata-namespaces>
<metadata-store-usages>
<metadata-store-usage id="WebCenterFileMetadataStore"
default-cust-store="true" deploy-target="true">
<metadata-store class-name="oracle.mds.dt.persistence.stores.file.SrcControlFileMetadataStore">
<property name="metadata-path" value="../../mds"/>
</metadata-store>
</metadata-store-usage>
</metadata-store-usages>
</persistence-config>
重新部署,这次终于成功了。

8. 测试
因为这个ADF应用带有安全性,为了将测试的用户部署到独立的WLS上,修改Application的Deployment属性,选中Users and Groups:

重新部署后,会在WebLogic Server Console中看到这些用户。

访问http://localhost:7001/SecureApplication/faces/welcome.jspx。
以不同的用户登录测试,运行效果和部署在JDeveloper内嵌的WebLogic Server一样。

9. 如何把ADF应用发布到Managed Server上?
(1)首先在WLS Console中增加一个Managed Server。
(2)然后扩展ADF Domain,选择EM。
(3)启动Admin Server和Managed Server,访问EM Console,点击“Apply JRF Template” ,此步很重要,一定不要忘了,否则会有些奇怪的错误。
(4)别忘了把Data Source Target到Managed Server上。
(5)通过WLS Console,发布.ear。(通过JDeveloper发布,无法成功,总是报告无法连接)

10. 其它问题
(1)如何访问http://localhost:7001/SecureApplication时自动跳转到welcome.jspx页面?
修改web.xml,增加如下内容:
<welcome-file-list>
<welcome-file>/faces/welcome.jspx</welcome-file>
</welcome-file-list>
注意,由于Context root后面有faces,所以需要加上这个路径,否则无法访问。
(2)如何访问http://localhost:7001/时自动跳转到welcome.jspx页面?
首先修改web.xml如(1),然后修改weblogic.xml如下:
<weblogic-web-app>
<context-root>/</context-root>
</weblogic-web-app>
(3)发现WEB-INF/lib下有很多Jar包,能不能所有应用共用这些包,不要每个Web应用都包含这些Jar包?

经过实验,发现可以去掉,SecureApplication应用运行正常。

Project 下载:SecureApplication_11gPS4(StandaloneWLS).7z

参考文献:
1. http://jdevshay.wordpress.com/2008/11/14/common_pitfalls_when_deploying/

1 条评论:

Li 说...

请问:将有安全性的adf应用部署到server上之后,在进入webcenter space和此应用时两次都要登陆,是不是只有使用SAML,OAM等方法才能解决,是否有简单一点的方法(因为没有安装OAM等插件)?