Как решить проблему jboss + Oracle: «Сетевой адаптер не смогли стабиться соединением»?

StackOverflow https://stackoverflow.com/questions/3494150

Вопрос

Я использую Oracle 10.2.0.4 Server, и мы тестируем серверы приложений Java, чтобы выбрать наиболее подходящую для наших потребностей. До сих пор нам удалось работать OpenEJB и Glassfish, но не jboss.

У нас есть простой жирный клиент Java, подключающийся к простому EJB 3.0 (сессионный боб без природы), который, в свою очередь, пытается выполнить простой запрос SQL, используя источник данных Oracle. Эта же установка уже работала с Apache's Openejb и солнечного гляшка. Тем не менее, мы не могли заставить его работать с jboss 5.1.0.ga или jboss-6.0.0.0.20100721-M4 (последняя веха).

JBoss развертывает EJB без ошибок, и EJB действительно может быть достигнут клиентом. Однако, когда EJB пытается получить подключение из источника данных Oracle, он не сработает:

11:04:34,837 INFO  [STDOUT] oracleDS=org.jboss.resource.adapter.jdbc.WrapperDataSource@63d587bf
11:04:45,110 WARN  [org.jboss.resource.connectionmanager.JBossManagedConnectionPool] Throwable while attempting to get a new connection: null: org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.sql.SQLException: I/O Exception: The Network Adapter could not establish the connection)
            at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:225) [:6.0.0.20100721-M4]
            at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:195) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:643) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:267) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:747) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:403) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:413) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:496) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:941) [:6.0.0.20100721-M4]
            at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:89) [:6.0.0.20100721-M4]
            at test.ejb.Business.getResults(Business.java:184) [:]

Файл конфигурации источника данных Oracle-Ds.xml. является:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
    <local-tx-datasource>
        <jndi-name>oracleDS</jndi-name>
        <connection-url>jdbc:oracle:thin:@192.168.10.20:1521:ODB</connection-url>
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
        <user-name>myusername</user-name>
        <password>mypassword</password>
        <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
        <metadata>
            <type-mapping>Oracle9i</type-mapping>
        </metadata>
      <min-pool-size>0</min-pool-size>
      <max-pool-size>20</max-pool-size>
      <idle-timeout-minutes>0</idle-timeout-minutes>
      </local-tx-datasource>
</datasources>

Соответствующими частями EJB являются:

@Stateless
public class Business implements BusinessRemote {

@Resource(name = "oracleDS",mappedName="java:oracleDS")
private DataSource oracleDS;

public String validateEJB(String value) {
    return value + "ok";
}

public String[] getResults() {

    String[] result = null;

    Connection con = null;
    Statement st = null;
    ResultSet rs = null;

    try {
                //Fails here
        con = oracleDS.getConnection();

Я уже играл с разными значениями для тега @Resource, разных драйверов Oracle JDBC (в настоящее время мы используем OJDBC14.Jar и orai18n.jar. Анкет Соединение работает либо напрямую, либо через OpenEJB.

У кого -нибудь есть намек на то, что может быть не так? Спасибо

Это было полезно?

Решение

Проблема заключается в невидимой конфликте версий водителей. Вы должны сделать абсолютно уверен, что оба Oracle BARACLE приходят из одной и той же версии, а также нет других банок Oracle в классе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top