我正在尝试在Tomcat 7中配置连接池。这是代码: server.xml的一部分:
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<Resource
name="jdbc/testDataSource"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/delta_server"
username="test" password="test"
validationQuery="select count (*) from session_contexts"
/>
web.xml配置:
<resource-ref>
<description>
Sample JNDI DataSource resource reference
</description>
<res-ref-name>jdbc/testDataSource</res-ref-name>
<res-type>java.sql.DatSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
从jsp页面访问:
Context initialContext = new InitialContext();
Context envContext = (Context) initialContext.lookup("java:/comp/env");
conn = (Connection) envContext.lookup("jdbc/testDataSource");
但不幸的是我得到了例外:
javax.naming.NamingException: Cannot create resource instance
org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:146)
javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
org.apache.naming.NamingContext.lookup(NamingContext.java:826)
org.apache.naming.NamingContext.lookup(NamingContext.java:145)
org.apache.naming.NamingContext.lookup(NamingContext.java:814)
org.apache.naming.NamingContext.lookup(NamingContext.java:159)
org.apache.jsp.index_jsp._jspService(index_jsp.java:91)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
我该如何解决? 谢谢。
答案 0 :(得分:4)
您的配置看起来非常好(除了web.xml
文件中的一些拼写错误; <res-type>java.sql.DatSource</res-type>
应为<res-type>javax.sql.DataSource</res-type>
)。
但我认为问题在于您在server.xml
文件中声明数据库资源。
通常,应用程序资源应在应用程序的context.xml
文件中声明,并且只有在应用程序之间共享时才在server.xml
中声明。所以我的建议是在jdbc/testDataSource
文件中声明context.xml
资源。这应该是使其运作的一种方式。
如果您必须拥有全局资源,请在context.xml
文件you must add a resource link to it or it won't be visible by default中。
此上下文与JNDI Resources HOW-TO中描述的每Web应用程序JNDI上下文不同。除非您使用&lt; ResourceLink&gt;显式链接它们,否则此元素中定义的资源在每个Web应用程序上下文中不可见。元件。
因此使其工作的第二种方式是将资源保留在server.xml
中,但在context.xml
文件中添加类似的内容:
<ResourceLink global="jdbc/testDataSource"
name="jdbc/testDataSource"
type="javax.sql.DataSource" />