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 像下面这样。
获悉部署的版本后,去瞅瞅 oracle weblogic 官网,那里的文档资料是最全面也是最权威的。
http://www.oracle.com/technetwork/middleware/weblogic/documentation/index.html
找到对应版本点 view Library 跳转进去,里面是整个版本的概览,咱们的关注点应该是该 weblogic 版本支持的标准。
里面有详细的该 weblogic 支持的 java、web Service、一些杂七杂八的标准,比如 JDK、EL、Servlet、JAX-RS、JAX-WS....
2. 定位问题
有了上述具体的支持标准,配合部署报错的具体类和方法,就可以对症下药。
下面列举部署 weblogic 时常见的几个报错异常(还有很多遇到在补充):
01) java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0
weblogic Jdk 版本与项目 jdk 版本不一致
02) request.getRealPath() 为 null
servlet-api.jar 本地和 weblogic 有差异,使用类加载 Thread.currentThread().getContextClassLoader() 获取相对路径;
(classpath 下找不到 .doc 和 .exe ?可以读取配置文件?)将资源放置到 WEB-INF 下;
03) ClassNotFoundException:org.hibernate.hql.ast.HqlToken
weblogic 已依赖较早版本的 antlr.jar
04) 统一配置 tomcat 和 weblogic 上的数据源
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/user" />
05) java.lang.ClassCastException: weblogic.xml.jaxp.RegistryDocumentBuilderFactory cannot be cast to javax.xml.parsers.DocumentBuilderFactory
移除项目 xml-apis.jar 或 jaxp-api.jar
06)weblogic NoClassDefFoundError: Could not initialize class sun.awt.X11Graphi
修改 startWebLogic.sh export JAVA_OPTIONS=-Djava.awt.headless=true
07)weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB cannot be cast to oracle.sql.CLOB
使用 weblogic JNDI 数据源读取 clob 字段时出现的强转错误:http://blog.csdn.net/arvinrong/article/details/22732219
08) java.lang.NoSuchMethodError: com.google.common.collect.Lists.reverse(Ljava/util/List;)Ljava/util/List
weblogic 依赖的 guava 版本较低(包含14.0.1 及以下)
09)WebLogic下使用 URL.openConnection 获取连接返回 SOAPHttpsURLConnection 而不是 HttpsURLConnection
在实例化 URL 对象是指定JDK Handler new URL(null, urlStr, new sun.net.www.protocol.http.Handler.Handler())
10)java.lang.LinkageError: loader constraint violation: when resolving method'XXXXX(XXXX)V'
weblogic 类加载器和 JVM 类加载器加载了不同 Jar 的相同类导致冲突(删除XXX所在jar):http://www.lxway.com/981865964.htm
11)java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider
weblogic 依赖的 hibernate-validator 版本较低(包含 4.3.2.Final 及以下)
12)java.lang.AbstractMethodError: org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider;
升级 hibernate-validator 版本
13)java.lang.RuntimeException: Invalid schema document passed to AbstractDataBinding.addSchemaDocument, not in W3C schema namespace: schema
com.sun.xml.bind.jaxb-impl 与 weblogic JDK jar 冲突,排除该 jar
14)weblogic 解析 web.xml 时不支持通配符,类似于这种:spring-mvc*.xml
3. 解决方法
解决此类问题的方式大体有三种,遇到部署问题时也可以自己都实践一下。
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换一下即可):http://docs.oracle.com/middleware/1213/wls/WBAPP/weblogic_xml.htm#WBAPP571
关注其中的 prefer-application-resources/prefer-application-packages(预先加载应用对应 jar ) 节点的配置:
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
<container-descriptor>
<prefer-web-inf-classes>false</prefer-web-inf-classes>
<prefer-application-packages>
<package-name>预先加载项目 lib 中的包名,支持通配符</package-name>
<package-name>com.sun.faces.*</package-name>
<package-name>com.bea.faces.*</package-name>
</prefer-application-packages>
</container-descriptor>
</weblogic-web-app>
解决方案 a/b/c 中, c 方案无异是最优解,做为生产环境的 weblogic 可能会部署多个应用,不太可能让你随便重启。
方案 a,b 会破坏 weblogic 的整体性,可能导致其他部署在 weblogic 上的应用出现问题。
weblogic 部署问题定位与解决的更多相关文章
- 关于weblogic部署Java项目的包冲突问题
我们可能会用各种应用服务部署我们的Java应用,比如Tomcat.WAS.weblogic等.Tomcat和WAS可能会比较少遇到一些奇怪的问题,但是用weblogic部署项目则经常遇到一些比如包冲突 ...
- weblogic部署异常: cvc-enumeration-valid: string value '3.0' is not a valid enumeration value for web-app-versionType in namespace http://java.sun.com/xml/ns/javaee:<null>
尝试使用weblogic部署一个Demo应用,在选择应用目录后,报出下面的异常: VALIDATION PROBLEMS WERE FOUND problem: cvc-enumeration-val ...
- centos7.5离线安装Docker及容器运行报OCI runtime create failed 问题定位与解决
前言 接上篇 <记一次centos挂载ceph存储的坑> 服务器重做了centos7.5版本的操作系统,剩下就是安装docker,考虑yum安装耗时较长,我一般都是直接安装二进制版本doc ...
- 项目打包 weblogic部署
工作流打包: 由于没有集成单点,配置文件要修改 将webnocas.xml内容复制覆盖 web.xml 到这里修改完毕 选择weblogic项目,右键maven install,生成.ear文 ...
- 使用Linux脚本更新Weblogic部署的应用程序
在利用Jenkins实现Weblogic应用自动部署的功能时,如何通过Shell 脚本自动更新Weblogic部署的应用程序呢? 可以使用weblogic.jar包中的weblogic.Deploye ...
- 利用IIS部署WEB网站以及解决CSS/JS不能显示问题
利用IIS部署WEB网站以及解决CSS/JS不能显示问题 转载声明:http://blog.sina.com.cn/s/blog_a001e5980101b4kt.html vs中正常IIS发布网站后 ...
- 解决weblogic 部署环境后出现的乱码问题
1.在startWebloci.cmd 中 set CLASSPATH=%SAVE_CLASSPATH% 下增加一行 JAVA_OPTIONS="${JAVA_OPTIONS} -Dfile ...
- 1.tomcat部署项目的几种方式和weblogic部署方式及一点通讯
第一种部署方式: 直接使用myeclipse 找到server服务 添加要部署的项目Add Deployment ,然后选中某个项目,首选Exploded Archive(development ...
- Weblogic 部署注意事项
Weblogic下部署服务注意事项: 1. 解决weblogic与hibernate的jar包冲突问题: 首 先找到该系统的DOMAIN_HOME(即你所建的域所在的位置)如:域empi的DOMAIN ...
随机推荐
- 在Linux下的找不同-打补丁
Q:为什么要找不同,为什么要打补丁? A: 在Linux应用中,作为DBA,我们知道MySQL跑在Linux系统之上,数据库最重要的追求就是性能,"稳"是重中之重,所以不能动不动就 ...
- 传感器系列之4.12GPS定位传感器
4.12 GPS定位实验 一.实验目的 了解GPS的基本概念 了解NMEA-0183格式数据串的组成和关于GPS的常用语句 GPS的数据串解析 二.实验材料 具有串口通讯的电脑一台 ADS1.2开发环 ...
- (基础篇 走进javaNIO)第二章-NIO入门
在本章巾,我们会分别对 JDK 的BIO ,NIO 和JDK 1.7 最新提供的 NI02.0的使用进行详细说明 ,通过流程图和代 码讲解,让大 家体会到随着 Ja va 1/0 类库的 不断发展和改 ...
- jquery和vue对比
1.jquery介绍:想必大家都用过jquery吧,这个曾经也是现在依然最流行的web前端js库,可是现在无论是国内还是国外他的使用率正在渐渐被其他的js库所代替,随着浏览器厂商对HTML5规范统一遵 ...
- 【Netty】EventLoop和线程模型
一.前言 在学习了ChannelHandler和ChannelPipeline的有关细节后,接着学习Netty的EventLoop和线程模型. 二.EventLoop和线程模型 2.1. 线程模型 线 ...
- UICollectionView左对齐流水布局、右对齐流水布局
在平时使用的app中会经常碰到一些规格选择,筛选,标签等页面,这些页面的布局展示通常是左对齐流水布局.实现类似这样的左对齐流水布局有多种方式,如果选项少的话可以直接用UIButton实现.现在我们有一 ...
- springboot 集成elasticsearh的简单配置
添加依赖 gradle compile("org.springframework.boot:spring-boot-starter-data-elasticsearch:${springBo ...
- jQuery总结--版本二 事件处理函数
一:事件处理函数 (1) one(事件名称, fn) 仅对指定事件监听一次,监听事件只会执行一次 <!DOCTYPE html> <html> <head lang=&q ...
- python——快速找出两个电子表中数据的差异
最近刚接触python,找点小任务来练练手,希望自己在实践中不断的锻炼自己解决问题的能力. 公司里会有这样的场景:有一张电子表格的内容由两三个部门或者更多的部门用到,这些员工会在维护这些表格中不定期的 ...
- 前端向后台的华丽转身 — PHP入门篇
三个月就这么悄悄溜走了,本K对于前端虽然有了一定的认识,但对一些方面还是处于一种比较萌币的状态,就在这种萌币状态下,本K又跟着大神浩开始了后台语言-PHP语言的学习.PHP的学习对于学过其他语言的人来 ...