2009-07-05 14 views
7

Uczę się, jak budować Java Webapps dla JBossAS 5.1.0 i staram się zbudować bardzo prostą aplikację internetową jsp na JBossAS5 przy użyciu źródła danych JNDI dla dostępu do danych .Nie można uzyskać połączenia DB przy użyciu źródła danych JNDI na JBoss

Podczas próby otwarcia połączenia otrzymuję ten wyjątek:

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) 

Źródłem danych jest rozmieszczony w porządku, widzę go w jmx-konsoli & pliki bazy danych są coraz stworzył ok.

kod Java, o którym mowa, w którym jest wyjątek:

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> 

To jest mój pierwszy raz w tym środowisku i podejrzewam, że brakuje mi czegoś naprawdę podstawowego.

Odpowiedz

0

Zdobione:

Sprawca był to w hedgehogdb-ds.xml:

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

HsqlDbRealm został skonfigurowany dla innego DS & powodowało zerwanie połączenia.

0

Patrząc na twój kod, wygląda na to, że poprawnie odczytałeś DataSource - w przeciwnym razie byłby on zerowy. Problem pojawia się, gdy próbujesz uzyskać połączenie.

Patrząc na HSQLDB docs, wydaje się, że adres URL potrzebuje "plik" komponent:

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

I, jako ogólny komentarz kodowania (1) użyć standardowego pakietu rejestrowania, a nie własnej roboty " log "i (2) podczas rejestrowania wyjątku, użyj wywołania logger (obsługiwanego przez Log4J i Commons Logging, prawdopodobnie inne), który bierze wyjątek jako parametr (tak, że dostajesz pełny ślad stosu).

+0

plik - dziwne, żaden z przykładów widziałem wykorzystanie to może być wymagane do połączenia w stylu DriverManager jdbc, zmiana spowodowała więcej wyjątków – Dana

+0

Dzięki za przypomnienie Log4J, mój nieprzyjemny test kodu :-( – Dana

1

jest to również możliwe do zastosowania w -ds.xml < aplikacja zarządzane-security /> zamiast < zabezpieczeń domeny>, w leasingu w Jboss6

Powiązane problemy