我尝试将jboss-seam与db2数据库一起使用,发生以下错误
com.ibm.db2.jcc.a.SqlException: [jcc][10389][12245][3.52.95] while loading the native
library db2jcct2, java.lang.UnsatisfiedLinkError: no db2jcct2 in java.library.path
an error occurred ERRORCODE=-4472, SQLSTATE=null
我尝试设置-Djava.library.path=/opt/IBM/db2/V9.5/lib64
以及
-Djava.library.path=/opt/IBM/db2/V9.5/lib32
这两条路径都包含libdb2jcct2.so
我还尝试设置LD_LIBRARY_PATH
无效。
操作系统是MacOs
EDIT 我还尝试使用JDBC4驱动程序db2jcc4.jar,因为jdbc4驱动程序不应该依赖本机库。
答案 0 :(得分:22)
用于JDBC和SQLJ的IBM数据服务器驱动程序包括Type 2和Type 4 JDBC驱动程序。请检查以下内容:
1)确保驱动程序位于类路径中:db2jcc.jar。或者,您可以使用JDBC4驱动程序(db2jcc4.jar),但不要将它们都放在类路径中。
2)确保您在应用配置中指定了JCC驱动程序(com.ibm.db2.jcc.DB2Driver
)。
3)使用类似jdbc:db2://server:port/database
的Type-4网址。如果指定类似于jdbc:db2:database
的Type-2 URL,则驱动程序将开始查找本机库。
答案 1 :(得分:2)
您是否尝试过设置DYLD_LIBRARY_PATH
?可能值得一试。
答案 2 :(得分:2)
从路径看,这看起来像是linux / unix平台。尝试运行strace/truss以查看哪些目录正在为库打开。
答案 3 :(得分:1)
追加“driverType = 4;”到你的网址。
答案 4 :(得分:0)
我无法在任何地方找到明确的例子,所以我在这里粘贴我的解决方案。修复我的是添加“DriverType”值为“4”的xa-datasource属性。
<xa-datasource jndi-name="java:/DB2DataSource" pool-name="DB2DataSource" enabled="true" use-ccm="true">
<xa-datasource-property name="ServerName">
my.server.com
</xa-datasource-property>
<xa-datasource-property name="DatabaseName">
SAMBLEDB
</xa-datasource-property>
<xa-datasource-property name="PortNumber">
50000
</xa-datasource-property>
<xa-datasource-property name="DriverType">
4
</xa-datasource-property>
<driver>ibmdb2</driver>
<xa-pool>
<is-same-rm-override>false</is-same-rm-override>
</xa-pool>
<security>
<user-name>username</user-name>
<password>supersecret</password>
</security>
<recovery>
<recover-plugin class-name="org.jboss.jca.core.recovery.ConfigurableRecoveryPlugin"/>
</recovery>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker"/>
<background-validation>true</background-validation>
<stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker"/>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter"/>
</validation>
</xa-datasource>
答案 5 :(得分:-1)
如果java.library.path
(使用LD_LIBRARY_PATH环境变量分配)是错误的,那么实际应该得到类似:“加载t2本机库失败”。
您可以检查java.library.path
是否包含这样的路径。
System.out.println(System.getProperty("java.library.path"));
你能错过另一个像db2jcc_license_cu.jar
也许发布你的类路径。您可以通过阅读来自coide的属性java.class.path
来获得它(如上所述)。