2009-07-05 15 views
7

Sto studiando come creare webapp java per JBossAS 5.1.0 e sto provando a creare un'app web JSP molto semplice su JBossAS5 utilizzando un'origine dati JNDI per l'accesso ai dati .non è possibile ottenere la connessione DB utilizzando l'origine dati JNDI su JBoss

Quando si tenta di aprire una connessione ottengo questa eccezione:

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) 

L'origine dati viene distribuito ok, posso vederlo nella JMX-console & i file di database sono sempre creati ok.

codice Java in questione in cui viene generata l'eccezione:

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> 

Questa è la mia prima volta in questo ambiente e sospetto che mi manchi qualcosa di veramente semplice.

risposta

0

capito:

Il colpevole è stato questo a hedgehogdb-ds.xml:

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

HsqlDbRealm è stato configurato per un diverso DS & stava causando il collegamento sicuro.

0

Guardando il codice, sembra che si ottiene il DataSource correttamente - altrimenti sarebbe nullo. Quindi il problema si verifica quando si tenta di ottenere la connessione.

Guardando il HSQLDB docs, sembra che l'URL ha bisogno di una componente "file":

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

E, come un commento generale di codifica, (1) utilizzare un pacchetto di registrazione standard, piuttosto che un homegrown " log "method, e (2) quando si registra un'eccezione, utilizzare la chiamata logger (supportata da Log4J e Commons Logging, probabilmente altri) che accetta un'eccezione come parametro (in modo da ottenere l'intera traccia dello stack).

+0

di file - strano, nessuno degli esempi che ho visto l'uso che, potrebbe essere richiesto per lo stile di connessione jdbc DriverManager, cambiando ha causato più eccezioni – Dana

+0

Grazie per il promemoria Log4J, il mio cattivo codice di prova :-( – Dana

1

è anche possibile in uso -ds.xml < applicazione gestiti-security /> invece di < security-domain>, al contratto di locazione in Jboss6