2009-07-05 21 views
7

Estoy estudiando cómo crear aplicaciones Java para JBossAS 5.1.0 y estoy tratando de construir una aplicación web jsp muy básica en JBossAS5 utilizando un origen de datos JNDI para acceso a datos .no se puede obtener la conexión de base de datos utilizando JNDI en JBoss

Al intentar abrir una conexión consigo esta excepción:

21:42:52,834 ERROR [STDERR] Cannot get connection: org.jboss.util.NestedSQLException: 
Unable to get managed connection for hedgehogDB; - nested throwable: 
(javax.resource.ResourceException: Unable to get managed connection for hedgehogDB) 

El origen de datos se implementa bien, puedo verlo en la consola JMX-& los archivos de bases de datos están siendo creados bien.

código Java se trate, cuando se produce la excepción:

static public Connection getHedgehogConnection() 
{ 
    Connection result = null; 
    try 
    { 
     String DS_Context = "java:comp/env/jdbc/hedgehogDB"; 

     Context initialContext = new InitialContext(); 

     if (initialContext == null) 
      log("JNDI problem. Cannot get InitialContext."); 

     DataSource datasource = (DataSource)initialContext.lookup(DS_Context); 

     if (datasource != null) 
      result = datasource.getConnection(); 
     else 
      log("Failed: datasource was null"); 
    } 
    catch(Exception ex) 
    { 
     log("Cannot get connection: " + ex); 
    } 

    return result; 
} 

web.xml:

<web-app> 
    <resource-ref> 
    <res-ref-name>jdbc/hedgehogDB</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref> 
</web-app> 

jboss-web.xml:

<jboss-web> 
    <resource-ref> 
     <res-ref-name>jdbc/hedgehogDB</res-ref-name> 
     <jndi-name>java:/hedgehogDB</jndi-name> 
    </resource-ref> 
</jboss-web> 

hedgehogdb-ds.xml

<datasources> 
    <local-tx-datasource> 
     <jndi-name>hedgehogDB</jndi-name> 
     <connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}hedgehogDB</connection-url> 
     <driver-class>org.hsqldb.jdbcDriver</driver-class> 
     <user-name>sa</user-name> 
     <password></password> 
     <min-pool-size>5</min-pool-size> 
     <max-pool-size>20</max-pool-size> 
     <idle-timeout-minutes>0</idle-timeout-minutes> 
     <track-statements/> 
     <security-domain>HsqlDbRealm</security-domain> 
     <prepared-statement-cache-size>32</prepared-statement-cache-size> 
     <metadata> 
     <type-mapping>Hypersonic SQL</type-mapping> 
     </metadata> 
     <depends>jboss:service=Hypersonic,database=hedgehogDB</depends> 
    </local-tx-datasource> 

    <mbean code="org.jboss.jdbc.HypersonicDatabase" 
    name="jboss:service=Hypersonic,database=hedgehogDB"> 
    <attribute name="Database">hedgehogDB</attribute> 
    <attribute name="InProcessMode">true</attribute> 
    </mbean> 

</datasources> 

Esta es mi primera vez en este entorno y sospecho que me estoy perdiendo algo realmente básico.

Respuesta

0

lo descubrió:

El culpable era esto en hedgehogdb-ds.xml:

<security-domain>HsqlDbRealm</security-domain> 

HsqlDbRealm se configura para un diferente DS & estaba causando la conexión falle.

0

Al ver su código, parece que obtiene el DataSource correctamente; de ​​lo contrario, sería nulo. Entonces, el problema ocurre cuando intentas obtener la conexión.

Mirando el HSQLDB docs, parece que su URL necesita un componente de "archivo":

jdbc:hsqldb:file:${jboss.server.data.dir}${/}hypersonic${/}hedgehogDB 

Y, como un comentario de codificación en general, (1) el uso de un paquete de registro estándar, en lugar de una cosecha propia " método log, y (2) cuando se registra una excepción, use la llamada logger (compatible con Log4J y Commons Logging, probablemente otros) que toma una excepción como parámetro (para que obtenga el seguimiento completo de la pila).

+0

archivo - extraño, ninguno de los ejemplos que he visto el uso eso, podría ser necesario para el estilo de conexión jdbc DriverManager, cambiarlo causó más excepciones – Dana

+0

Gracias por el recordatorio Log4J, mi código de prueba desagradable :-( – Dana

1

también es posible en el uso -ds.xml < aplicación gestionados seguridad /> en lugar de < seguridad entre dominios>, en el arriendo en Jboss6

Cuestiones relacionadas