2

我目前正处于从 4.2.2GA 版本到 Wildfly 8.0.0.Final 的 JBoss 迁移项目的中间。该项目使用 Oracle OCI 驱动程序进行数据库访问并使用 Oracle AQ。现在,我启动 Wildfly,环境变量“LD_LIBRARY_PATH”设置为 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 解决这个问题?有任何想法吗?

谢谢!

4

2 回答 2

0

经过漫长的互联网浅滩之旅和多次尝试,我的一位同事终于找到了解决方案。

解决方案是将两个模块组合成一个 jdbc/aq 模块,如下所示:

路径:${WILDFLY_HOME}/modules/oracle/jdbcaq/主要
内容: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)之间的通信需要由同一个类加载器加载本机实现,这在使用两个模块而不是单个模块时会导致此错误。

于 2014-03-25T12:37:27.890 回答
0

除了设置LD_LIBRARY_PATH,JBoss/WildFly 模块还可以自动查找模块中的本地库:https ://docs.jboss.org/author/display/MODULES/Native+Libraries

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

于 2014-12-05T10:25:54.597 回答