2011-12-21 8 views
0

私はこのようになります私のJetty.xmlファイルに設定されたデータソースがあります:それはそうのように私のweb.xmlで定義されている複数のサーブレットを同じデータソース(JNDI)にバインドできますか?

<New id="MySQL_DS" class="org.eclipse.jetty.plus.jndi.Resource"> 
    <Arg></Arg> 
    <Arg>jdbc/MySQL_DS</Arg> 
    <Arg> 
    <New class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
     <Set name="driverClass">com.mysql.jdbc.Driver</Set> 
     <Set name="jdbcUrl">jdbc:mysql:[IP]</Set> 
     <Set name="user">[USER]</Set> 
     <Set name="password">[PASSWORD]</Set> 
     <Set name="checkoutTimeout">5000</Set> 
     <Set name="initialPoolSize">3</Set> 
     <Set name="maxIdleTime">3600</Set> 
     <Set name="maxPoolSize">50</Set> 
     <Set name="minPoolSize">1</Set> 
     <Set name="maxStatements">200</Set> 
     <Set name="maxConnectionAge">0</Set> 
     <Set name="acquireIncrement">3</Set> 
    </New> 
    </Arg> 
</New> 

を:

<resource-ref> 
    <description>DB Connection</description> 
    <res-ref-name>jdbc/MySQL_DS</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

そして、私は私のようなデータソースにバインドこの私のサーブレットのコード:

InitialContext ctx = new InitialContext(); 
_dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/MySQL_DS"); 

私の質問は:

私は、NE同じデータソース上でこのコンテキストルックアップを使用して4つのサーブレットを持つようにしました。そんなことも可能ですか?

私が意味する、複数のサーブレットは、同じデータソースにバインドすることができ、または各サーブレットは、独自のものを持っている必要がありますか?私が正しく動作している1つのサーブレットを持っていますが、もう一つは、javax.naming.NameNotFoundExceptionが(残りの名jdbc/MySQL_DSを)投げるため

私はこれを聞いていますのよ。

ありがとうございます!

答えて

2

私の知る限りでは、あなたは各サーブレットのためのユニークなデータソースを指定する必要はありません。

私は、すべてのDBに接続するための一つのデータソースを使用することをその中に複数のサーブレットを持つJava EE Webアプリケーションに取り組んでいます。このWebアプリケーションは、アプリケーションサーバなどのバックエンドとのWebLogic ServerとしてOracleを使用しています。このWebアプリケーションのアーキテクチャでは

、DBに接続するための専用のクラスがあります。すべてのサーブレットは、このクラスを呼び出してDBへの接続を取得します。

この接続クラスは、サーブレットのそれぞれがちょうどに接続クラスを使用し、...(上記あなたに似た)コンストラクタに次の行を有し、そして
DataSource ds=(DataSource) ic.lookup("jdbc/OracleDS");
con=ds.getConnection("user","pwd"); \\ ("con" is a private Connection instance var)

InitialContext ic=new InitialContext(); DBに接続します。

例えば

...

MyConnectionClass con = new MyConnectionClass(); // ("MyConnectionClass" is where the data source info is...)
PreparedStatement ps=con.prepareStatement("SELECT * FROM SOME_TABLE");
ResultSet rs=ps.executeQuery();
more code below...

+0

さてさて、それは私がやっているとかなり似ているようです。ありがとう! – Mathieu

関連する問題