7

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

Webアプリでjbossデータソースを使用するチュートリアルまたはコードサンプルを教えてください。

4

3 に答える 3

10

最初に名前でxmlファイルを作成し、xxx-ds.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();

***** リソース参照名がすべての場所で同じであることを確認してください

于 2011-05-04T07:08:11.470 に答える
8

JBoss のプールはすべて DataSource 設定で処理されます。これがハウツーです。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();

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

上記は、リソースの使用率とエラー処理の問題をカバーしていません。データベース接続を閉じるのを忘れてトランザクションが終了すると、JBoss が怒鳴って閉じてしまいますが、作業が終わったら Context オブジェクトを閉じる必要があります。もちろん、データベース接続も閉じます。

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

于 2009-05-04T13:38:32.973 に答える
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ソースコードと組み合わせて)。

于 2009-05-04T17:55:58.253 に答える