Here's a snippet of my code, this method was with the described problem

public void insertVDNInfo(VDNInfo vdns) throws SQLException {

        Calendar c = Calendar.getInstance();

        Iterator<VDNInfo.VDN> it = vdns.getVdns().iterator();
        Connection c1 = null;
        Statement s1 = null;

        try {
            while (it.hasNext()) {
                c1 = getConnection();
                s1 = c1.createStatement();
                VDNInfo.VDN v = it.next();

                String query = "INSERT INTO list.vdn VALUES ("
                        + "'" + v.getName() + "'," + v.getExt() + "," + 
v.isVdnovr() + "," + v.getCor() + "," + v.getTn() + "," + v.getVecNum() + ",'" 
+ v.getMeas() + "',"
                        + v.isOrigAnnc() + "," + v.isEvntNotiAdj() + ",'" + 
sdfTimestamp.format(c.getTime()) + "')";

                s1.execute(query);
            }
        } finally {
            if (s1 != null) {
                s1.close();
            }
            s1 = null;
            if (c1 != null) {
                c1.close();
            }
            c1 = null;
        }
    }



Objects are created like

 private Connection getConnection() {
        DataSource ds = null;
        Connection c1 = null;
        try {
            ds = (DataSource) new 
InitialContext().lookup("java:/comp/env/jdbc/pgsql");
            c1 = ds.getConnection();
        } catch (NamingException ex) {
            log.error("", ex);
        } catch (SQLException ex) {
            log.error("", ex);
        }
        return c1;
    }



what i can see different from the example on 
http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html is 
that the SQLException is now thrown but catched locally in the method.


and here's my resource pool config


<Context antiJARLocking="true" path="/xcall3">
    <Resource 
    auth="Container" 
    driverClassName="org.postgresql.Driver" 
    maxActive="10" 
    maxIdle="3" 
    name="jdbc/pgsql" 
    password="xcall3" 
    type="javax.sql.DataSource" 
    url="jdbc:postgresql://localhost/xcall3" 
    username="xcall3"
    validationQuery="select version();" 
    maxWait = "5000"
    />


here's what logs the database 

2011-05-07 23:02:25 ARTLOG:  execute <unnamed>: INSERT INTO list.vdn VALUES 
('Atencion a Clientes',7022,false,1,1,33,'int',false,false,'2011-05-07 
23:02:25')
2011-05-07 23:02:25 ARTLOG:  unexpected EOF on client connection

until i lose all my connections.

here's what i got from the webapp log after that

2011-05-06 13:34:38,430 ERROR DAO:47 -
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, 
general error
        at 
org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:118)
        at 
org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
        at com.lesi.xcall3.core.DAO.getConnection(DAO.java:43)
        at com.lesi.xcall3.core.DAO.getSchedulerTasks(DAO.java:317)
        at com.lesi.xcall3.core.Scheduler.run(Scheduler.java:35)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.InterruptedException
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:485)
        at 
org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1104)
        at 
org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
        ... 5 more
Exception in thread "XCALL3-Scheduler" java.lang.NullPointerException
        at java.util.ArrayList.toArray(ArrayList.java:303)
        at com.lesi.xcall3.core.DAO.getSchedulerTasks(DAO.java:384)
        at com.lesi.xcall3.core.Scheduler.run(Scheduler.java:35)
        at java.lang.Thread.run(Thread.java:662)




On May 8, 2011, at 12:19 PM, Felix Schumacher wrote:

> Am Sonntag, den 08.05.2011, 11:42 -0300 schrieb alexis:
>> Hello all, is there any way to recover lost connectios on a pool?
>> 
>> Here's the issue, for an application, using postgresql jdbc (same happens 
>> with mysql as i tried), having query errors syntax or duplicated keys, 
>> actually no big deal, it throws an sqlexception upon que sql error, as this 
>> call executes ~150 queries to insert, on each query i lost the connection, 
>> so suddenly i have all my connections lost and my app useless.
>> 
>> How can i do from the catch clause of the SQLException to ask the pool to 
>> reconnect? Because today we are in debug stage but soon to be production and 
>> when this happens (we've corrected a lot of queries and situations but for 
>> sure some new one will arise) we need to restart the webapp.
> SQL Connections should not get lost when used properly. You have to
> close the connections and every resources you got out of that connection
> in case of a program error. Look for "jdbc try finally".
> 
> As a helper to find connections, you did not close properly you can
> configure your jdbc pool to show your abandoned connections. Another
> safety net are the validation queries. For further information look at
> http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html
> 
> Regards
> Felix
>> 
>> thanks in advance. 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to