Προς το περιεχόμενο

JDBC Connection pool Null Pointer Exception


Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα προσπαθώ να παίξω με connection pool και έκανα ένα μικρο Servlet:

package test;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.naming.NamingException;
import javax.servlet.*;
import javax.servlet.http.*;
import models.Test;
/**
 * Created by pcmagas on 6/6/2015.
 */
public class Phonebook extends HttpServlet
{
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        loadView(request, response);
    }

    @Override
    public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        String name=request.getParameter("name");
        String surname=request.getParameter("surname");

        try
        {
            Test t=new Test();

            int id=t.insertData(name,surname);

            loadView(request, response);
        }
        catch(NamingException n)
        {
            n.printStackTrace();
        }
        catch (SQLException s)
        {
            s.printStackTrace();
        }
    }

    private void loadView(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

        RequestDispatcher view= request.getRequestDispatcher("./views/phonebook.jsp");
        view.forward(request,response);
    }
}

Και μια κλάση να παίζει το ρόλο του Μοντέλου για να κάνω τα πάρε δώσε με την βάση:

package models;

import java.sql.*;
import javax.sql.DataSource;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
 * Created by pcmagas on 6/6/2015.
 */
public class Test
{
    private Connection dbConnection=null;

    /**
     *Constructor Method that Initialises the connection
     */
    public Test() throws NamingException,SQLException
    {
      DataSource theSource= (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/test");
      dbConnection = theSource.getConnection();
    }

    /**
     * Inserts an entry to contacts Table
     * @param name
     * @param surname
     * @return -1 on failure else it returns the id
     */
    public int insertData(String name, String surname)
    {
        try
        {
            String sql="INSERT INTO contacts (name,surname) VALUES (?,?) RETURNING id";
            PreparedStatement p = dbConnection.prepareStatement(sql);
            p.setString(1,name);
            p.setString(2,surname);
            p.executeUpdate();

            ResultSet rs = p.getResultSet();

            if(rs.next())
            {
                return rs.getInt(1);
            }
            else
            {
                return -1;
            }

        }
        catch(SQLException e)
        {
            e.printStackTrace();
            return -1;
        }
    }
}

Το Web.xml είναι:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Testing Servlets</display-name>

    <filter>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <async-supported>true</async-supported>
    </filter>

    <filter-mapping>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
        </jsp-property-group>
    </jsp-config>

    <servlet>
        <servlet-name>Test</servlet-name>
        <servlet-class>test.Test</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>FileUpload</servlet-name>
        <servlet-class>test.FileUpload</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FileUpload</servlet-name>
        <url-pattern>/files</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>Session</servlet-name>
        <servlet-class>test.Session</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Session</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>UrlParams</servlet-name>
        <servlet-class>test.PostUrlParams</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UrlParams</servlet-name>
        <url-pattern>/url</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>Phonebook</servlet-name>
        <servlet-class>test.Phonebook</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Phonebook</servlet-name>
        <url-pattern>/phonebook</url-pattern>
    </servlet-mapping>

    <Context>

        <Resource name="jdbc/test"
                  global="jdbc/test"
                  auth="Container"
                  type="javax.sql.DataSource"
                  driverClassName="org.postgresql.Driver"
                  url="jdbc:postgresql://localhost:5432/test"
                  username="pcmagas"
                  password="pcmagas"
                  maxActive="100"
                  maxIdle="20"
                  minIdle="5"
                  maxWait="10000"/>
    </Context>


    <multipart-config>
        <location>/tmp</location>
        <max-file-size>20848820</max-file-size>
        <max-request-size>418018841</max-request-size>
        <file-size-threshold>1048576</file-size-threshold>
    </multipart-config>
</web-app>

Και το pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>web</groupId>
  <artifactId>simple-servlet</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>simple-servlet Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>javax.servlet-api</artifactId>
         <version>3.0.1</version>
         <scope>provided</scope>
    </dependency>
    <dependency>
       <groupId>org.postgresql</groupId>
       <artifactId>postgresql</artifactId>
       <version>9.4-1201-jdbc41</version>
    </dependency>
  </dependencies>

  <build>
      <plugins>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.3.2</version>
          <configuration>
              <source>1.7</source>
              <target>1.7</target>
          </configuration>
        </plugin>
      </plugins>
     <finalName>simple-servlet</finalName>
  </build>
</project>

Αλλά παίρνω ένα NullPointerException εκεί που λέει:

            PreparedStatement p = dbConnection.prepareStatement(sql);

Και ορίστε και το Stack trace:

e.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Phonebook] in context with path [/simple-servlet] threw exception
java.lang.NullPointerException
	at models.Test.insertData(Test.java:45)
	at test.Phonebook.doPut(Phonebook.java:27)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:649)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	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.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
Δημοσ.

Δες στα logs της postgres τι γίνεται αν εκτελείται κ πως το statement. Μπορείς να δοκιμάσεις να μη χρησιμοποιησεις anonymous parameters και να δεις αν εκτελείται κανονικά.

Δημοσ.

Δες στα logs της postgres τι γίνεται αν εκτελείται κ πως το statement. Μπορείς να δοκιμάσεις να μη χρησιμοποιησεις anonymous parameters και να δεις αν εκτελείται κανονικά.

Βασικά στο να πάρω το connection είναι το θέμα δεν δημιουργείτε καν το connection με την postgres. Πιστεύω ότι το θέμα είναι πως έχω σετάρει το pool

Δημοσ.

Δε νομίζω οτι εχει διαφορα με ένα απλό jdbc connection απλά είναι σε δικό του ξεχωριστό thread. Οπότε πας σε κονσόλα και κάνεις σύνδεση με το χρήστη σου στη βάση, αν μπαίνεις τότε αλλάζεις το Resource στο xml σου.

Εν τέλει το stack trace που παραθέτεις χτυπάει για το query όχι για το connection.

Δημοσ.

Έκανα κάποιες αλλαγές στο pool και στο servlet:

 

Στο αρχείο /etc/tomcat7/context.xml έχω τα εξής:

<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->
        <Resource name="jdbc/test"
                  global="jdbc/test"
                  auth="Container"
                  type="javax.sql.DataSource"
                  driverClassName="org.postgresql.Driver"
                  url="jdbc:postgresql://localhost:5432/test"
                  username="pcmagas"
                  password="pcmagas"
                  maxActive="100"
                  maxIdle="20"
                  minIdle="5"
                  maxWait="10000"/>
</Context>

Στο web.xml:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Testing Servlets</display-name>

    <filter>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <async-supported>true</async-supported>
    </filter>

    <filter-mapping>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
        </jsp-property-group>
    </jsp-config>

    <servlet>
        <servlet-name>Test</servlet-name>
        <servlet-class>test.Test</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>FileUpload</servlet-name>
        <servlet-class>test.FileUpload</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FileUpload</servlet-name>
        <url-pattern>/files</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>Session</servlet-name>
        <servlet-class>test.Session</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Session</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>UrlParams</servlet-name>
        <servlet-class>test.PostUrlParams</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UrlParams</servlet-name>
        <url-pattern>/url</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>Phonebook</servlet-name>
        <servlet-class>test.Phonebook</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Phonebook</servlet-name>
        <url-pattern>/phonebook</url-pattern>
    </servlet-mapping>

    <resource-ref>
        <description>Postgresql connection</description>
        <res-ref-name>jdbc/test</res-ref-name>
        <res-type>javax.sql.dataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

    <multipart-config>
        <location>/tmp</location>
        <max-file-size>20848820</max-file-size>
        <max-request-size>418018841</max-request-size>
        <file-size-threshold>1048576</file-size-threshold>
    </multipart-config>
</web-app>

Στο Test.java:

package models;

import java.sql.*;
import javax.sql.DataSource;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.logging.*;
/**
 * Created by pcmagas on 6/6/2015.
 */
public class Test
{
    private Connection dbConnection=null;

    /**
     *Constructor Method that Initialises the connection
     */
    public Test() throws NamingException,SQLException
    {
      DataSource theSource= (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/test");
      this.dbConnection = theSource.getConnection();
    }

    /**
     * Inserts an entry to contacts Table
     * @param name
     * @param surname
     * @return -1 on failure else it returns the id
     */
    public int insertData(String name, String surname)
    {
        try
        {
            String sql="INSERT INTO contacts (name,surname) VALUES (?,?) RETURNING id";
            PreparedStatement p = dbConnection.prepareStatement(sql);
            p.setString(1,name);
            p.setString(2,surname);
            p.executeUpdate();

            ResultSet rs = p.getResultSet();

            if(rs.next())
            {
                return rs.getInt(1);
            }
            else
            {
                return -1;
            }

        }
        catch(NullPointerException r)
        {
            r.printStackTrace();
            if(dbConnection==null)
            {
                return -2;
            }
            else
            {
                return -3;
            }
        }
        catch(SQLException e)
        {
            e.printStackTrace();
            return -1;
        }
    }
}

Και στο Phonebook.java

package models;

import java.sql.*;
import javax.sql.DataSource;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.logging.*;
/**
 * Created by pcmagas on 6/6/2015.
 */
public class Test
{
    private Connection dbConnection=null;

    /**
     *Constructor Method that Initialises the connection
     */
    public Test() throws NamingException,SQLException
    {
      DataSource theSource= (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/test");
      this.dbConnection = theSource.getConnection();
    }

    /**
     * Inserts an entry to contacts Table
     * @param name
     * @param surname
     * @return -1 on failure else it returns the id
     */
    public int insertData(String name, String surname)
    {
        try
        {
            String sql="INSERT INTO contacts (name,surname) VALUES (?,?) RETURNING id";
            PreparedStatement p = dbConnection.prepareStatement(sql);
            p.setString(1,name);
            p.setString(2,surname);
            p.executeUpdate();

            ResultSet rs = p.getResultSet();

            if(rs.next())
            {
                return rs.getInt(1);
            }
            else
            {
                return -1;
            }

        }
        catch(NullPointerException r)
        {
            r.printStackTrace();
            if(dbConnection==null)
            {
                return -2;
            }
            else
            {
                return -3;
            }
        }
        catch(SQLException e)
        {
            e.printStackTrace();
            return -1;
        }
    }
}

Και παίρνω το εξής stacktrace:

Ιουν 11, 2015 10:35:11 ΜΜ org.apache.tomcat.jdbc.pool.ConnectionPool init
SEVERE: Unable to create initial connections of pool.
java.sql.SQLException: org.postgresql.Driver
	at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:254)
	at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:701)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:486)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144)
	at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116)
	at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103)
	at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:554)
	at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:242)
	at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:141)
	at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:842)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
	at org.apache.naming.SelectorContext.lookup(SelectorContext.java:156)
	at javax.naming.InitialContext.lookup(InitialContext.java:411)
	at models.Test.<init>(Test.java:20)
	at test.Phonebook.doPut(Phonebook.java:32)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:649)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	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.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:274)
	at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246)
	... 44 more

Ιουν 11, 2015 10:35:11 ΜΜ org.apache.naming.NamingContext lookup
WARNING: Unexpected exception resolving reference
java.sql.SQLException: org.postgresql.Driver
	at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:254)
	at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:701)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:486)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144)
	at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116)
	at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103)
	at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:554)
	at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:242)
	at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:141)
	at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:842)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
	at org.apache.naming.SelectorContext.lookup(SelectorContext.java:156)
	at javax.naming.InitialContext.lookup(InitialContext.java:411)
	at models.Test.<init>(Test.java:20)
	at test.Phonebook.doPut(Phonebook.java:32)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:649)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	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.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:274)
	at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246)
	... 44 more

javax.naming.NamingException: org.postgresql.Driver
	at org.apache.naming.NamingContext.lookup(NamingContext.java:859)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
	at org.apache.naming.SelectorContext.lookup(SelectorContext.java:156)
	at javax.naming.InitialContext.lookup(InitialContext.java:411)
	at models.Test.<init>(Test.java:20)
	at test.Phonebook.doPut(Phonebook.java:32)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:649)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	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.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)

Άρα είναι κάπου στο pool.
 Έχε3τε ιδέα τοι ΔΕΝ έχω σετάρε4ι σωστά σε αυτό;

Δημοσ.

 

Στο λεει καθαρα δε βρίσκει τη κλάσση org.postgresql.Driver

To έμα είναι ΓIATI μα είναι μέσα στο WEB-INF/lib. Να πω ότι δεν ήταν η ριμάδα το Maven κανονίζει να είναι.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...