2009-08-04 12 views
1

私はこのようなTomcatのcontext.xmlファイル内のJDBCドライバのデータソースを作成するには、JNDIコンテキストを使用してプールすることなく、デフォルトでは、Tomcatの

<Resource name="db/test" 
      type="javax.sql.DataSource" 
      driverClassName="com.test.jdbc.Driver" 
      url="jdbc:fastdb://localhost:3306/session_db?autoReconnect=true&amp;connectTimeout=5000&amp;socketTimeout=5000" 
      zeroDateTimeBehavior="convertToNull" 
      username="dbuser" 
      password="password" 
      maxActive="100" 
      maxWait="2" 
      removeAbandoned="true" 
      removeAbandonedTimeout="60" 
      logAbandoned="true" /> 

をデータソースを作成する方法、TomcatはDBCPデータソースファクトリを使用して作成されますデータソースをプールします。特定のデータベースとドライバは、すでに低レベルでプーリングをサポートしており、追加のプーリングは実際にパフォーマンスを傷つけます。とにかくこのようなJNDIリソースを使って基本的なデータソースを作成する(プーリングなしで)ので、最小構成変更で異なるデータベースを切り替えることができますか?

私は私自身のデータソースファクトリを書くことができますが、これを達成するために他のドライバのものを使用することができますが、私は簡単な解決策を探しています。

+0

あなたはどのようなJDBCドライバを使用していますか? – laz

答えて

2

これはあなたを満足させるものであるが、いつもSpring JDBC supportをTomcatが管理するデータソースを使わずに使うことができます。

+0

Springを削除しました。私たちはいくつかのパフォーマンスの向上を見て、それに戻りたくありません。 –

+2

ワウ...間違った決定... .... – skaffman

0

使用しているJDBCドライバがjavax.naming.spi.ObjectFactoryの実装、またはorg.apache.naming.factory.BeanFactoryを使用して設定できる他の接続オブジェクトを提供していますか?いずれのソリューションでも、カスタムコードの記述や追加のサードパーティライブラリの追加は必要ありません。

+0

いいえ、それはJDBCドライバでは提供されていません。 –

+0

次に、あなた自身の工場を作成するか、それを提供する別のライブラリを見つけるより簡単な解決策はないと思います。 – laz

0

実際に接続する場合は、DBCP configurationのintialSizeを1に、maxActiveを1に設定してみてください。

長期的には、接続プーリングを使用しない場合は、JNDIを使用してデータソースを設定しないでください。Webアプリケーションのコードで直接作成してください。

編集:あなたのコメントで

は、あなたが言う:「それは一つだけの接続を可能にし、すべての要求は、接続のために待機しているため、サーバーがすぐにハングアップします」

はい、プールサイズを1にすることで効果的にプールをオフにすると、そのようになります。しかし、あなたの質問のタイトルは、「プールしないでDataSourceを作成する方法」です。そのため、あなたが達成しようとしていることについては混乱しています。

JNDIを使用して接続を定義することはお勧めできません(JNDIデータソースを定義する目的はすべて、Webアプリケーション間の接続プーリング用です)。代わりに、DBCPを使用し続ける1つのケースと、他の低レベル接続プールを使用するもう1つのケースで、サーブレット・コードで接続を定義します。

+0

maxActiveを1にしても動作しません。すべての要求が接続を待っているため、1つの接続のみが許可され、サーバーはすぐにハングアップします。 DBCPにとって最も簡単なので、JNDIを使用します。私たちは2つの異なるデータベースを同じ意味で使用します。本当に2つの異なる方法で構成したいとは思わないでください。 –

0

私はこのようなOracleの非プールされた接続のためにそれをやった:

<Resource 
     name="jdbc/aqds" 
     auth="Container" 
     type="oracle.jdbc.pool.OracleDataSource" 
     factory="oracle.jdbc.pool.OracleDataSourceFactory" 
     url="jdbc:oracle:thin:@localhost:1521:XE" 
     user="MYUSER" 
     password="MYPASSWORD" />