2012-07-16 43 views
4

我想配置连接池的Tomcat 7这里是代码创建资源实例不能在Tomcat7

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

我怎样才能解决这个问题? 谢谢。

回答

4

你的配置看起来非常好(除了web.xml文件中的一些拼写错误; <res-type>java.sql.DatSource</res-type>应该是<res-type>javax.sql.DataSource</res-type>)。

但我认为这个问题是你在server.xml文件中声明数据库资源的事实。

通常,应用程序资源应在应用程序的context.xml文件中声明,并且只有在应用程序之间共享时才在server.xml中声明。所以我的建议是在您的context.xml文件中声明jdbc/testDataSource资源。这应该是一种使其工作的方法

如果您必须完全拥有全局资源,那么在您的context.xml文件you must add a resource link to it or it won't be visible by default中。

该上下文不同于JNDI资源实践中描述的每个Web应用程序JNDI上下文。在此元素中定义的资源在每个Web应用程序上下文中不可见,除非您明确地将它们与<ResourceLink>元素链接起来。

因此使其工作的第二种方式是保留server.xml声明的资源,但再加入这样的事情在你的context.xml文件:

<ResourceLink global="jdbc/testDataSource" 
       name="jdbc/testDataSource" 
       type="javax.sql.DataSource" />