2012-04-13 10 views
0

私は、Apache Tomcatで経験の浅いよりもよ、それは私が求めている些細な問題だなら、私を許して。JNDIリソース定義6

私の仕事は、データベースが変更されたときにコードを再構築する必要がないように、独自のbeanではなくTomcatからの接続を使用するようにかなり大きなプログラムを変更することです。

これは、元のBean定義(若干変更 - パスワードやな...)です:Tomcatの設定について、いくつかのチュートリアルを読んだ後

<bean id="ProjectDS" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" scope="singleton"> 
     <property name="url" 
        value="jdbc:as400://127.0.0.1/TEST2;prompt=false;naming=sql;errors=full;date format=usa;date separator=/;time format=hms;time separator=:;transaction isolation=read committed;"/> 
     <property name="driverClassName" value="com.ibm.as400.access.AS400JDBCDriver"/> 
     <property name="username" value="asdf"/> 
     <property name="password" value="asdf"/> 
     <property name="initialSize" value="${ProjectDS.initialSize}"/> 
     <property name="maxActive" value="${ProjectDS.maxActive}"/> 
     <property name="maxIdle" value="${ProjectDS.maxIdle}"/> 
     <property name="minIdle" value="${ProjectDS.minIdle}"/> 
     <property name="testOnBorrow" value="${ProjectDS.testOnBorrow}"/> 
     <property name="removeAbandoned" value="${ProjectDS.removeAbandoned}"/> 
     <property name="removeAbandonedTimeout" value="${ProjectDS.removeAbandonedTimeout}"/> 
     <property name="logAbandoned" value="${ProjectDS.logAbandoned}"/> 
    </bean> 

、私は次のことをやった:

新しいbean:

<bean id="ProjectDS" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName"> 
      <value>ProjectDS</value> 
     </property> 
     <property name="resourceRef" value="true"></property> 
    </bean> 

のserver.xml:

<Resource name="ProjectDS" global="ProjectDS" auth="Container" 
      type="org.apache.commons.dbcp.BasicDataSource" 
      driverClassName="com.ibm.as400.access.AS400JDBCDriver" 
      url="jdbc:as400://127.0.0.1/TEST2" 
      username="asdf" 
      password="asdf" /> 

context.xmlには:

<WatchedResource>WEB-INF/web.xml</WatchedResource> 
    <ResourceLink global="ProjectDS" name="ProjectDS" type="org.apache.commons.dbcp.BasicDataSource"/> 

私は何を取得することです:

例外処理のグローバルJNDIリソース はjavax.naming.NamingExceptionの:リソース・インスタンスに

を作成できません、私はどこかで読ん私はserver.xmlに上記をweb.xmlに入れてはいけないと思っていますが、正確にはどこにいるのかわかりません。それが問題だろうか?

+0

この他の解決策が見つかりました:http://stackoverflow.com/questions/9841109/how-to-change-spring-to-use-datasource-from-tomcat-vs-basicdatasourceまた、私にエラーメッセージを表示しますエラーlistenerStart)私はそのようにしようとします。 – Mahawkee

答えて

2

まず、あなたのcontext.xmlとあなたのtomcatでserver.xmlおよび/またはロールバック。ここでは、作業の構成は次のようになります。この方法であなたのBeanを編集し、

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
<Resource name="ProjectDS" auth="Container" 
      type="javax.sql.DataSource" 
      driverClassName="com.ibm.as400.access.AS400JDBCDriver" 
      url="jdbc:as400://127.0.0.1/TEST2" 
      username="asdf" 
      password="asdf" /> 
</Context> 

を次に:ここ

<bean id="ProjectDS" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/ProjectDS" /> 
    <property name="proxyInterface" value="javax.sql.DataSource" /> 
</bean> 

違いはjava:comp/env/ProjectDSとある

は含まれていcontext.xmlという名前src/main/webapp/META-INFでファイルを作成します。代理unterface。

あなたのためにうまくいきますように!

+0

ありがとう、私はそれを試しました、まずあなたが言ったようにして、最初の部分をApacheのcontext.xmlに入れました。両方の時間プログラムは私にこのエラーメッセージを与えました: 13.04.2012 12:37:32 org.apache.catalina.core.StandardContext start SCHWERWIEGEND:エラーlistenerStart 13.04.2012 12:37:32 org.apache.catalina。 core.StandardContext start SCHWERWIEGEND:前のエラーのためにコンテキスト[/ rotrajServer]の起動に失敗しました ....... – Mahawkee

+0

stacktrace plzをもっと教えてください。 –

+0

これは私がここに投稿できるのと同じくらいです: 16.04.2012 09:59:11 org.apache.catalina.core.StandardContext start SEVERE:エラーlistenerStart 16.04。2012年9時59分11秒org.apache.catalina.core.StandardContext SEVERE開始:コンテキスト[/ myServerという]スタートアップによる以前のエラー 2012年4月16日9時59分11秒org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc に失敗しました。重大度:Webアプリケーション[/ myServer]がJDBCドライバー[com.ibm.as400.access.AS400JDBCDriver]を登録しましたが、Webアプリケーションが停止したときにその登録を解除できませんでした。メモリリークを防ぐため、JDBCドライバは強制的に登録解除されています。 – Mahawkee

関連する問題