2014-03-19 30 views
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如何将Oracle AQ库配置为Wildfly 8模块?

这是我的模块:
路径:$ {} WILDFLY_HOME /模块/ ORACLE/AQ/API /主
内容:aqapi.jar,模块.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?有任何想法吗?

谢谢!

回答

0

经过漫长的旅程,经过互联网的浅滩,许多人试图找到一个我的同事终于找到了解决办法。

的解决方案是两个模块结合到一个JDBC /水溶液模块寻找这样:

路径:$ {WILDFLY_HOME} /模块/ 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)之间的通信需要使用两个模块而不是单个模块导致此错误的相同类加载器加载本机实现。

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文件或感谢的符号链接。