2009-07-05 7 views
7

JBossAS 5.1.0用のJava Webアプリケーションを構築する方法を学習しています.JNDIデータソースを使用してデータアクセス用のJBossAS5で非常に基本的なJSPアプリケーションを構築しようとしています。 。私はこの例外を取得接続開こうとするとJBoss上のJNDIデータソースを使用してDB接続を取得できない

は:

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) 

データソースがOKに配備されたが、私は、データベース・ファイルがOK作成なっているJMXコンソール&でそれを見ることができます。

例外がスローされた問題のJavaコード:

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> 

これはこの環境では初めてのことです。本当に基本的なものが欠けていると思われます。

答えて

0

はそれを考え出した:

犯人はhedgehogdb-ds.xmlファイルでこれをだった:HsqlDbRealmは異なるDS &のために構成された

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

接続が失敗する原因となりました。

0

コードを見ると、DataSourceが正しく取得されたように見えます。そうでない場合はnullになります。したがって、接続を取得しようとすると問題が発生します。

​​を見ると、あなたのURLは、「ファイル」コンポーネントを必要としているようです:

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

そして、一般的なコーディングのコメント、(1)ではなく国産よりも、標準のloggingパッケージを使用する」と(2)例外をログに記録するときは、(完全なスタックトレースを得るために)例外をパラメータとして取るLogger呼び出し(おそらくLog4JとCommons Loggingの両方でサポートされる)を使用します。

+0

ファイル - 奇数、私は使用を見てきた例のいずれもそれはjdbc DriverManagerスタイルの接続に必要な場合がありますが、それを変更すると例外が多く発生します – Dana

+0

Log4Jリマインダー、ありがたいテストコード:-( – Dana

1

ではなく<セキュリティドメインの<アプリケーション管理、セキュリティ/> -ds.xml使用にすることも可能です>、リースでJboss6

関連する問題