0

私は Apache Tomcat の経験がまったくないので、些細な質問でしたらご容赦ください。

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

これは元の Bean 定義です (わずかに変更 - パスワードなど...):

<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>

Tomcat の構成に関するいくつかのチュートリアルを読んだ後、次のことを行いました。

新しい 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に入れるべきだとどこかで読みましたが、正確な場所がわかりません。それが問題でしょうか?

4

1 に答える 1

2

まず、Tomcat and/or でcontext.xmlandをロールバックします。server.xmlここに作業構成があります:

以下を含むファイルをsrc/main/webapp/META-INFnamedに作成します。context.xml

<?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 を編集します。

<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と プロキシ インターフェイスです。

それがあなたのために働くことを願っています!

于 2012-04-13T09:37:15.763 に答える