JBossデータベース接続プール
-
03-07-2019 - |
質問
私はjbossを初めて使用し、jboss接続プーリングメカニズムを既存のWebアプリケーションに組み込むように求められました。 Webアプリケーションデータベースレイヤーが適切に記述されていること、つまり、不要なときにすべての結果セット、ステートメント、および接続が適切に閉じられること、jbossデータソースを適切に設定した後にWebアプリで行う必要のあるすべてのコードの変更を考慮します。
誰でも、Webアプリでjbossデータソースを使用するチュートリアルまたはコードサンプルを教えてください。
解決
JBossのプールはすべて、DataSource構成で処理されます。 こちらはHowToです。 Webアプリは、直接JDBC URLを実行するのではなく、データベース接続を取得するためにデータソースのJNDIルックアップを実行する必要があります。そうすると、プールができます。
トランザクションもまた別の話です。
編集:これがコードにどのように影響するかについてのコメントに応えて、これは次のようになります。
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();
技術的に言えば、JBoss(4.2.2)単一サーバー構成ではPortableRemoteObject.narrowは確かに必要ではありませんが、一般的なアプリケーションサーバーはオブジェクトを返す必要がないため、より適切なJ2EE標準コードです。 Context.lookupを実行するための正しい型。
上記は、リソース使用率とエラー処理の問題をカバーしていません。データベース接続とトランザクションが終了するのを忘れるとJBossがあなたに怒鳴りますが、あなたはそれが終わったらそのコンテキストオブジェクト、そしてもちろんデータベース接続を閉じることになっています。
とにかく、そのConnectionオブジェクトはDriverManager.getConnection(url);と同じくらい使用可能です
他のヒント
最初に 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
<resource-ref>
<description>Database connection resource</description>
<res-ref-name>jdbc/Exp</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
そして今あなたの .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();
*****リソース参照名がすべての場所で同じであることを確認してください
何も変更する必要はありません。 適切な種類のデータソース(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ソースコードと組み合わせて)。