У меня есть три машины, настроенные следующим образом:
- CompA: запуск сервера Oracle 10.2.0.3
- CompB: Запуск сервера Oracle 10.2.0.4 и мой клиентский код
- CompC: запуск только клиентского кода
В клиентском коде как на CompB, так и на CompC подключение к любой из БД Oracle работает без проблем с помощью тонкого драйвера.
Я пытаюсь подключиться к каждой БД 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, но может подключиться с помощью thin к CompA и CompB, поэтому это не должно быть проблемой версии сервера.
CompB и CompC работают под управлением 32-разрядной Ubuntu 8.04, хотя CompC имеет несколько более медленный процессор и всего 1 ГБ ОЗУ по сравнению с 3,25 ГБ ОЗУ в CompB.