Wie lösen Sie den jboss + oracle-problem: "der Netzwerkadapter konnte nicht stärket die Verbindung"?

Ich bin mit Oracle 10.2.0.4 server und Test von Java-Anwendungs-Servern, um die Auswahl der geeignetsten für unsere Bedürfnisse. So weit wir es geschafft, OpenEJB und GlassFish arbeiten, aber nicht JBoss.

Haben wir eine einfache fat-Java-client eine Verbindung mit einem simple EJB 3.0 (stateless session bean), der wiederum versucht, führen Sie eine einfache SQL-Abfrage an eine oracle-Datenquelle. Das gleiche setup hat, arbeitete bereits mit Apache OpenEJB und Sonne Glashfish. Jedoch konnten wir es nicht machen entweder Jboss 5.1.0.GA oder Jboss-6.0.0.20100721-M4 (der jüngste Meilenstein).

Jboss implementiert die EJB-ohne Fehler und der EJB in der Tat können erreicht werden durch den client. Allerdings, wenn der EJB-versucht, eine Verbindung von der Oracle-Datenquelle schlägt es mit:

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) [:]

Sie die Datenquellen-Konfigurationsdatei oracle-ds.xml ist:

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

Den einschlägigen teilen des EJB sind:

@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();

Habe ich bereits gespielt mit unterschiedlichen Werten für die @Resource-tag, verschiedene Oracle-JDBC-Treiber (derzeit sind wir mit ojdbc14.jar und orai18n.jar. Die Verbindung funktioniert entweder direkt oder durch OpenEJB.

Hat jemand einen Tipp was falsch sein könnte?
Dank

Das Problem scheint zu sein, ein Problem mit der Netzwerkkonnektivität. Können Sie einen ping-Befehl die Datenbank aus dem app-server? Wenn Sie können, können Sie überprüfen, wenn es ein firewall problem(vor Allem unter Windows). Wenn Sie eine telnet <DB-Server-IP> 1521, gibt er Ihnen ein Verbindung abgelehnt oder erlaubt es Euch durch.
Ja. Das Netzwerk ist in Ordnung. Das problem war, dass die Kombinationen der verschiedenen Versionen der Oracle-JDBC-Treiber.

InformationsquelleAutor Luis Soeiro | 2010-08-16

Schreibe einen Kommentar