首页 > 代码库 > 解决EBS中JAR包冲突的问题

解决EBS中JAR包冲突的问题

同事解决的,摘抄上来备用。

问题描述:在OAF里调用ESB的服务报错如下:

Error Page  
Exception Details.  
 oracle.apps.fnd.framework.OAException: oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.lang.IllegalAccessError, msg=tried to access class org.apache.commons.logging.LogFactory$1 from class org.apache.commons.logging.LogFactory
at oracle.apps.fnd.framework.OAException.wrapperException(OAException.java:912)
at oracle.apps.fnd.framework.OAException.wrapperException(OAException.java:888)
at _OAErrorPage._jspService(_OAErrorPage.java:221)
at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
 
分析:由于ESB API里需要引入很多jar包,其中包括:commons-logging.jar,事实上EBS之前在其它地方就存在了这个jar包。
 
在运行程序时追踪它到底使用的是哪个目录下的jar包:
方法1:
String  myclassPath =  URLDecoder.decode(org.apache.commons.logging.LogFactory.class.getProtectionDomain().getCodeSource().getLocation().getFile(),  "UTF-8");
方法2:
 
String className =  org.apache.commons.logging.LogFactory.class.getName().replace(‘.‘, ‘/‘);
String resource = "/" + className + ".class";
URL url = org.apache.commons.logging.LogFactory.class.getResource(resource);
System.out.println("路径:" + url.getFile());
 
通过查看发现系统调用的$IAS_ORACLE_HOME/ webservices/lib/commons-logging.jar。没有调用我们上传的$JAVA_TOP下的commons-logging.jar.
 
解决办法:
将$IAS_ORACLE_HOME/ webservices/lib/commons-logging.jar改名commons-logging.jar.old(如果目录下没有这个jar包,系统会去加载$JAVA_TOP下的)
将commons-logging.jar复制到$JAVA_TOP(用系统原来的这个包替换我们自己的)
 
这时运行可能会报以下错误:
oracle.apps.fnd.framework.OAException: oracle.jbo.JboException: JBO-29000: Unexpected exception caught: oracle.classloader.util.AnnotatedNoClassDefFoundError, msg=
Missing class: org.apache.commons.logging.Log
Dependent class: oracle.webdb.wsrp.server.CommonsLogAdapter
        Loader: oracle.wsrp:1.0
   .....
   .....
为了防止以上错误需要将本次ESB相关的其它JAR配置到$ORA_CONFIG_HOME/10.1.3/j2ee/oacore/config/server.xml
如:

删除:

<code-source path="/oracle/ebsapp/appldev3/DEV3/apps/tech_st/10.1.3/webservices/lib/commons-logging.jar"/>

添加:

code-source path="/oracle/ebsapp/appldev3/DEV3/apps/apps_st/comn/java/classes/commons-logging.jar"/> 

<code-source path="/oracle/ebsapp/appldev3/DEV3/apps/apps_st/comn/java/classes/com.ibm.mq.headers.jar"/>

<code-source path="/oracle/ebsapp/appldev3/DEV3/apps/apps_st/comn/java/classes/com.ibm.mq.jar"/>

即把esb相关jar包都加上。

注意:为了防止AutoConfig后所添加的会丢失,需在模板中将之信息添加到 FND_TOP/admin/template/ FND_TOP/admin/template/ server_xml_1013.tmp

如:

删除行:

<code-source path="%s_weboh_oh%/webservices/lib/commons-logging.jar"/>

添加行:

<code-source path="%s_javatop%/commons-logging.jar"/>

<code-source path="%s_javatop%/com.ibm.mq.commonservices.jar"/>

<code-source path="%s_javatop%/com.ibm.mq.headers.jar"/>

<code-source path="%s_javatop%/com.ibm.mq.jar"/>

.........

........

重启后可正常使用。