2012-04-13 85 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