admin 管理员组

文章数量: 1184232


2024年6月4日发(作者:学生个人网页制作免费)

将应用部署到weblogic10及oracle linux时遇到的问题

公司一个项目准备在这几天上线,在用户现场搭建好服务器运行环境后,我们的主要工作就是将应

用移植到新的环境中。

部署环境介绍 开发环境介绍

操作系统 Oracle windows7/windowsxp

Enterprise-R5-U5-Server-x86_6

中间件 Weblogic server 10.3 tomcat 6

JDK jdk1.6 jdk1.6

J2EE SDK 5.0 5.0

数据库 Oracle Oracle

在将tomcat环境下开发的应用移植到weblogic下的过程中遇到了各种问题,特在此记录。

一、在一开始时准备将web应用打成war包,使用weblogic管理服务器安装,遇到了第一个问题

错误一:

意外的异常 在处理请求时出现意外的异常情况

消息:

堆栈跟踪: interException

at App(:256)

at 0(Native Method)

at (:39)

省略数千字……………

错误二:

emoryError: unable to create new native thread

问题分析:

这些错误都是在文件上传时,因为我们的工程较大,导致虚拟交换内存不足引起的,将修

改weblogic的虚拟内存调大后,解决了问题。

解决办法:

找到weblogic启动文件 ,由于该文件实际上又调用了

bin/文件,所以真正要改的是(在我这里该文件位于

/Middleware/user_projects/domains/base_domains/bin)

将PermSize 和MaxPermSize调整到 256和 512(按实际需要来调)

二、这时候,我们这样可以没问题了吧,谁知一部署,第二个问题来了

错误:

lStateException: Cannot set web app root system

property when WAR file is not expanded

问题分析:

出现这个原因是因为部署的时候使用的是war包, weblogic部署应用不像tomcat先将war

解压在启动,而是直接使用war启动。因为我们在很多JSP和Servlet文件中使用了如:

lPath("/")等类似写法,因为在war中的文件时没有真实路径的,

所以getRealPath("/")取出来的都是意向不到的值,例如null。

解决办法:

由于用这种写法获得web服务器路径的地方很多,一个个去换显然不是一个很好的办法,而且直

接使用war部署对后续的应用更新也比较麻烦,所以准备采用另外一种部署方式,就是文件目录部署。

三、文件目录部署

使用文件目录部署指的是用weblogic管理服务器安装,直接指定本地的应用文件夹,只要

该文件夹下面有包含,就可以被选中安装。

所以接下来就是建立应用程序的安装目录。

在区别于weblogic域管理目录路径,我们在根路径创建了目录。

/deploy/applications/app

/deploy/applications/plan

app : 准备用来存放app应用,在文件夹建好以后,将我们的应用(如:wzfy)整个文件夹拷贝

到app下面。

plan : 这个文件夹当weblogic管理服务器安装了app下面的应用后,会在这里自动建立app

的部署计划文件。

在管理服务器中,找到目录/deploy/applications/app ,选中wzfy,开始安装。第三个问题出

无法访问选定应用程序。

Exception in AppMerge flows' progression

Exception in AppMerge flows' progression

[J2EE:160111]ERROR: Appc can not write to the working directory,

'/deploy/applications/app/wzfy'. Please ensure that you have write permission for

this directory and try again.

通过文字意思的理解,就是对于操作用户来说/deploy/applications/app/wzfy是不可写的。

奇怪,我们手动建立目录都是可写的呀?怎么用webLogic Server安装就变成不可写了呢。

一想,我们建立用户用的root用户,目录操作肯定没问题,而我webLogic Server登录的用户

如果没有授权肯定是没有这个权限。于是给webLogic Server用户 weblogic授予对目录

/deploy/applications/的访问权限。

授权方法如下:

chown –Rf weblogic:weblogic /deploy/applications

授权后,安装部署,一路走下来,非常顺利,直到启动wzfy,第四个问题出现

四、创建sessionFactory失败

Exception:

[HTTP:101216]Servlet: "context" failed to preload on startup in Web

application: "wzfy".

eationException: Error creating

bean with name 'sessionFactory' defined in ServletContext resource

[/WEB-INF/]: Initialization of bean failed;

nested exception is ateException:

Errors in named queries: queryViewByModuleID, querySecParentOwnerById,

中间省略数千字………………………………………………………………………

at

nFactoryImpl.(:364)

问题分析:

碰到这个问题后,一头雾水,这怎么解决呢,第一想法是可能因为我们在hibernate中映射文

件中使用name queries(命名查询)的方式,会不会是weblogic不认呢?通过google和baidu了

很多资料,很试了很多方法,都已失败告终,最后在发现了有一个哥们在blog中总结的一段内容,

问题解决。

5、 Hibernate3、Axis部署问题

Hibernate3中y_class的默认值为

ryTranslatorFactory,在WebLogic下系统运行时

会抛出xception: ClassNotFoundException:

en异常。

这个问题网上说的很多,解决方法也各式各样,其实很简单,Weblogic系统默认加

载EJB-QL parser,存在重名类,所以使用时会出现ClassNotFoundException。一

般网上的修改方式都是修改startWebLogic运行的脚本,将文

件优先加载。但这样的方法会带来一些其他问题,所以不推荐使用。最好的方法是,

在WEB-INF目录下建一个文件,文件中写入如下代码:

8.1//EN" "/servers/wls810/dtd/">

true

说明:prefer-web-inf-classes=true是WebLogic's classloader在有重名类时,

优先加载Web应用中WEB-INF内的类。

Axis部署同理。

至此,问题彻底解决,感谢很多热心的网友,将自己解决问题的方法写出来,贡献给广大劳动人民,

所以我也准备将今天解决的问题总结一下,放到blog里,希望能给遇到同样问题的朋友提供一些帮

助。


本文标签: 问题 部署 文件 服务器 目录