Ich bin mehr als unerfahren mit Apache Tomcat, also vergib mir, wenn es eine triviale Frage ist, die ich frage.JNDI-Ressourcendefinition in Apache Tomcat 6
Meine Aufgabe ist es, ein ziemlich großes Programm zu ändern, so dass es die Verbindung von Tomcat statt seiner eigenen Bean verwendet, so dass Sie den Code nicht neu erstellen müssen, wenn sich die Datenbank ändert.
Dies ist die ursprüngliche Bohne Definition (leicht verändert - Passwörter und so ...):
<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>
Nach mehreren Tutorials über Tomcat-Konfiguration zu lesen, habe ich folgendes:
Die neue Bohne:
<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"/>
Was ich erhalte, ist:
Ausnahmeverarbeitung Globale JNDI Ressourcen javax.naming.NamingException: Kann nicht Ressourceninstanz
Ich habe irgendwo gelesen erstellen dass ich das obige nicht in die server.xml sondern in die web.xml schreiben sollte, aber ich weiß nicht wo genau. Könnte das das Problem sein?
Ich fand diese andere Lösung: http://stackoverflow.com/questions/9841109/how-to-change-spring-to-use-datasource-from-tomcat-vs-basicdatasource, aber es gibt mir auch Fehlermeldungen (Error listenerStart) wenn ich es so versuche. – Mahawkee