2012-04-13 15 views
0

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?

+0

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

Antwort

2

Zuerst Rollback Ihre context.xml und server.xml in Ihrem Tomcat und/oder. Hier ist eine Arbeitskonfiguration:

Erstellen Sie eine Datei in src/main/webapp/META-INF namens context.xml, die enthält:

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

Dann bearbeiten Sie Ihre Bohne auf diese Weise:

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

Unterschied hier ist die java:comp/env/ProjectDS und die Proxy-Benutzeroberfläche.

Hoffe, es wird für Sie arbeiten!

+0

Danke, ich habe es versucht, zuerst so, wie du es gesagt hast, dann habe ich den ersten Teil in die Context.xml des Apache eingefügt. Beide Male gab mir das Programm folgende Fehlermeldung: 13.04.2012 12:37:32 org.apache.catalina.core.StandardContext start SCHWERWIEGEND: Fehler listenerStart 13.04.2012 12:37:32 org.apache.catalina. core.StandardContext start SCHWERWIEGEND: Kontext [/ rotrajServer] Start fehlgeschlagen wegen vorheriger Fehler ....... – Mahawkee

+0

Könnten Sie mir mehr von der Stacktrace PLZ geben? –

+0

Dies ist so viel, wie ich hier posten kann: 16.04.2012 09:59:11 org.apache.catalina.core.StandardContext start SEVERE: Fehler listenerStart 16.04.2012 09:59:11 org.apache.catalina.core.StandardContext start SEVERE: Kontext [/ myServer] Start aufgrund fehlender Fehler fehlgeschlagen 16.04.2012 09:59:11 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc SEVERE: Die Webanwendung [/ myServer] hat den JDBC-Treiber [com.ibm.as400.access.AS400JDBCDriver] registriert, konnte sie aber nicht abmelden, als die Webanwendung gestoppt wurde. Um einen Speicherverlust zu verhindern, wurde die Registrierung des JDBC-Treibers zwangsweise aufgehoben. – Mahawkee