2012-07-16 49 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" />