原文引用
http://flylijian.spaces.live.com/

opencms 介绍及在weblogic8下的部署

     今天周末在家无事上网闲逛时,发现很多人都在使用opencms;由于opencms缺省支持的是tomcat,对于在商业的中间件weblogic、websphere下部署却很少资料可查,所以写了这篇文章;
一。OpenCms是一个专业级别的开源网站内容管理系统,其中文网站为http://www.opencms.cn/
     目前可以使用的最新稳定版为6.2.3版。其特点如下:
    
  • 直接从WEB站点的前台编辑内容
  • 自动在线/离线工作流
  • 灵活的内容资源
  • 集成全文搜索引擎
  • 所见即所得编辑非结构化内容
  • 结构化内容采用易于定义的基于XML的内容项目
  • 在一个应用中管理多个站点
  • 全文搜索支持PDF、Word、Excel文档资源
  • 为所有的存储资源均可进行配置
  • 基于时间的自动内容发布和过期
  • 完全支持统一编码内容
  • ACL(Access Control List 访问控制表)权限控制系统
  • 可选的HTML静态导出
  • 基于JSP的模版机制
  • 模块具有版本控制

  详细请浏览其官方网址http://www.opencms.org

二。 weblogic8下的部署前的准备工作

1。目前稳定版本为6.2.3,但对应开发者和学习使用的可以下到它的最新开发版本7.0版;

2。使用eclipse自带的cvs插件下载其最新版本

     1)cvsroot为:pserver:anon@cvs.opencms.org:/usr/local/cvs

   2)密码为anon,取分支cvs checkout -r DEV_7_0 opencms可以得到最新源代码.

3. 安装weblogic8,我使用的是platform812_zh_CN_win32.exe版本。

4. 缺省安装完weblogic8后,运行它的配置向导,新建一个basic weblogic server domain,域名改名为opencms,其它全部采用默认设置完成。

5.weblogic域创建成功后,缺省在bea安装目录下会生成user_projects\domains\opencms

三。两种部署opencms方式

a)取下来的opencms源码中提供了ant方式,可以直接生成war包进行部署,即采用war方式进行部署;这是最简单和最方便的部署方式 ,但对于开发者来说这应该算是属于产品发布阶段的部署,因此调试起来会很不方便;

b)另一种方式是直接把源代码目录部署到weblogic下,这样可以很方便的进行调试;由于通过weblogic的控制台只能进行

   war和ear的部署,所以我们只能直接修改它的配置文件进行部署。

我们采用第二种方式进行部署

1。首先在eclipse编译取下来的源码,由于取下来的源码还需要第三方的jar文件,如ant.jar;找到相应的jar文件引

   入进来,另外在它的模块文件中还引用了其它的文件,如果确定用不上可以先全部删除掉以便可以正确编译成功;

2.编译时最好使用jdk1.4的版本,或直接使用bea自带的jdk进行编译,一会儿我会说明原因;

3.编辑user_projects\domains\opencms\config.xml,添加如下内容

      <Application Deployed="true" Name="opencms"
        Path="D:\eclipse3.2.1\eclipse\workspace\opencms\webapp\.\."
        StagedTargets="myserver" TwoPhase="false">
        <WebAppComponent DeploymentOrder="1001" Name="opencms"
            Targets="myserver" URI="."/>
    </Application>
    <ApplicationManager Name="opencms"/>

其中Path="xxxx"中的内容为你的opencms实际安装目录

4.修改weblogic启动文件user_projects\domains\opencms\startWebLogic.cmd

  引如如下jar文件:

echo CLASSPATH=%CLASSPATH%
set OPEN_CMS=D:\eclipse3.2.1\eclipse\workspace\opencms
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\commons-logging-1.1.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\activation.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\alkacon-diff-0.9.2.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\alkacon-simapi-0.9.4.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\ant-contrib-1.0b1.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\ant-opencms-1.1.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\commons-beanutils-1.7.0.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\commons-codec-1.3.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\commons-collections-3.1.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\commons-dbcp-1.2.1.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\commons-digester-1.7.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\commons-email-1.0-mod.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\commons-fileupload-1.0.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\commons-httpclient-3.0.1.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\commons-pool-1.2.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\dom4j-1.6.1.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\htmlparser-1.5-20050925.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\jakarta-oro-2.0.8.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\jaxen-1.1-beta-4.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\jstl-1.1.2.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\jtidy-r8-05102004.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\jug-1.1.2.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\junit-3-8-1.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\log4j-1.2.9.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\lucene-analyzers-2.0.0.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\lucene-core-2.0.0.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\lucene-highlighter-2.0.0.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\lucene-snowball-2.0.0.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\mail.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\mysql-connector-java-3.1.12-bin.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\PDFBox-0.7.2.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\pg74.216.jdbc3.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\poi-2.5.1-final-20040804.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\quartz-1.4.5.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\servlet.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\standard-1.1.2.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\atm-extractors-0.4.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\xercesImpl.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\webapp\WEB-INF\lib\xml-apis.jar

5.到目前应该可以运行了,在运行中可能会出现各种各样的问题(依据取下来的版本),按下列方法进行处理

6.点击user_projects\domains\opencms\startWebLogic.cmd启动服务;观察控制台和user_projects\domains\opencms\myserver下的日志文件,查看错误提示;

下面是我运行中碰到的错误进行的相应的调整

1)控制台报The WebLogic Server did not start up properly.
java.io.InvalidClassException: javax.management.MBeanAttributeInfo; local class incompatible: stream classdesc serialVersionUID = 7043855487133450673, local class serialVersionUID = 8644704819898565848
错误原因及解决办法:MBeanAttributeInfo的serialVersionUID的版本控制id不一样,说明是使用这个被使用的bean被修改过了,很显然是版本不对;修改startWebLogic.cmd文件,设置set JAVA_HOME=D:\bea\jdk141_05,使其指向weblogic自带的jdk;重启startWebLogic.cmd问题消失。

2)错误报Deployment descriptor "web.xml" is malform
ed. Check against the DTD: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find

错误原因及解决办法:解析web.xml出现问题,修改OPEN_CMS\webapp\WEB-INF\web.xml文件;在该文件的 最上面添加如下内容:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">

重新启动错误消失。

3)错误为Deployment descriptor "/WEB-INF/
web.xml" is malformed. Check against the DTD: The content of element type "t
ag" must match "(name,tag-class,tei-class?,body-content?,display-name?,small-ico
n?,large-icon?,description?,variable*,attribute*,example?)". (line 40, column 11
).>

错误原因及解决办法:由于weblogic8在解析xml文件时,对xml文件的内容格式要求特别严格;必须按照xml格式的要求

及排列顺序,所以必须重新组织其内容,一定严格要注意顺序,如 <servlet>就不能放在<servlet-mapping>后面。

4)错误java.lang.SecurityException: Prohibited package name: java.lang

错误原因及解决办法:访问包可视的方法或变量错误;这个错误恨少见,一直没有想明白其中缘由;后来只能采用直接引用jar文件的法子解决该问题;

i)利用opencms自带的build.xml文件,运行ant jar命令;生成opencms.jar和webdav.jar两个文件

ii)在startWebLogic.cmd添加如下内容,引进上面的2个jar文件

set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\build\opencms.jar
set CLASSPATH=%CLASSPATH%;%OPEN_CMS%\build\webdav.jar

大家有兴趣的可以参考《透视JAVA——反编译、修补和逆向工程技术》这本书的$4.2章的内容,如果找到更好的解决方法也请来信告知,谢谢~_~

5)其它注意事项,在eclipse下最好采用和运行weblogic一样的jdk版本进行编译,否则会出现文件访问版本不一致的bug

7.启动startWebLogic.cmd,在浏览器中输入http://127.0.0.1:7001/opencms/setup/

  如果在出现下面的画面,则恭喜你,成功了!