您好,欢迎访问三七文档
将应用部署到weblogic10及oraclelinux时遇到的问题公司一个项目准备在这几天上线,在用户现场搭建好服务器运行环境后,我们的主要工作就是将应用移植到新的环境中。部署环境介绍开发环境介绍操作系统OracleEnterprise-R5-U5-Server-x86_6windows7/windowsxp中间件Weblogicserver10.3tomcat6JDKjdk1.6jdk1.6J2EESDK5.05.0数据库OracleOracle在将tomcat环境下开发的应用移植到weblogic下的过程中遇到了各种问题,特在此记录。一、在一开始时准备将web应用打成war包,使用weblogic管理服务器安装,遇到了第一个问题错误一:意外的异常在处理请求时出现意外的异常情况消息:堆栈跟踪:java.lang.NullPointerExceptionatcom.bea.console.actions.app.install.Flow.uploadApp(Flow.java:256)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)省略数千字……………错误二:java.lang.OutOfMemoryError:unabletocreatenewnativethread问题分析:这些错误都是在文件上传时,因为我们的工程较大,导致虚拟交换内存不足引起的,将修改weblogic的虚拟内存调大后,解决了问题。解决办法:找到weblogic启动文件startWebLogic.sh,由于该文件实际上又调用了bin/setDomainEnv.sh文件,所以真正要改的是setDomainEnv.sh(在我这里该文件位于/Middleware/user_projects/domains/base_domains/bin)将PermSize和MaxPermSize调整到256和512(按实际需要来调)二、这时候,我们这样可以没问题了吧,谁知一部署,第二个问题来了错误:java.lang.IllegalStateException:CannotsetwebapprootsystempropertywhenWARfileisnotexpanded问题分析:出现这个原因是因为部署的时候使用的是war包,weblogic部署应用不像tomcat先将war解压在启动,而是直接使用war启动。因为我们在很多JSP和Servlet文件中使用了如:this.servletContext.getRealPath(/)等类似写法,因为在war中的文件时没有真实路径的,所以getRealPath(/)取出来的都是意向不到的值,例如null。解决办法:由于用这种写法获得web服务器路径的地方很多,一个个去换显然不是一个很好的办法,而且直接使用war部署对后续的应用更新也比较麻烦,所以准备采用另外一种部署方式,就是文件目录部署。三、文件目录部署使用文件目录部署指的是用weblogic管理服务器安装,直接指定本地的应用文件夹,只要该文件夹下面有包含WEB-INF\web.xml,就可以被选中安装。所以接下来就是建立应用程序的安装目录。在区别于weblogic域管理目录路径,我们在根路径创建了目录。/deploy/applications/app/deploy/applications/planapp:准备用来存放app应用,在文件夹建好以后,将我们的应用(如:wzfy)整个文件夹拷贝到app下面。plan:这个文件夹当weblogic管理服务器安装了app下面的应用后,会在这里自动建立app的部署计划文件。在管理服务器中,找到目录/deploy/applications/app,选中wzfy,开始安装。第三个问题出现无法访问选定应用程序。ExceptioninAppMergeflows'progressionExceptioninAppMergeflows'progression[J2EE:160111]ERROR:Appccannotwritetotheworkingdirectory,'/deploy/applications/app/wzfy'.Pleaseensurethatyouhavewritepermissionforthisdirectoryandtryagain.通过文字意思的理解,就是对于操作用户来说/deploy/applications/app/wzfy是不可写的。奇怪,我们手动建立目录都是可写的呀?怎么用webLogicServer安装就变成不可写了呢。一想,我们建立用户用的root用户,目录操作肯定没问题,而我webLogicServer登录的用户如果没有授权肯定是没有这个权限。于是给webLogicServer用户weblogic授予对目录/deploy/applications/的访问权限。授权方法如下:chown–Rfweblogic:weblogic/deploy/applications授权后,安装部署,一路走下来,非常顺利,直到启动wzfy,第四个问题出现四、创建sessionFactory失败weblogic.application.ModuleException:[HTTP:101216]Servlet:contextfailedtopreloadonstartupinWebapplication:wzfy.org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'sessionFactory'definedinServletContextresource[/WEB-INF/applicationContext.xml]:Initializationofbeanfailed;nestedexceptionisorg.hibernate.HibernateException:Errorsinnamedqueries:queryViewByModuleID,querySecParentOwnerById,中间省略数千字………………………………………………………………………atorg.hibernate.impl.SessionFactoryImpl.init(SessionFactoryImpl.java:364)问题分析:碰到这个问题后,一头雾水,这怎么解决呢,第一想法是可能因为我们在hibernate中映射文件中使用namequeries(命名查询)的方式,会不会是weblogic不认呢?通过google和baidu了很多资料,很试了很多方法,都已失败告终,最后在发现了有一个哥们在blog中总结的一段内容,问题解决。5、Hibernate3、Axis部署问题Hibernate3中hibernate.query.factory_class的默认值为org.hibernate.hql.ast.ASTQueryTranslatorFactory,在WebLogic下系统运行时会抛出org.hibernate.QueryException:ClassNotFoundException:org.hibernate.hql.ast.HqlToken异常。这个问题网上说的很多,解决方法也各式各样,其实很简单,Weblogic系统默认加载EJB-QLparser,存在重名类,所以使用时会出现ClassNotFoundException。一般网上的修改方式都是修改startWebLogic运行的脚本,将antlr-2.7.5H3.jar文件优先加载。但这样的方法会带来一些其他问题,所以不推荐使用。最好的方法是,在WEB-INF目录下建一个weblogic.xml文件,文件中写入如下代码:?xmlversion=1.0encoding=UTF-8?!DOCTYPEweblogic-web-appPUBLIC-//BEASystems,Inc.//DTDWebApplication8.1//EN说明:prefer-web-inf-classes=true是WebLogic'sclassloader在有重名类时,优先加载Web应用中WEB-INF内的类。Axis部署同理。至此,问题彻底解决,感谢很多热心的网友,将自己解决问题的方法写出来,贡献给广大劳动人民,所以我也准备将今天解决的问题总结一下,放到blog里,希望能给遇到同样问题的朋友提供一些帮助。
本文标题:将应用部署到weblogic10及oracle linux时遇到的问题
链接地址:https://www.777doc.com/doc-7027354 .html