一、背景介绍
weblogic升级与迁移改造常见是本人参考X86迁移项目中碰到的一系列问题,本次主要介绍weblogic9升级迁移到weblogic11g版本,迁移过程中涉及weblogic跨操作系统迁移、跨大版本升级迁移和应用版本改造等问题,并对这些问题整理出了相应处理解决方法,供大家在做相关weblogic升级迁移项目作为借鉴与参考。
二、迁移问题
2.1 操作系统改造
1、不支持操作系统

2、openfile太多处理
|
问题 |
打开太多文件问题 |
|
异常 |
典型错误如:java.net.Socke tException: Too many open files |
|
解决方法 |
/etc/security/limits.conf 在最后增加: root soft nofile 65535 root hard nofile 65535 root soft nproc 16384 root hard nproc 16384 |
3、大内存分配
|
问题 |
如果需要超过2g的内存 |
|
异常 |
典型错误如:out of memory exception |
|
解决方法 |
建议安装64bit jdk |
4、主机名未配置到hosts文件
|
问题 |
Server启动失败 |
|
异常 |
典型错误如:WebLogic Managed Server Cannot Communicate With Admin Server Because of Wrong IP Address Used |
|
解决方法 |
在hosts文件配置ip主机名 |
5、与db之间白名单问题
|
问题 |
新建连接池失败 |
|
异常 |
典型错误如: |
|
解决方法 |
在db监听中加入监听ip即可解决 |
6、主机端口开启
|
问题 |
主机端口未开启问题 |
|
异常 |
典型错误如:java.net.NoRouteToHostException: No route to host |
|
解决方法 |
在防火墙中开启相应监听端口,即可解决 |
2.1 升级JDK问题
1、避免JDK版本与应用不兼容
|
问题 |
weblogic 升级过程中JDK 版本不兼容问题 |
|
异常 |
典型错误如:has wrong version 50.0, should be 48.0 |
|
解决方法 |
需要在高版本jdk下重新编译 |
2、预设性能正常加载问题
|
问题 |
使用64bit jdk但没有正常加载64bit 的性能包 |
|
异常 |
典型错误如: Unable To Load Performance Pack, Error code: BEA-000438 |
|
解决方法 |
Set the following in commEnv.sh:
JAVA_USE_64BIT=true SUN_ARCH_DATA_MODEL="64" |
3、JDK BUG导致性能缓慢
|
问题 |
weblogic 升级过程中使用低版本java |
|
异常 |
典型错误如:启动过程中发费大量的时间 |
|
解决方法 |
需要升级至大版本下的最高版本jdk |
4、weblogic中文乱码问题
|
问题 |
weblogic 升级过程中出现大量中文乱码问题 |
|
异常 |
典型错误如: has wrong version 50.0, should be 48.0 |
|
解决方法 |
在启动weblogic时 加上 JAVA_OPTIONS=-Dfile.encoding=GBK 解决以上问题 在startweblogic,cmd中 加上 if "%WLS_REDIRECT_LOG%"=="" ( echo Starting WLS with line: echo %JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME% -Djava.security.policy=%WL_HOME%\server\lib\weblogic.policy %PROXY_SETTINGS% %SERVER_CLASS% %JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% -Dfile.encoding=GBK -Dweblogic.Name=%SERVER_NAME% -Djava.security.policy=%WL_HOME%\server\lib\weblogic.policy %PROXY_SETTINGS% %SERVER_CLASS% ) else ( |
5、启动weblogic服务缓慢问题
|
问题 |
weblogic 升级过程中使用低版本java |
|
异常 |
典型错误如:启动过程中发费大量的时间 |
|
解决方法 |
需要升级至大版本下的最高版本jdk |
2.3 应用迁移改造问题
1、Hibernate 版本导致部分功能报错
|
问题 |
Weblogic11g下部分使用hibernate2的功能不能正常使用 |
|
异常 |
org.hibernate.QueryException: query must begin with SELECT or FROM: delete [delete com.unmi.User where u.name='Unmi'] |
|
解决方法 |
升级hibernate3可解决此类问题 |
2、Hibernate启动报错
|
问题 |
Hibernate启动报错 |
|
异常 |
ClassNotFoundException: org.hibernate.hql.ast.HqlToken |
|
解决方法 |
将antlr-2.7.6.jar放到$JDK_HOME\lib\ext下面 原因:Weblogic默认先加载EJB-QL parser,存在重名类.将antlr-2.7.6.jar放于weblogic所用jdk的lib/ext下 可先加载antlr-2.7.6.jar |
3、Session复制问题
|
问题 |
Java类未实现序列化接口导致session拷贝失败 |
|
异常 |
java.io.NotSerializableException |
|
解决方法 |
实现序列化接口可解决此类问题 |
4、web.xml格式配置问题
|
问题 |
应用的web.xml配置文件不符合新版本规范 |
|
异常 |
应用启动失败 |
|
解决方法 |
按新版本规范重建配置文件即可解决 |
5、第三方软件包冲突问题
|
问题 |
应用部署失败 |
|
异常 |
但是运行时报错: DateUtils.addDate方法找不到 |
|
解决方法 |
按照要求,优先使用应用程序自带的包,在web-inf下增加weblogic.xml
|
6、weblogic.xml格式配置问题
|
问题 |
应用的weblogic.xml配置文件不符合新版本规范 |
|
异常 |
Caused By org.xml.sax.SAXParseException Content is not allowed in prolog |
|
解决方法 |
按新版本规范重建配置文件即可解决 |
7、数据库升级带来的连接池问题
|
问题 |
数据库升级后,应用程序使用旧版jdbc驱动导致连接出现问题 |
|
异常 |
java.sql.SQLException Io 异常 Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186647296)(ERR=12505) (ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)))) |
|
解决方法 |
升级至新版本的jdbc驱动即可解决问题 |
8、消息大小超卖
|
问题 |
页面不能正常显示,报错超过消息最大数 |
|
异常 |
weblogic.socket.MaxMessageSizeExceededException: Incoming message of size: '12240' bytes exceeds the configured maximum of: '10000' bytes for protocol: 'http' |
|
解决方法 |
调整消息大小即可解决 |
9、以文件夹模式部署后失败
|
问题 |
以文件夹模式部署后失败 |
|
异常 |
Deploy:fail |
|
解决方法 |
建议以打包war的形式部署 |
10、代码中获取路径为null
|
问题 |
代码中获取路径为null |
|
异常 |
Null |
|
解决方法 |
需要在weblogic.xml里添加
|
11、会话丢失与不一致问题
|
问题 |
session丢失或不一致的问题 |
|
异常 |
Session混乱 |
|
解决方法 |
weblogic11g weblogic.xml中配置
|
12 、struts、 ibatis 等开源软件的配置文件中的相对路径问题
|
问题 |
struts、ibatis等开源软件的配置文件中的相对路径问题 |
|
异常 |
找不到文件 |
|
解决方法 |
简单的解决办法就是配置文件放到classpath下 |
13、XML校验错误
|
问题 |
xml校验错误 |
|
异常 |
org.dom4j.DocumentException: unknown protocol: platform. Nested exception: unknown protocol: platform |
|
解决方法 |
这个经检查是workshop导出时 ,hbm.xml文件生成错误。修改过来就好了 |
14、CXF在weblogic11g上部署问题
|
问题 |
xml校验错误 |
|
异常 |
org.apache.cxf.js.rhino.DOMPayloadProvider" failed to preload |
|
解决方法 |
web.xml文件的头改为 |
15、
应用程序报SESSION ERROR
|
问题 |
SESSION ERROR |
|
异常 |
ERROR org.directwebremoting.dwrp.Batch - A request has been denied as a potential CSRF attack. |
|
解决方法 |
修复:web.xml里的DWR Servlet加
|
2.4、部署问题
1、部署war
之后,测试时发生错误
|
问题 |
部署war之后,测试时发生错误 |
|
异常 |
Error 503--Service Unavailable From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1: |
|
解决方法 |
一般是在刚刚激活更改后,就进行测试,还需要将该应用程序启动,状态为“活动”之后再测试就可以了。 |
2、
部署
WAR
包出现
struts-config.xml
解析问题
|
问题 |
struts-config.xml解析问题 |
|
异常 |
ERROR Digester []: Parse Error at line 2 column 15: Document root element "struts-config", must match DOCTYPE root "null". org.xml.sax.SAXParseException: Document root element "struts-config", must match DOCTYPE root "null". |
|
解决方法 |
需要在struts-config.xml中第二行加入 |
3、部署war报错
|
问题 |
部署WAR出错 |
|
异常 |
<2008-8-23 下午07时37分42秒 CST> Failures were detected while initiating redeploy task for application 'prj_fbysss'. Error is: ' [Deployer:149163]The domain edit lock is owned by another session in non-exclusi ve mode - this deployment operation requires exclusive access to the edit lock a nd hence cannot proceed.'> |
|
解决方法 |
进入http://localhost:7001/console,释放配置,再次部署即可。 注:更新war:必须在删除该应用,并激活更改之后才能覆盖。 但是用war方式,获取资源路径的方法和tomcat不同,存在臭名昭著的getRealPath等问题,移植困难,所以用目录方式部署比较好。 具体方法:先把war解压,然后在weblogic控制台里面选择目录部署。 |
4、JSP乱码问题
|
问题 |
Jsp乱码 |
|
异常 |
中文乱码 |
|
解决方法 |
工程目录下面的/WEB-INF里面有一个weblogic.xml这个文件里有字符集设置 (这个weblogic.xml文件是你在使用weblogic对自己的这个WEB工程进行发布时,通过向导一步一步进行参数设置之后,自动生成的)。 weblogic.xml里的字符集设置为:
|
2.5 weblogic配置问题
1、连接池测试时报错
|
问题 |
连接池测试时出错 |
|
异常 |
Warning! Connectivity to backend database not verified. This is either because required connection pool attribute "TestConnectionsOnReserve" has not been enabled, or an invalid value has been specified for attribute "TestTableName". Please check the server log for more details.. |
|
解决方法 |
配置连接缓冲池,在“高级”中选中“保留时测试连接”即可。此时需要先激活更改再进行测试。否则还会报错。 |
2、JDBC JNDI错误
|
问题 |
jdbc jndi错误 |
|
异常 |
javax.naming.NameNotFoundException: Unable to resolve 'jdbc_fbysss. Resolved ''; remaining name 'jdbc_fbysss' |
|
解决方法 |
首先要在控制台中点击左边的控制栏中的服务->JDBC新建一个数据源,数据源名称无所谓,jndi name一定要注意,比如取名叫jdbc_fbysss,而且,jdbc源必须依赖于一个server。否则无法启动。 对于Spring项目,修改applicationContext.xml的dataSource,(Tomcat的连接池在这里就不需要了)。
|
weblogic10.3.6提供了很好的jndi数据源配置功能,命名上要规范统一,如果是部署时报数据库错误,先检查是否已经设置了数据源了,并把数据源的“目标”指向服务器。如果OK,检查应用里使用的jndi命名是否与weblogic里配置的数据源名称一致。
有需要的朋友可以关注我的公众号,文章每日一更
