如何在 WebSphere 中解决 jar 包冲突

如题所述

  ar包冲突问题实际上就是应用程序希望用某一个确定版本的jar包中的类,但是类加载器却找到并加载了另外一个版本的jar包中的类。在上一部分介绍了WebSphere中类加载器的基本概念和相关配置之后,我们来看如何在WebSphere中解决jar包冲突。

  在WAS v5版本之前,使用共享jar包的方式是将jar包放在$(WAS_HOME)/lib/app路径下,从上一部分中,我们可以看到,这个路径正是"WebSphere lib/app Class loader" 类加载器的类查找路径,WebSphere会查找这个路径以取得相应得jar包中的Java类,从而做到在WebSphere ND上的多个应用程序之间共享jar包的目的。但是这样做的一个缺点就是这些共享jar包暴露给WebSphere ND上所有的应用程序,对于那些希望使用jar包其它版本的应用程序,这些jar包也同样存在在了它们的类加载器类路径上,因此,就不可避免的会造成版本的冲突。在WAS v5版本及之后,增加了共享库(shared library)的概念,推荐的在多个应用程序间共享jar包并避免jar包冲突的方式是使用共享库。

  具体分析引起jar包冲突的情况,主要有三种:

  多个应用程序间jar包冲突:多个应用程序间由于使用了共享jar包的不同版本而造成jar包版本冲突。
  应用程序中多个Web模块间jar包冲突:同一个应用程序内部,不同的Web模块间同时使用一个jar包的不同版本而造成jar包版本冲突。
  应用程序中同一个Web模块内jar包冲突:同一个应用程序内部,同一个Web模块内,由于需要同时使用同一个jar包的两个版本而造成的jar包冲突
  本部分根据这三种jar包冲突的情况,讨论三种解决jar包冲突的办法,并具体讨论三种解决办法的实现步骤和适用情况:

  共享库方式解决jar包冲突:主要解决应用程序间的jar包冲突问题
  打包到Web模块中解决jar包冲突:主要解决应用程序中多个Web模块间jar包冲突问题
  命令行运行方式解决jar包冲突:主要解决应用程序中同一个Web模块内jar包冲突问题
  共享库方式解决jar包冲突

  在WAS v5中,提供了一种很好的机制,使得jar包只存在于需要这个jar包的应用程序的类加载器的路径上,而其它的应用程序不受它的任何影响,这就是共享库(Shared library)。共享库可以用在应用服务器级别和应用程序级别,使用应用程序级别的共享库,其好处就是在不同的应用程序之间使用共享jar包的不同版本。我们可以为一些通用jar包的每个不同版本定义成不同的共享库,应用程序希望使用哪个版本,就把这个版本的共享库放到应用程序的类加载器的类路径上,这种方式有效的解决了应用程序之间jar包冲突的问题。
温馨提示:内容为网友见解,仅供参考
无其他回答

如何在 WebSphere 中解决 jar 包冲突
在WAS v5版本之前,使用共享jar包的方式是将jar包放在$(WAS_HOME)\/lib\/app路径下,从上一部分中,我们可以看到,这个路径正是"WebSphere lib\/app Class loader" 类加载器的类查找路径,WebSphere会查找这个路径以取得相应得jar包中的Java类,从而做到在WebSphere ND上的多个应用程序之间共享jar包的目...

连接JMX的服务器在春天抛出异常,问题,怎么解决
使用Search and Replace工具(它可以搜索jar)在WebSphere安装目录下找到了所需的jar包com.ibm.ws.admin.client_6.1.0.jar、com.ibm.ws.security.crypto_6.1.0.jar、ibmpkcs.jar、ws_runtime.jar、servlet-api.jar。要注意com.ibm.ws.admin.client_6.1.0.jar和ws_runtime.jar两个jar包中都...

java.lang.NoClassDefFoundError: javax.activation.DataHandler
1 WebService的feature pack包和应用中的jar是否有差异=〉找出运行是缺少的包 2 activation.jar和jaxb-impl-.jar的是否有重复及版本冲突 3 新建的Service Client尝试调整设置parent first\/parent last

一次WebSphere类加载问题的错误诊断
.如果还是不能正常显示 则查看应用特别是开源项目使用的utility jar包 通常位于ear目录级别 或者xxx war\/WEB INF\/lib目录下 删除掉一些常见的WAS已有的且必须使用WAS自带的jar包 如j ee jar 支持JSP等运行的jar等(此类问题SystemOut log或者SystemErr log中通常会报错) 如果自己无法判断 则略过此步 ...

MD5是如何编译的?
在一个Java Application或Applet里使用这个bean非常简单,最简单的方法是你要使用这个类的源码工作目录下建一个beartool目录,把这个class文件拷贝进去,然后在你的程序中import beartool.MD5就可以了。最后打包成.jar或.war是保持这个相对的目录关系就行了。Java还有一个小小的好处是你并不需要摘除我们的...

如果一个java工程里,有同一个jar包的多个版本,会有什么影响?
建议最好是用更高级版本的jar包后立即删除旧的。据我所知和经验得出。websphere的编译级别比要 tamcat和weblogic严格一些。相同的程序,如果有新旧两个jar包。在tamcat和weblogic中跑可能不会出错,但是部署到websphere服务器上很可能会出错(工作中遇到过,可费了不少麻烦,死活找不出原因)。我猜测...

websphere 怎么引用共享库
>服务器基础结构:java和进程管理>类装入器,新建>类已装入并且先使用应用服务类装入器,保存;返回类装入器>[刚新建的装入器]>共享库引用>选择步骤(1)中的共享库,保存;3,重启WPS,OK.cxf 用到wsdl4j-1.6.2.jar 这个jar包中的类和was中的类冲突了,应用首先用的是was自带的类。

如何通过BIPlatform完成计算指标的配置
你的问题可能在于您的项目中已经具备db2所需的3个jar包,而websphere中已经包含这几个jar包,很有可能是冲突导致。解决办法就是使用jndi方式配置数据源。这样做的好处就是避免和websphere中的某些jar冲突,除了数据库之外还有报表,任务调度等jar包都有可能冲突,但不是绝对的。希望你能尽快解决。可以看...

tomcat和websphere部署项目区别
websphere一般部署在linux上面 里面好像要先配置数据的,tomacat不用 好像还有jar包冲突的。

websphere 6.1一个server部署多个应用,用不同的端口,怎么设置?
在server上可以配置多个host,不同的host配置不同的端口,然后发布的时候选一下host就可以了。其实控制台就是一个adminhost,发布是defaulthost。

相似回答