2009-05-04 37 views
7

私はjbossを初めて使用しています。私は、jboss接続プールメカニズムを既存のWebアプリケーションに組み込むように求められています。 Webアプリケーションのデータベースレイヤーが適切に書かれている、つまり、必要でないときにすべての結果セット、ステートメント、および接続が正しく閉じられていることを考慮すると、jbossデータソースを適切に設定した後、Webアプリケーションですべてのコードを変更する必要があります。JBossデータベース接続プール

ウェブアプリケーションでjbossデータソースを使用するチュートリアルやコードサンプルを教えてください。

+0

で同じである必要がありますすることは契約の一部であることを確認して、かなりありますオンラインで利用可能なサンプルとチュートリアルはほとんどありません。私が心配しているのは、コードベースで必要となるかもしれない変更です。誰かがJBossのdarasourceからどのように接続を取得するのか、そして後でどのように扱うべきか、すなわち接続を閉じるか解放するかを見るサンプルやチュートリアルを教えてください。 ありがとうございます。 –

答えて

8

JBossのプールは、すべてDataSource構成で処理されます。 Hereはハウツーです。 Webアプリケーションは、直接JDBC URLを実行するのではなく、データベース接続を取得するためにデータソースのJNDIルックアップを実行する必要があります。次に、プーリングを行います。

トランザクションは別の話ですが、

EDIT:これは、コードにどのように影響するかについてコメントを受けて、これはそれがどのように見えるかです:

String jndiPath = "java:DataSourceJNDIName"; //The exact prefix here has a lot to do with clustering, etc., but if you are using one JBoss instance standalone, this works. 
Context ctx = new InitialContext(); 
DataSource ds = (DataSource) PortableRemoteObject.narrow(ctx.lookup(jndiPath), DataSource.class); 
Connection c = ds.getConnection(); 

技術PortableRemoteObject.narrowを言えば、とにかくJBossの(4.2.2には必要ありません)単一サーバー構成であるが、一般的なアプリケーションサーバーはContext.lookupを実行するために適切な型のオブジェクトを返す必要がないため、より適切なJ2EE標準コードです。

上記では、リソースの使用率とエラー処理の問題については説明していません。 JBossはデータベース接続を終了してトランザクションが終了するのを忘れてしまって、あなたのために閉じてしまった場合、JBossがあなたに叫ぶでしょうが、あなたはそのコンテキストオブジェクトを終了したら、そしてもちろんデータベース接続を閉じることになっています。

とにかく、そのConnectionオブジェクトは、DriverManager.getConnection(url)と同じくらい使用できます。

1

何も変更する必要はありません。 正しい種類のデータソース(local-tx-datasource/xa-datasource)を選択すると、接続処理とTXが実行されます。 $ JBoss/docs/examples/jcaには、事実上すべてのデータベース用のテンプレートがあります。再利用することができます。

XAを使用している場合は、Tx回復を設定する必要があります。この投稿を参考にしてください: http://management-platform.blogspot.com/2008/11/transaction-recovery-in-jbossas.html(よく、スタンドアロンモードではなく、Joprソースコードと一緒に)。

9

最初xxx-ds.xml名前でXMLファイルを作成し、server/default/deploy/xxx-ds.xml

<datasources> 
<local-tx-datasource> 
<jndi-name>/jdbc/Exp</jndi-name> 
<type-mapping>SQL</type-mapping> 
<connection-url>jdbc:microsoft:sqlserver://   </connection-url> 
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class> 
<user-name></user-name> 
<password></password> 
<min-pool-size>5</min-pool-size> 
<max-pool-size>1000</max-pool-size> 
</local-tx-datasource> 
</datasources> 

jboss-web.xml

<jboss-web> 
<!-- <security-domain flushOnSessionInvalidation="false"/>--> 
<!-- <context-root>/BSI</context-root>--> 
    <resource-ref> 
     <description>Database connection resource</description> 
     <res-ref-name>jdbc/Exp</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <jndi-name>java:/jdbc/Exp</jndi-name> 
     <res-auth>Container</res-auth> 
    </resource-ref> 
</jboss-web> 

web.xml

でこのファイルを配置しますあなた .javaファイル

javax.naming.Context ctx1 = new javax.naming.InitialContext(); 
javax.sql.DataSource ds = (javax.sql.DataSource) ctx1.lookup("java:comp/env/jdbc/Exp"); 
con = ds.getConnection(); 

、今*****は、リソース参照名は、すべての場所のJBossの設定