如何将Oracle AQ库配置为Wildfly 8模块?

时间:2014-03-19 10:45:42

标签: java oracle jboss wildfly oracle-aq

我目前正处于JBoss迁移项目的中间,从版本4.2.2GA到Wildfly 8.0.0.Final。该项目使用Oracle OCI驱动程序进行数据库访问,使用Oracle AQ。现在,我用环境变量“LD_LIBRARY_PATH'”启动Wildfly。设置为OCI本机实现所在的位置,一切正常,但AQ除外。这是我在使用AQ API时遇到的错误:oracle.jms.AQjmsSession.ociinit([JIIZSII)J: java.lang.UnsatisfiedLinkError: oracle.jms.AQjmsSession.ociinit([JIIZSII)J

这是我的模块:
路径:$ {WILDFLY_HOME} / modules / oracle / aq / api / main
内容:aqapi.jar,module.xml
module.xml:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="oracle.aq.api">
  <resources>
    <resource-root path="aqapi.jar" />
  </resources>
  <dependencies>
    <module name="javax.api" />
    <module name="javax.jms.api" />
    <module name="oracle.jdbc" />
  </dependencies>
</module>

现在的问题是,Wildfly不会传播“LD_LIBRARY_PATH”的原因是什么?到模块类加载器?

对于较旧的JBoss版本,我发现了这个问题:https://issues.jboss.org/browse/SOA-3570传播将aqapi.jar放入服务器lib文件夹,就像我们为JBoss 4所做的那样。但是我怎样才能解决Wildfly的这个问题?任何想法?

谢谢!

2 个答案:

答案 0 :(得分:0)

经过互联网浅滩的漫长旅程,许多人尝试了我的同事终于找到了解决方案。

解决方案是将两个模块组合到一个jdbc / aq模块中,这样:

路径:$ {WILDFLY_HOME} / modules / oracle / jdbcaq / main
内容:ojdbc5.jar,aqapi.jar,orai18n.jar,module.xml
module.xml:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="oracle.jdbcaq">
  <resources>
<resource-root path="aqapi.jar" />
    <resource-root path="ojdbc5.jar"/>
    <resource-root path="orai18n.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.jms.api" />
    <module name="javax.transaction.api"/>
  </dependencies>
</module>

我认为这与wildfly的模块类加载器有某种关系。也许两个模块之间的通信(jdbc和aq)要求本机实现由同一个类加载器加载,这在使用两个模块而不是单个模块时会导致此错误。

答案 1 :(得分:0)

JBoss / WildFly模块也可以自动在模块中查找本机库,而不是设置LD_LIBRARY_PATHhttps://docs.jboss.org/author/display/MODULES/Native+Libraries

因此,您可以通过复制${WILDFLY_HOME}/modules/oracle/jdbcaq/main/lib/linux-x86_64/文件或感谢符号链接在.so中加载共享库。