2013-03-04 10 views
5

私はスタンドアロンの "コア"レイヤーを持つアプリケーションをビルドします。これはwebappをビルドするためにも使用されます(Mavenのマルチモジュールプロジェクトで、 'コア'モジュールと 'webapp'モジュールがあります。 「コア」モジュールへの依存性)。 MySQLデータベースを使用します。私はDataSourceを実装しようとしましたが、これは両方のコンテキストで問題ありません(スタンドアロンコンテキストでは1つの接続で十分です)。スタンドアロンとWebアプリケーションの両方のコンテキスト(Java 7、Tomcat 7)で使用されるアプリケーションのDataSourceはどれですか?

DataSourceに関する多くのドキュメントを読んだ後、私は少し失われていると言わざるを得ない。私はTomcat JDBC Connection Poolを使うべきであろうという結論に達しました。私の質問は次のとおりです:

1)スタンドアロンコンテキストでは、この設定がWebアプリケーションコンテキストで提供されることを知って、DataSourceを使用する設定をどのようにして提供する必要がありますか(スタンドアロンの設定はTomcat設定)?

  • 私は、スタンドアロンのコンテキストでのみと呼ばれる方法でin this other questionような何かをすべきか?しかし、Webアプリケーションのコンテキストで、Tomcatがすでにデータソースを提供していることをどのように確認できますか?

  • または、私はむしろBean定義を使用する必要がありますか?しかし、このBeanがwebappコンテキストでどのように使われないのでしょうか?

2)他のプールされたDataSource実装についてはどうでしょうか?

結論: うん、私は失われたんだ、と私はデータソースの使用のための「ゴールドスタンダード」が何であるかを知りません。ご協力ありがとうございました。

答えて

2

コアモジュールでDataSourceをルックアップできます。 webappモジュールにはJNDI Datasource in Tomcat、スタンドアロンモジュールにはStandalone JNDI supportを作成する必要があります。

Context ctx = new InitialContext(); 
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/MySQLDB"); 
Connection conn = ds.getConnection(); 

しかし、データソースの構成はdiferentです:データソースからConnectionを取得するためのコンテキストの両方で同じです。 Tomcatでは、リンクの例のようなものが表示されます。

Properties prop = new Properties(); 
prop.put("java:comp/env/jdbc/MySQLDB", ds1); 

スタンドアロンモジュールでInitialContextFactoryは独立コアモジュールの作成する必要があります:スタンドアロンで

<Context> 
<Resource name="jdbc/MySQLDB" ... /> 
</Context> 

リソースの名前が同じスタンドアロンでctx.lookup呼び出しのように、彼女でなければなりません。

についてcom.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSourceを参照してください。thisを参照してください。Tomcatはまた、あなた自身の非Java EEコードで使用することができますは、Apache Software FoundationのDBCPライブラリを、使用しています:http://jakarta.apache.org/commons/dbcp/

JDBC接続プールのためのTomcatにthisとApache DBCPプールthisを参照してくださいを参照してください。

+0

返信いただきありがとうございます。私の「コア」レイヤーは他のアプリケーションで使用できるライブラリです。これらのアプリケーションで2番目のリンクに記述されているタスクを実行させたくない場合は、InitialContextを**コアレイヤー内に**設定する必要があります。だから、もっと簡単にコアレイヤーでルックアップを実行し、Webアプリケーションのコンテキストではない場合はスローされた例外をキャッチし、その場合は自分のConnectionを設定する必要があります。それは有効でしょうか? – FBB

+0

'コア'にこのような機能が含まれている場合は、他のアプリケーションによって実行される可能性があります。スタンドアロンアプリケーションから呼び出すことのできる3番目のコンポーネント(カスタム 'InitialContextFactory'を持つ)を生成することができます。私は、この要件の機能はスタンドアロンアプリケーションに固有のものだと思うので、そのようなアプリケーションに組み込むことができます。別の方法として、接続ファクトリを実装することができます。 –

+0

JNDIを使用してDataSourceをロードできない場合、DriverManagerを使用する単純な接続ファクトリです。ドライバは、プロパティファイルを使用して設定できます。それは有効でしょうか? Osはそれはひどいデザインパターンですか? :p – FBB

関連する問題