2012-04-13 125 views
0

我比Apache Tomcat缺乏經驗,所以請原諒我,如果這是我問的一個微不足道的問題。Apache Tomcat中的JNDI資源定義6

我的任務是更改一個相當大的程序,以便它使用來自Tomcat而不是它自己的bean的連接,以便在數據庫更改時不必重新編譯代碼。

這是原來的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 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 2012-04-13 12:14:30

回答

2

首先,將您的context.xmlserver.xml回滾到您的tomcat和/或。這裏是一個有效的配置:

創建一個名爲context.xmlsrc/main/webapp/META-INF一個文件,其中包含:

<?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和代理unterface。

希望它能爲你效勞!

+0

謝謝你,我試過了,首先是你說的,然後我把第一部分包含到了Apache的context.xml中。這兩次程序給了我這個錯誤信息: 13.04.2012 12:37:32 org.apache.catalina.core.StandardContext start SCHWERWIEGEND:Error listenerStart 13.04.2012 12:37:32 org.apache.catalina。 core.StandardContext開始 SCHWERWIEGEND:上下文[/ rotrajServer]啓動失敗,由於以前的錯誤 ....... – Mahawkee 2012-04-13 10:39:07

+0

你能給我更多的stacktrace PLZ嗎? – 2012-04-13 12:24:53

+0

這是儘可能多的,我可以張貼在這裏: 16.04.2012 09:59:11 org.apache.catalina.core.StandardContext開始 SEVERE:錯誤listenerStart 16.04。2012 09:59:11 org.apache.catalina.core.StandardContext start SEVERE:由於之前的錯誤導致Context [/ myServer]啓動失敗 16.04.2012 09:59:11 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc SEVERE:Web應用程序[/ myServer]註冊了JDBC驅動程序[com.ibm.as400.access.AS400JDBCDriver],但在Web應用程序停止時未註銷它。爲了防止內存泄漏,JDBC驅動程序已被強制註銷。 – Mahawkee 2012-04-16 08:04:34