PostgreSQL数据库无法连接

时间:2014-02-15 08:57:54

标签: java eclipse postgresql tomcat

我正在使用eclipse创建一个动态Web项目,我想使用tomcat 7.0.50和一个使用连接池的postgresql数据库。 我已经在apache-tomcat-7.0.50 / lib中复制了postgresql-9.2-1003.jdbc4.jar文件。 那是apache-tomcat-7.0.50 / conf中的context.xml文件:

<?xml version='1.0' encoding='utf-8'?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
 <Resource 
           type="javax.sql.DataSource"
           name="jdbc/Fantacalcio" 
           factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
           driverClassName="org.postgresql.Driver"
           url="jdbc:postgresql://localhost:5432/Fantacalcio" 
           username="postgres"
           password="mypassword"
           initialSize="0"
           maxActive="80" 
           maxIdle = "30" 
           minIdle="20"
           timeBetweenEvictionRunsMillis="30000"
           minEvictableIdleTimeMillis="60000"
           testOnBorrow="true"
           validationQuery="SELECT 1" 
           validationInterval="30000" 
           removeAbandoned="true"
           removeAbandonedTimeout="60" 
           logAbandoned="true" 
           abandonWhenPercentageFull="60"
       jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"/>
</Context>

这是项目的WEB-INF文件夹中的web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns="http://java.sun.com/xml/ns/javaee"      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Fantacalcio</display-name>
  <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
     <description></description>
     <display-name>AbstractDatabaseServlet</display-name>
     <servlet-name>AbstractDatabaseServlet</servlet-name>
   <servlet-class>servlet.AbstractDatabaseServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AbstractDatabaseServlet</servlet-name>
    <url-pattern>/AbstractDatabaseServlet</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>ShowIndexServlet</display-name>
    <servlet-name>ShowIndexServlet</servlet-name>
    <servlet-class>servlet.ShowIndexServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ShowIndexServlet</servlet-name>
    <url-pattern>/ShowIndexServlet</url-pattern>
  </servlet-mapping>
  <resource-ref>
    <description>Connection Pool</description>
    <res-ref-name>jdbc/Fantacalcio</res-ref-name>
    <res-type>javax.sql.Datasource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

这是负责连接池的java类:

public abstract class AbstractDatabaseServlet extends HttpServlet {

  protected static final DataSource DS;

  static {

    InitialContext cxt;
    DataSource ds = null;
    try {
        cxt = new InitialContext();
        ds = (DataSource) cxt.lookup("java:/comp/env/jdbc/Fantacalcio");
    } catch (NamingException e) {
        ds = null;
        e.printStackTrace();

    } finally {DS = ds;}

  }
}

这是想要建立连接的servlet:

import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowIndexServlet extends AbstractDatabaseServlet {
    private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException{

    Connection con = null;

    try {
        con = DS.getConnection();
        // use of connection con to interact with the database...

    } catch (SQLException ex) {
    } finally {
        if (con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

}

编辑:离开namingException后的完整堆栈跟踪

15-feb-2014 18.53.27 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
15-feb-2014 18.53.27 org.apache.tomcat.util.digester.SetPropertiesRule begin
AVVERTENZA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Fantacalcio' did not find a matching property.
15-feb-2014 18.53.27 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
15-feb-2014 18.53.27 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
15-feb-2014 18.53.27 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 610 ms
15-feb-2014 18.53.27 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
15-feb-2014 18.53.27 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.50
15-feb-2014 18.53.28 org.apache.tomcat.websocket.server.WsSci onStartup
INFO: JSR 356 WebSocket (Java WebSocket 1.0) support is not available when running on Java 6. To suppress this message, run Tomcat on Java 7, remove the WebSocket JARs from $CATALINA_HOME/lib or add the WebSocketJARs to the  tomcat.util.scan.DefaultJarScanner.jarsToSkip property in  $CATALINA_BASE/conf/catalina.properties. Note that the deprecated Tomcat 7 WebSocket API  will be available. 
15-feb-2014 18.53.28 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
15-feb-2014 18.53.28 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
15-feb-2014 18.53.28 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1225 msjavax.naming.NamingException: Cannot create resource  instance
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:146)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at servlet.AbstractDatabaseServlet.<clinit>(AbstractDatabaseServlet.java:28)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at  sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:357)
at java.lang.Class.newInstance(Class.java:310)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:143)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:865)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:695)
15-feb-2014 18.54.05 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [ShowIndexServlet] in context with path [/Fantacalcio] threw exception
java.lang.NullPointerException
at servlet.ShowIndexServlet.doGet(ShowIndexServlet.java:38)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:695)

P.S。我是意大利人,抱歉我的英语不完美!

0 个答案:

没有答案