开发者社区> 文艺小青年> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

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 上的应用出现问题。


本文转自Orson博客园博客,原文链接:http://www.cnblogs.com/java-class/p/7110266.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Weblogic安装与配置详解
Weblogic安装与配置用Eclipse MyEclipse WebLogic8.1开发第一个Web程序1.安装jreEclipse虽然由java开发,但本身并不自带jre。所以你必须先自己安装,去http://java.sun.com/downloads下载最新J2SE1.4.2_03的jre安装文件j2re-1_4_2_03-windows-i586-p.exe。安装成功后,重启机器,并将jre的bin文件夹路径添加到系统环境变量PATH中,如:C:\Program Files\Java\j2re1.4.2_03\bin。
0 0
EOS Platform 7.2下安装weblogic插件
在实际工作中,需要用到EOS Platform,这是一个基于Eclipse的开发工具,自带了Tomcat,可以满足大部分需要,但是有时候需要使用Weblogic,这就得手动安装Weblogic插件了。这个过程与Eclipse相同(Eclipse下安装weblogic插件),本文中在EOS Platform 7.2中安装Weblogic插件。
0 0
Eclipse下安装weblogic插件
安装好weblogic dev版本(Windows下安装weblogic dev版本),可以在Eclipse中安装weblogic server tools插件,直接连接到weblogic server,发布、部署、调试都变得简单些。
0 0
Windows下安装weblogic dev版本
在开发过程中,有一种情况是比较尴尬的:需要用到某个软件,但是只需要用到这个软件中的一小部分功能,这样既浪费的磁盘空间,又浪费了CPU空间。比如Weblogic,完整版包括很多功能,但是开发过程中,只是需要创建数据源、部署项目,然后进行测试即可。所以开发过程中,需要一款简化的Weblogic(Weblogic开发版)是挺有必要的(如果电脑配置比较壕,也可以任性的使用完整版)。
0 0
Linux下安装WebLogic 12c
Linux下安装WebLogic 12c
8944 0
weblogic 安装部署详解
0x01 weblogic下载安装 去Oracle官网下载Weblogic 10.3.6,选择Generic版本,各版本选择下载地址:http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-main-097127.
4482 0
Linux命令行安装weblogic
应用场景 应用服务器,将做好的网站应用,需要发布到网上让其他人访问,那么我们就需要应用服务器,比如tomcat,比如jboss,还有这里讲的weblogic,他们都作为应用服务器,各有优势,需要权衡使用。
1231 0
windows图形化安装weblogic
应用场景 应用服务器,将做好的网站应用,需要发布到网上让其他人访问,那么我们就需要应用服务器,比如tomcat,比如jboss,还有这里讲的weblogic,他们都作为应用服务器,各有优势,需要权衡使用。
1115 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Spark App自动化故障分析与诊断
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载