在HP-Unix上部署J2EE应用程序的小结

最近在HP-UNIX上面部署了前一次开发的BREW CMS以及Dealing的应用程序,忙前忙后一共花了2天时间。本人是只菜鸟,大家看了不要笑话。用了2天时间也是挺吓人的。下面是部署过程中有点细节问题,帖出来和大家共享。有可能大家部署程序很顺利,从来没有出现过这样的情况。
 
操作系统就不用说了,运行环境如下:
方案一:Java1.5 + Tomcat5.0.28 + Oracle10g
方案二:Java1.5 + Resin-pro-3.0.24 +Oracle10g
 
在以上项目中主要采用了一些技术,比如:struts1.1,hibernate3.x,Spring,Xfire等等,也就是这些东西糊弄人,部署他们还真的不是太容易,其中最容易出现的问题就是Xml解析的问题。还有HP机器上会自带Jdk的安装。一般安装在/opt下面。
 
第一:所有的软件,所有的程序最好是在window 上面解压后上传去服务器上面。我是这样做,到目前没有出现任何问题。因为直接在HP-UNIX 上面解压,有些文件名会被系统截取。最有可能出现下面的情况,一头雾水,搞不清楚状况。
 
[00:00:01.462] com.caucho.config.LineConfigException: WEB-INF/web.xml:38: `com.asiainfo.aicms.web.servlet.GetCurrentFunctionPath' is not a known servlet. Servlets belong in the classpath, often in WEB-INF/classes.
[00:00:03.410] WebApp[http://localhost:8000/aiuser] stopping
[00:00:03.512] com.caucho.config.LineConfigException: WEB-INF/web.xml:41: `com.asiainfo.aiuser.web.servlet.DrawSystemResource' is not a known servlet. Servlets belong in the classpath, often in WEB-INF/classes.
 
到该目录下面一看,文件名被截取了。恶心!
 
还有一种情况,假如你直接在 HP 机上面已经安装了应用服务器,请检查一下,该服务器是否能正确启动,如果不行,如果你不是 HP-UNIX 达人,你还是慢慢上传吧。大概也得 30 分钟上传这些吧。
 
第二:必须采用Java1.5 的版本,如果不用可能会出现Java 最基本数据类型的解释出错。比如: Character.valueOf() 的解释出错。如果用Java1.4 还真的不行。
 
第三:运行服务器,没有响应,根本起不来。是不是你的环境没有设对啊。
Tomcat 的如下参考:
 
export JAVA_HOME=/opt/java1.5/
export PATH=/opt/java1.5/bin:/usr/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/home2/project/jakarta-tomcat-5.0.28/bin
export CLASSPATH=/home2/project/jakarta-tomcat-5.0.28/common/lib
 
最好把他们设置到启动项里面。
 
第四:还是Java1.5 的问题,当你部署好那些应用服务器以及你的应用程序,刚启动就会发现下面的错误:Xml 解析出错或者Struts 不能被正确加载?请看:
 
Begin event threw error
javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found
         at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)
         at org.apache.commons.modeler.util.DomUtil.readXml(DomUtil.java:284)
         at org.apache.commons.modeler.modules.MbeansDescriptorsDOMSource.execute(MbeansDescriptorsDOMSource.java:130)
         at org.apache.commons.modeler.modules.MbeansDescriptorsDOMSource.loadDescriptors(MbeansDescriptorsDOMSource.java:120)
         at org.apache.commons.modeler.Registry.load(Registry.java:819)
         at org.apache.commons.modeler.Registry.loadDescriptors(Registry.java:931)
         at org.apache.commons.modeler.Registry.loadDescriptors(Registry.java:909)
         at org.apache.catalina.mbeans.MBeanUtils.createRegistry(MBeanUtils.java:1599)
         at org.apache.catalina.mbeans.MBeanUtils.<clinit>(MBeanUtils.java:107)
         at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.<clinit>(GlobalResourcesLifecycleListener.java:65)
         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
         at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
         at java.lang.Class.newInstance0(Class.java:354)
         at java.lang.Class.newInstance(Class.java:307)
         at org.apache.commons.digester.ObjectCreateRule.begin(ObjectCreateRule.java:253)
         at org.apache.commons.digester.Rule.begin(Rule.java:200)
         at org.apache.commons.digester.Digester.startElement(Digester.java:1273)
          at org.apache.catalina.util.CatalinaDigester.startElement(CatalinaDigester.java:65)
          at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
         at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
         at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
         at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
         at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
         at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
         at org.apache.commons.digester.Digester.parse(Digester.java:1548)
         at org.apache.catalina.startup.Catalina.load(Catalina.java:489)
         at org.apache.catalina.startup.Catalina.load(Catalina.java:528)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:585)
         at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:250)
         at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:424)
java.lang.reflect.InvocationTargetException
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:585)
         at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:250)
         at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:424)
 
。。。。
那好,请按下面的方式去试试看。
 
检查一下你的 /opt/java1.5/jre/lib 下面有没有这个文件,叫 jaxp.properties 可别小看他,为什么加他,我也不是太明白。加上他了,你的 Xml 解析就不会出现问题。如果该目录下面没有这个文件就创建,内容如下:
 
javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
 
你可别小看这两句话,你颠倒一下他们的顺序,可以还会出大问题呢。假如你的程序里面使用了 Xpath 这样的东西,还真的不能颠倒上面的两句话呢,否则请看下面的错误。
 
2007-10-16 16:19:38,560 ERROR org.apache.commons.digester.Digester - Digester.getParser:
org.xml.sax.SAXNotRecognizedException: Feature: http://apache.org/xml/features/validation/dynamic
         at org.apache.crimson.parser.XMLReaderImpl.setFeature(XMLReaderImpl.java:213)
         at org.apache.crimson.jaxp.SAXParserImpl.setFeatures(SAXParserImpl.java:143)
         at org.apache.crimson.jaxp.SAXParserImpl.<init>(SAXParserImpl.java:126)
 
。。。。。。。
 
2007-10-16 16:19:38,565 ERROR org.apache.struts.action.ActionServlet - Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable. Most likely, this is due to an incorrect or missing library dependency.
java.lang.NullPointerException
         at org.apache.commons.digester.Digester.getXMLReader(Digester.java:891)
         at org.apache.commons.digester.Digester.parse(Digester.java:1572)
         at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:738)
         at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:687)
 
导致你的 struts 不能被加载。网上说了很多,没有什么解决方案,我也是碰了巧了。除非你不用 Xpath 。千万不要颠倒啊,特别是那些喜欢用 Xpath 的大虾们。
还没有说完呢!
看看 /opt/java1.5/jre/lib 下面有没有一个目录叫 endorsed 。如果没有,从你的 %tomcat_home%/common/ 下面靠过来吧。包你没错!
 
第五:假如使用resin 的服务器,需要改动一下他的配置文件%resin_home%/conf/resin.conf 。使他更好的支持Xml 的解析。
 
首先找到“ <host id="" root-directory="."> ”,在其后加上如下语句:
 
<system-property javax.xml.transform.TransformerFactory="org.apache.xalan.processor.TransformerFactoryImpl"/>
<system-property javax.xml.parsers.DocumentBuilderFactory="org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"/>
<system-property javax.xml.parsers.SAXParserFactory="org.apache.xerces.jaxp.SAXParserFactoryImpl"/>
<system-property org.xml.sax.driver="org.apache.xerces.parsers.SAXParser"/>
 
目前还是还是使用resin3.0版本没有问题。但是3.1的版本还是有问题,还真的起不来呢.!
 
第六:由于tomcat resin Spring 的加载方式还不一样。我也不知道为什么他们就不一样。也就那么点差别。这就需要修改你的项目的web.xml 。不用说在那里了吧。
 
Tomcat 的加载方式如下:
<servlet>
                   <servlet-name>context</servlet-name>
                   <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
                   <load-on-startup>1</load-on-startup>
</servlet>
 
Resin 的加载方式如下:
<listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
</listener>
 
这些好像也就是在非 window 环境需要改动, window 上面无需改动此部分。
 
第七:关于Oracle10g 的字符集的查询,以及更该。
 
首先超级管理员登录:
select name,value$ from props$ where name='NLS_CHARACTERSET';
 
看看不是下面的这个,或者类似:
NAME                      VALUE$
------------------------- -------------------------
NLS_CHARACTERSET          ZHS16GBK
 
假如不是,你要改一下。
改完了一定要重新启动。然后重新导入您的数据。
 
第八:Oracle 数据的导入导出
 
导入语句比如:
$oracle>imp aiuser/aiuser@brewcms grants=y full=y file=/home/oracle/aiuser.dmp
 
导出语句比如:
$oracle>exp aicms/aicms@orasid full=y file=/home/oracle/aicms.dmp
 
 
 
 
按照以上步骤基本上能成功部署你的项目吧。可能也适用于 linux 系统下面的应用部署。出了问题我可不负任何责任啊。希望大家多提意见。

你可能感兴趣的:(在HP-Unix上部署J2EE应用程序的小结)