Am Sonntag, den 08.05.2011, 12:29 -0300 schrieb alexis:
> Here's a snippet of my code, this method was with the described problem
> 
> 
> public void insertVDNInfo(VDNInfo vdns) throws SQLException {
Why do you want to throw a SQLException?

> 
>         Calendar c = Calendar.getInstance();
> 
>         Iterator<VDNInfo.VDN> it = vdns.getVdns().iterator();
Seems like you can use
 for (VDNInfo.VND v: vdns.getVdns()) {
 ...
 }
instead of x=y.iterator() combined with while(x.hasNext())
{ v=x.next(); }

>         Connection c1 = null;
>         Statement s1 = null;
> 
>         try {
>             while (it.hasNext()) {
>                 c1 = getConnection();
Your getConnection method can return null, so you should guard against
it.

>                 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()) + "')";
You should read about SQL-injections and Prepared Statements. You can
declare the prepared statement outside of your loop and set the values
inside the loop.
> 
>                 s1.execute(query);
>             }
>         } finally {
>             if (s1 != null) {
>                 s1.close();
>             }
if s1.close() throws an error you will not close c1, so you have to
catch that exception:
    if (s1!=null) { try { s1.close } catch (SQLException e) { // Ignore
or event better log
    };
>             s1 = null;
>             if (c1 != null) {
>                 c1.close();
catch the possible Exception
  if (c1!=null) { try {c1.close();} catch (SQLException e) { // Ignore
or log
 };

>             }
>             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);
Error messages should be a bit more meaningful than "".
>         } catch (SQLException ex) {
>             log.error("", ex);
>         }
>         return c1;
You will return null, if you have catched an Exception. Is that what you
want?
>     }
> 
> 
> 
> 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.
That difference can be essential, as explained above.

> 
> 
> 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();" 
I think you should not place the ";" at the end of the statement.

>     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)
> 
Do you get any abandoned log entries, if you add the configuration
  ...
  removeAbandoned="true"
  removeAbandonedTimeout="60"

  logAbandoned="true"
  ...
to your resource?

Bye
 Felix
> 
> 
> 
> 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
> 



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

Reply via email to