У меня три машины настроены следующим образом:
- CompA: Запуск Oracle server 10.2.0.3
- CompB: Запуск сервера Oracle 10.2.0.4 и моего клиентского кода
- CompC: запуск только клиентского кода
В клиентском коде как на CompB, так и на CompC подключение к любой базе данных Oracle работает безупречно с использованием драйвера Thin.
Я пытаюсь подключиться к каждой базе данных Oracle из клиентского кода через драйвер OCI, используя
Connection conn = DriverManager.getConnection('jdbc:oracle:oci:username/pass@sid');
Изнутри класса Java, работающего в jboss. Это отлично работает на CompB, но заставляет JVM запускать Jboss в дамп ядра каждый раз на CompC.
CompC может подключаться к обоим серверам Oracle с помощью Sql * Plus и того же файла tnsnames.ora, на который пытается сослаться jboss.
Вот часть трассировки стека. Кажется, что каждый раз это происходит последовательно.
Stack: [0x30fcc000,0x3101d000), sp=0x3101a868, free space=314k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) V [libjvm.so+0x2d02d6] C [libocijdbc10.so+0x585c] C [libocijdbc10.so+0x70a8] Java_oracle_jdbc_driver_T2CConnection_t2cCreateState+0x15c j oracle.jdbc.driver.T2CConnection.t2cCreateState([BI[BI[BI[BISI[S[B[B)I+0 j oracle.jdbc.driver.T2CConnection.logon()V+551 j oracle.jdbc.driver.PhysicalConnection.(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;Loracle/jdbc/driver/OracleDriverExtension;)V+381 j oracle.jdbc.driver.T2CConnection.(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;Loracle/jdbc/driver/OracleDriverExtension;)V+10 j oracle.jdbc.driver.T2CDriverExtension.getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;+67 j oracle.jdbc.driver.OracleDriver.connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;+831 j java.sql.DriverManager.getConnection(Ljava/lang/String;Ljava/util/Properties;Ljava/lang/ClassLoader;)Ljava/sql/Connection;+210 j java.sql.DriverManager.getConnection(Ljava/lang/String;)Ljava/sql/Connection;+15
Кто-нибудь знает, что здесь не так?
ОБНОВЛЕНИЕ: для пояснения, термин «клиент», используемый выше, относится к моему Java-коду, работающему в экземпляре jboss. Единственные библиотеки Oracle, которые должны быть найдены в LD_LIBRARY_PATH, с которым запускается jboss, - это libocijdbc10.so libclntsh.so.10.1 и libnnz10.so. Эти три библиотеки и сам сервер jboss находятся в системе контроля версий, поэтому они имеют одинаковые версии как на CompB, так и на CompC.
CompB может подключаться, используя OCI и thin, как к CompA, так и к CompB. CompC не может подключиться с помощью OCI, но может подключиться с помощью тонкого интерфейса как к CompA, так и к CompB, поэтому это не должно быть проблемой версии сервера.
И CompB, и CompC работают под управлением 32-разрядной версии Ubuntu 8.04, хотя CompC имеет немного более медленный процессор и всего 1 ГБ ОЗУ по сравнению с 3,25 ГБ ОЗУ на CompB.