WebLogic 部署问题定位与解决

weblogic 做为商用中间件在(EJB、jndi 数据源、日志管理、内存管理、资源配置管理...)  是一些开源免费小型容器无法望其项背的。

   weblogic 最早由 weblogic Inc. 开发,后并入 BEA  公司,最终 BEA 公司又并入 Oracle 公司。

   weblogic 是用于开发、集成、部署和管理大型分布式 Web 应用、网络应用和数据库应用的 Java 应用服务器。

   因此 weblogic 一般做为项目上线发布和部署的服务器,而本地研发时大多会选用 Tomcat/Jetty.... 小型容器。

   这样难免会出现问题,本地运行良好的 web 程序,部署在 weblogic 时会出现这样或那样的问题。

   绝大一部分问题都是因为 weblogic 依赖的 jar 与项目中的 jar 冲突(相同 jar 不同版本)或 weblogic 不支持项目 jar 所导致的。

   当部署 weblogic 出现问题时(自己总结三板斧):

   1. 确认公司使用的 weblogic 版本并翻阅官网对应 weblogic 版本所支持的标准;

   2. 对照 weblogic 出错日志确定冲突 jar 或确定该 webloigc 不支持的 jar;

   3. 对于出现冲突的 jar 在项目 WEB-INFO 目录下添加 weblogic.xml 配置文件,其中申明要预先加载的项目 jar;

   4. 对于出现该 webloigc 版本不支持的 jar,升级 weblogic 版本,或降低项目使用的 jar 版本。

1. 确定 weblogic 版本并查看相应支持的标准

   知已知彼才能百战不殆,因 weblogic 小版本较多且版本之间差异较大。

   查看 weblogic 版本有很多方法,最直接方式是询问安装 weblogic 的同事,或者登录到 linux 像下面这样。

WebLogic 部署问题定位与解决

   获悉部署的版本后,去瞅瞅 oracle weblogic 官网,那里的文档资料是最全面也是最权威的。

   

   

WebLogic 部署问题定位与解决

   找到对应版本点 view Library 跳转进去,里面是整个版本的概览,咱们的关注点应该是该  weblogic 版本支持的标准。

   

WebLogic 部署问题定位与解决

   里面有详细的该 weblogic 支持的 java、web Service、一些杂七杂八的标准,比如 JDK、EL、Servlet、JAX-RS、JAX-WS....

2. 对照部署报错日志确定问题并解决

   有了上述具体的支持标准,配合部署报错的具体类和方法,就可以对症下药。

   下面列举部署 weblogic 时常见的几个报错异常(还有很多遇到在补充):

   1) java.lang.UnsupportedClassVersionError:  Unsupported major.minor version 51.0 (weblogic Jdk 版本与项目 jdk 版本不一致)

   2) request.getRealPath() 为 null ( servlet-api.jar 本地和 weblogic 有差异,使用类加载 Thread.currentThread().getContextClassLoader() 获取相对路径)

   3) ClassNotFoundException:org.hibernate.hql.ast.HqlToken (weblogic 已依赖较早版本的 antlr.jar)

   4) 统一配置 tomcat 和 weblogic 上的数据源 jndi : <jee:jndi-lookup jndi-name="jdbc/user" />

   5) java.lang.ClassCastException: weblogic.xml.jaxp.RegistryDocumentBuilderFactory cannot be cast to javax.xml.parsers.DocumentBuilderFactory (移除项目 xml-apis.jar)

   6 )weblogic NoClassDefFoundError: Could not initialize class sun.awt.X11Graphi( 修改 startWebLogic.sh export JAVA_OPTIONS=-Djava.awt.headless=true)

   解决此类问题的方式大体有三种,遇到部署问题时也可以自己都实践一下。

a. 删除 weblogic 下冲突 jar 文件夹:

   (1)删除 /bea/weblogic12.1.3/server/lib/weblogic.jar中的冲突的文件夹;

   (2)copy 冲突的 XXX.ja r到 /bea/weblogic12.1.3/server/lib, 重启weblogic。

b.  通过修改启动脚本来优先加载某些 jar

  (1)将冲突的 jar 包拷贝到 ${DOMAIN_HOME}/lib 目录下。

  (2)${DOMAIN_HOME}/bin 下找到 startWeblogic.sh 文件用文本编辑器将其打开,并在里面加入如下内容:

export first_classpath=${DOMAIN_HOME}/lib/xxxx.jar SAVE_CLASSPATH="${first_classpath}:${CLASSPATH}"

c. 在应用中通过 weblogic .xml 的配置,优先加载应用的 jar

   因 weblogic 版本不用,weblogic 的配置项会有差异,不要盲目从网上 copy。

   官网版本描述(其他版本将1213换一下即可):

   关注其中的 prefer-application-resources/prefer-application-packages(预先加载应用对应 jar ) 节点的配置:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13443.html