2010-10-18 8 views
8

मैं एक डीबी 2 डाटाबेस के साथ jboss-सीवन इस्तेमाल करने की कोशिश लोड हो रहा है, तो निम्न त्रुटि तब होती हैjava.lang.UnsatisfiedLinkError जबकि डीबी 2 JDBC ड्राइवर

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

संपादित मैं भी jdbc4 ड्राइवरों के बाद से एक JDBC4 ड्राइवर, db2jcc4.jar उपयोग करने के लिए देशी libs पर निर्भर नहीं होना चाहिए की कोशिश की है।

उत्तर

17

जेडीबीसी और एसक्यूएलजे के लिए आईबीएम डेटा सर्वर ड्राइवर टाइप 2 और टाइप 4 जेडीबीसी ड्राइवर दोनों शामिल हैं। कृपया निम्नलिखित जांचें:

1) सुनिश्चित करें कि ड्राइवर आपके क्लासपाथ में है: db2jcc.jar। वैकल्पिक रूप से आप जेडीबीसी 4 ड्राइवर (db2jcc4.jar) का उपयोग कर सकते हैं, लेकिन क्लासपाथ में दोनों को न रखें।

2) सुनिश्चित करें कि आप अपने ऐप कॉन्फ़िगरेशन में जेसीसी ड्राइवर (com.ibm.db2.jcc.DB2Driver) निर्दिष्ट कर रहे हैं।

3) jdbc:db2://server:port/database जैसे टाइप -4 यूआरएल का प्रयोग करें। यदि आप jdbc:db2:database जैसे टाइप -2 यूआरएल निर्दिष्ट करते हैं तो ड्राइवर मूल पुस्तकालयों की तलाश शुरू कर देगा।

2

क्या आपने DYLD_LIBRARY_PATH भी सेट करने का प्रयास किया है? एक शॉट के लायक हो सकता है।

+0

+1 DYLD_LIBRARY_PATH LD_LIBRARY_PATH – Fedearne

+0

धन्यवाद के बजाय MacOS पर प्रयोग किया जाता है, मैं दुर्भाग्य से सफलता के बिना इस जाँच की। – stacker

2

पथ से, यह एक लिनक्स/यूनिक्स प्लेटफॉर्म दिखता है। पुस्तकालय के लिए कौन सी निर्देशिकाएं खोली जा रही हैं यह देखने के लिए strace/truss चलाने का प्रयास करें।

+2

+1 अच्छा संकेत, रिकॉर्ड के लिए मैक पर उपकरण को dtrace कहा जाता है। dtrace -n 'syscall :: open *: प्रविष्टि {printf ("% s% s", execname, copyinstr (arg0)); } ' – stacker

-1

यदि java.library.path (एलडी_LIBRARY_PATH env। चर का उपयोग करके असाइन किया गया) गलत है तो आपको वास्तव में कुछ ऐसा होना चाहिए: "टी 2 मूल पुस्तकालय के लोड में विफलता"।

यदि पथ इस तरह शामिल है तो आप java.library.path से देख सकते हैं।

System.out.println(System.getProperty("java.library.path"));

आप शायद अपने classpath पोस्ट db2jcc_license_cu.jar

की तरह एक और जार खो सकते हैं। आप कोइड (जैसे ऊपर) से संपत्ति java.class.path संपत्ति पढ़कर प्राप्त कर सकते हैं।

1

"ड्राइवर टाइप = 4;" संलग्न करें आपके यूआरएल में

0

मुझे कहीं भी एक स्पष्ट उदाहरण नहीं मिला, इसलिए मैं यहां अपना समाधान चिपका रहा हूं। मुझे क्या तय किया गया है "ड्राइवर प्रकार" मान "4" की xa-datasource-property जोड़ रहा था।

  <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>