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 官网,那里的文档资料是最全面也是最权威的。
找到对应版本点 view Library 跳转进去,里面是整个版本的概览,咱们的关注点应该是该 weblogic 版本支持的标准。
里面有详细的该 weblogic 支持的 java、web Service、一些杂七杂八的标准,比如 JDK、EL、Servlet、JAX-RS、JAX-WS....
2. 对照部署报错日志确定问题并解决
有了上述具体的支持标准,配合部署报错的具体类和方法,就可以对症下药。
下面列举部署 weblogic 时常见的几个报错异常(还有很多遇到在补充):
java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0 (weblogic Jdk 版本与项目 jdk 版本不一致)
request.getRealPath() 为 null ( servlet-api.jar 本地和 weblogic 有差异,使用类加载 Thread.currentThread().getContextClassLoader() 获取相对路径)
ClassNotFoundException:org.hibernate.hql.ast.HqlToken (weblogic 已依赖较早版本的 antlr.jar)
解决此类问题的方式大体有三种,遇到部署问题时也可以自己都实践一下。
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 ) 节点的配置:
<?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出现问题时怎么解决?的详细内容,更多请关注Work网其它相关文章!