EBS OAF R12.2开发中Jar包签名不一致问题的处理
(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处;否则请与本人联系,违者必究)
在开发阶段,经常需要调试类来帮助产品开发组来开发和测试java代码。但因为java代码在EBS都保存为压缩包格式(通过adadmin生成的签名的JAR包),所以必须在加载原本产品的JAR文件之前来加载调试类到classpath。我们可以把调试类放到目录<OA_HTML>/WEB-INF/classes来进行调试。但是,因为JAR包是签名的(通过jarsigner工具),所以一些类来自目录WEB-INF/classes的未签名的类和一些类来自签过名的JAR包的时候,就会抛出异常java.lang.SecurityException。
weblogic.application.ModuleException: class"oracle.apps.fnd.security.AppsServletFilter"'s signer information does not match signer information of other classes inthe same package atweblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1512) atweblogic.servlet.internal.WebAppModule.start(WebAppModule.java:482) at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425) atweblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52) atweblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119) Truncated. see log file for completestacktrace
要避免上面的错误,可以做下面之一的操作
选项A:禁止Jar签名验证
Oracle WebLogic Server类加载器会检查JAR文件的大小和签名。因此,即使你创建了一个调试JAR文件,并拥有同样的签名,Oracle WebLogic Server也会抛出异常的。
要避免这个:
l 在startWeblogic.sh设置java属性
-Dweblogic.classloader.noJarSigners=true来禁止jar签名验证。在产品模式的话,jar签名验证模式是被启用的了。
l 拷贝调试类以及包结构到<OA_HTML>/WEB-INF/classes或者创建调试类的JAR包并拷贝到<OA_HTML>/WEB-INF/lib。
l 使用下面的命令来重启OracleE-Business Suite中间层服务器:
$ADMIN_SCRIPT_HOME/adoacorectl.sh stop/start
选项B:从JAR文件中移除JAR签名信息
l 备份原先的存在于$JAVA_TOP/oracle/apps/fnd/jar中的JAR文件。
l 运行下面的ad工具来从你的产品JAR文件中移除签名信息:
l
adjava -mx512m -nojit oracle.apps.ad.jri.admetarm -inputFile <backup of original jar>-outputFile <newjar>
l 拷贝调试类以及包结构到<OA_HTML>/WEB-INF/classes或者创建调试类的JAR包并拷贝到<OA_HTML>/WEB-INF/lib。
l 使用下面的命令来重启OracleE-Business Suite中间层服务器:
$ADMIN_SCRIPT_HOME/adoacorectl.sh stop/start
l 在测试和调试完成时,恢复之前备份的JAR包
选项C:重新生成产品的JAR文件
l 备份原先的存在于$JAVA_TOP/oracle/apps/fnd/jar中的JAR文件。
l 添加调试类或者在修改$JAVA_TOP下的类
l 运行adadmin来生成产品的JAR文件。
l 产品JAR文件会由修改后的类文件更新。
l 使用下面的命令来重启OracleE-Business Suite中间层服务器:
$ADMIN_SCRIPT_HOME/adoacorectl.shstop/start
l 在测试和调试完成时,恢复之前备份的JAR包
注意:有时adadmin不会更新JAR文件如果类文件版本没有变化。如果出现这种情况,你可能需要强制重生成JAR文件。
注意:类文件的版本和大小都保存在<JAVA_TOP>/JRIMETA.DAT。如果你修改了JAVA_TOP中的一个类文件并运行adadmin来更新JAR文件,JRIMETA.DAT可能也被修改。