精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-27
,报找不到 org.apache.commons.net.XXX.yyy(),但是此文件明明在 WEB-INF/lib 下面,以为是部署缓存问题,删除了部署,部署了又删除,还是搞不定,郁闷的一米。 后来一想,可能是jar包冲突问题,于是单独把jar包拷贝到weblogic的domain下/app/weblogic/Oracle/Middleware/user_projects/domains/jjjc_domain/lib下,重启weblogic后,他会自动把jar加载到classpath里, <2011-10-27 下午08时15分29秒 GMT+08:00> <Notice> <WebLogicServer> <BEA-000395> <Following extensions directory contents added to the end of the classpath: /app/weblogic/Oracle/Middleware/user_projects/domains/jjjc_domain/lib/commons-net-3.0.1.jar> 再试,还是不管用。再想,可能不是和domain的包冲突,可能就是和weblogic的全局包冲突,于是find [weblogic@jjjc1 ~]$ cd Oracle/Middleware/ [weblogic@jjjc1 Middleware]$ find . -name *net*.jar 在众多的结果里挑选了一下,确定目标就是 ./modules/com.bea.core.apache.commons.net_1.0.0.0_1-4-1.jar 调包前备份老jar,以免宕机 [weblogic@jjjc1 Middleware]$ mv ./modules/com.bea.core.apache.commons.net_1.0.0.0_1-4-1.jar . [weblogic@jjjc1 Middleware]$ mv ./user_projects/domains/jjjc_domain/lib/commons-net-3.0.1.jar ./modules/ 重启weblogic,重新部署app,一切如想象中的OK。 记得五六年前,折腾websphere6的时候,也遇到过类似的问题,看来经验还是值钱的。 题外话:commons-net包,最新的都3.0版本了,为啥weblogic还在用1.0的包,咋不与时俱进呢???? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-10-28
29人已阅读,没人回帖,不厚道啊
|
|
返回顶楼 | |
发表时间:2011-10-28
解决JarHell,试试JIOPi吧,远比OSGi轻量级的JarHell解决方案
|
|
返回顶楼 | |
发表时间:2011-10-28
longware 写道 29人已阅读,没人回帖,不厚道啊
weblogic和websphere这样的商用服务器应该自行修改服务器启动脚本指定相应的JAVA_HOME和CLASSPATH。所以你的问题是你自己没有进行最佳实践造成的。 |
|
返回顶楼 | |
发表时间:2011-10-28
downpour 写道 longware 写道 29人已阅读,没人回帖,不厚道啊
weblogic和websphere这样的商用服务器应该自行修改服务器启动脚本指定相应的JAVA_HOME和CLASSPATH。所以你的问题是你自己没有进行最佳实践造成的。 谢谢提醒,又多一个方法,一般只改启动脚本的JAVA_OPTIONS和USER_MEM_ARGS,很少去改CLASSPATH。 即使改了CLASSPATH,也有可能会出现和系统自带的CLASSPATH冲突的jar包的。 |
|
返回顶楼 | |
发表时间:2011-10-29
longware 写道 谢谢提醒,又多一个方法,一般只改启动脚本的JAVA_OPTIONS和USER_MEM_ARGS,很少去改CLASSPATH。 即使改了CLASSPATH,也有可能会出现和系统自带的CLASSPATH冲突的jar包的。 你都自己设置CLASSPATH了,还会出现JAR冲突?看来你对Java中最基本的Library加载机制都不了解。基础知识啊!!! downpour 写道 安装完JDK后,需要正确配置Java运行时必须的环境变量值,它们是:JAVA_HOME、CLASSPATH和PATH。无论是什么操作系统,都能够支持多个JDK版本的共存,读者可以根据应用程序的实际需求对不同的JDK版本进行管理。 正确管理JDK版本的方式,是在JVM运行时指定JDK版本对应的环境变量。为了方便起见,我们往往为操作系统本身指定一个系统级别的环境变量。 Java语言对于运行环境的管理比较宽松,在一个操作系统中可以同时运行多个Java程序的进程,每个Java进程所依赖的JRE版本也可以各不相同。当某一个Java进程启动时,操作系统会依次按照Java启动进程的当前目录、当前目录的父目录、PATH值中所指定的目录进行JRE寻址,找到第一个返回的JRE版本并运行。因此,一个简单而有效的指定JRE寻址的方式是在启动Java进程的脚本中通过指定当前运行程序的PATH值来定制特定版本的JRE的执行环境,从而达到对不同版本的JRE进行管理的目的。 JRE管理和CLASSPATH的加载顺序问题是Java开发中最为基本的问题,它牵涉到的是一个Java程序所依赖的最为基本的底层环境的配置。尤其是当一个应用程序运行在一个高级的商业应用服务器如Websphere或Weblogic之上时,我们应该密切关注程序的JRE运行参数和版本以及CLASSPATH的加载顺序(先加载优先原则),因为这些商业应用服务器往往有自定义的JRE管理机制和CLASSPATH的加载方式,而这两大内容,也将直接决定Web应用的运行特征。 所以,Weblogic和Websphere的启动脚本中所指定的CLASSPATH顺序决定了JAR包的加载次序。如果你要优先加载你应用程序中的JAR包,你不得不重新编写CLASSPATH,把应用程序中的JAR包写到Weblogic默认的JAR包之前以获得更大的优先级。 |
|
返回顶楼 | |
发表时间:2011-10-29
downpour 写道 所以,Weblogic和Websphere的启动脚本中所指定的CLASSPATH顺序决定了JAR包的加载次序。如果你要优先加载你应用程序中的JAR包,你不得不重新编写CLASSPATH,把应用程序中的JAR包写到Weblogic默认的JAR包之前以获得更大的优先级。 谢谢downpour,理解又加深了! |
|
返回顶楼 | |
发表时间:2011-10-30
Weblogic上没有地方指定类装载顺序?Websphere上有的,可以自己设置先加载项目中的类定义
|
|
返回顶楼 | |
发表时间:2011-10-30
估计我同学的那个问题就是它~~~~~~~~~~~~~~~~~
|
|
返回顶楼 | |
发表时间:2011-10-31
在应用的weblogic.xml里设置prefer-web-inf-classes为true就可以指定应用的包优先了。
或者weblogic 9以后的ear包可以在weblogic-application.xml用prefer-application-packages指定具体哪些包优先。 |
|
返回顶楼 | |