Re: Help Needed with Connection Pooling for Java Swing Based - Mailing list pgsql-jdbc

From Scot P. Floess
Subject Re: Help Needed with Connection Pooling for Java Swing Based
Date
Msg-id 3E822C1A.2030205@mindspring.com
Whole thread Raw
In response to Re: Help Needed with Connection Pooling for Java Swing Based  (Derek S <cube-soft@rogers.com>)
Responses Re: Help Needed with Connection Pooling for Java Swing Based
List pgsql-jdbc
Derek:

I see what you mean.

Regarding needing to call System.exit...my guess is the Swing/AWT
threads are user threads (as opposed to daemon) and that is why one must
call System.exit()...

Scot

Derek S wrote:

> Pardon my inaccuracy.  I should have said "Realizing" instead of
> instantiating.  "Realizing" is the name that the AWT developers gave
> to the process  (which is encapsulated in the AWT's component
> implementation) of actually allocating the system resources needed to
> display the GUI widgets.  Typically, it happens when you call pack or
> setVisible(true) on a Window, Frame or Dialog. When a component is
> realized, it checks to see if the dispatcher thread is running, and if
> not, starts it.  Depending on what you're using, it may also start
> other threads to support features like the Pluggable Look and Feel and
> so on.  As far as I know, it's only possible to have one AWT Event
> Dispatch thread.
>
> Bringing us back to the original topic, Once the AWT threads are
> running, it's basically hit-or-miss whether the app will stop unless
> System.exit is explicitly called or you set the default close
> operation on your frame to EXIT_ON_CLOSE (which just calls System.exit
> for you), so this has nothing to do with JDBC or PostgreSQL's driver.
>
> Scot P. Floess wrote:
>
>> Derek:
>>
>> Are you sure instantiating a Swing component launches a new thread?
>> Simply instantiating 2 JButtons will launch 2 threads?  I don't think
>> that is the case.
>>
>> Derek S wrote:
>>
>>> Instantiating any Swing component does in fact start a new thread -
>>> the AWT Event Dispatch thread.  My experience with it has been that
>>> this thread quite often doesn't terminate the way you might expect
>>> when the main method ends.  This is a well known issue that Swing
>>> and AWT programmers simply have to deal with and has absolutely
>>> nothing to do with JDBC.  Generally speaking, all Swing/AWT based
>>> applications call System.exit when they are finished doing whatever
>>> it is they do in order to ensure that the AWT Event Dispatch thread
>>> shuts down properly.
>>>
>>> Barry Lind wrote:
>>>
>>>> I just ran your test case and everything seems to be working
>>>> correctly as far as I can tell.  The program creates one and only
>>>> one connection to the database.  I don't see multiple connections
>>>> created as you are reporting.
>>>>
>>>> I don't know anything about swing, but it is clear that the code
>>>> for swing you have below isn't correct.  Because with this swing
>>>> call the program doesn't exit.  It seems the swing code is starting
>>>> some other threads that are running and thus the main program
>>>> doesn't exit until those threads stop running (and I don't know
>>>> what swing calls are necessary to stop the swing threads from
>>>> running).
>>>>
>>>> So with the swing call in place I have to ctrl-C to stop the app
>>>> from running, but from the jdbc side of things everything seems to
>>>> be working correctly.
>>>>
>>>> Perhaps I don't understand the problem you are seeing?
>>>>
>>>> thanks,
>>>> --Barry
>>>>
>>>>
>>>> Shanmugasundaram Doraisamy wrote:
>>>>
>>>>> Dear group,
>>>>>
>>>>> We are having some problems when using JDBC Connection Pool using
>>>>> Postgrsql Jdbc3PoolingDataSource.
>>>>>
>>>>> The Pool behaves fine if there is no Swing Component in the Program.
>>>>> If there is a swing Component ,then the connection seems to be not
>>>>> returning to the pool and calling for an additional instance of
>>>>> the class leeds to the creation of fresh Connection objects ,at
>>>>> times it even exceeds the maximum number allowed in the pool.
>>>>> If we go for System.exit(0);(Killing) then only the Connection is
>>>>> returned .
>>>>>
>>>>> But if we comment the swing component line (here in the attached
>>>>> Program a JOptionPane is Used) then the pool behaves fine.
>>>>>
>>>>>
>>>>> Herewith Iam attaching a Program which is behaving as detailed.
>>>>>
>>>>> Any Help is Welcome.
>>>>>
>>>>> ##################################################################
>>>>>
>>>>>
>>>>> ##################################################################
>>>>>
>>>>> /*
>>>>>  * ConPool.java
>>>>>  *
>>>>>  * Created on 26 March 2003, 11:54
>>>>>  */
>>>>>
>>>>> /**
>>>>>  *
>>>>>  * @author  naks from vpsd,Erode
>>>>>  *   */
>>>>> import org.postgresql.jdbc3.*;
>>>>> import java.sql.*;
>>>>>
>>>>> public class ConPool {
>>>>>        Jdbc3PoolingDataSource source = null;
>>>>>     private Connection conn = null;
>>>>>        /** Creates a new instance of ConPool */
>>>>>     public ConPool() {
>>>>>            }
>>>>>        /** Setting the Pool which intializes the Pool to 2. */
>>>>>     public void setPool() {
>>>>>         // DataSource initialization
>>>>>         System.out.println("setPool()");
>>>>>         try {
>>>>>             System.out.println("setting pool");
>>>>>             // constructs a pool only when source is not assigned.
>>>>>             // this will prevent problems if the same pool is set
>>>>> more than
>>>>>             // one time
>>>>>             if (source == null) {
>>>>>                 source = new Jdbc3PoolingDataSource();
>>>>>                 // DataSource configuration.
>>>>>                       source.setServerName("192.168.0.51");
>>>>>         source.setDatabaseName("kec_test_pool");
>>>>>         source.setUser("venbro");
>>>>>         source.setPassword("venbro");
>>>>>         source.setMaxConnections(2);
>>>>>                                } else {
>>>>>                 System.out.println("pool is set");
>>>>>                 return;
>>>>>             }
>>>>>         } catch (Exception loException) {
>>>>>             // logger.logToFile(loException);
>>>>>             loException.printStackTrace();
>>>>>         }
>>>>>
>>>>>     } //End of setPool method
>>>>>           /**
>>>>>      * Method inserts data to a table "test" which is like
>>>>>      * create table test (param1 varchar(2),param2 varchar(2)) ;
>>>>>          */
>>>>>      public int insertDatas(){
>>>>>            int count=-1;
>>>>>              try{
>>>>>                conn=source.getConnection();
>>>>>
>>>>>       PreparedStatement st = conn.prepareStatement("INSERT INTO
>>>>> test values('P1','P2')");
>>>>>            count = st.executeUpdate();
>>>>>
>>>>>       st.close();
>>>>>            conn.commit();
>>>>>       conn.close();
>>>>>          }
>>>>>     catch (SQLException ex) {
>>>>>        count=0;
>>>>>       ex.printStackTrace();
>>>>>     }
>>>>>        return count;
>>>>>     }//End of Insert Method
>>>>>               public static void main(String args[]){
>>>>>                       ConPool cp=new ConPool();
>>>>>         cp. setPool();
>>>>>         int sucess_flag=cp.insertDatas();
>>>>>         System.out.println("Sucess"+sucess_flag);
>>>>>                /**
>>>>>           * Upto this level the Connection pooling is working fine .
>>>>>           * But if this Swing Component is added then it creates
>>>>> new Connection
>>>>>           * which is even more than the intial connection of the
>>>>> pool..
>>>>>          *  We have to kill the application (System.exit(0))to
>>>>> remove the Connection
>>>>>          ** But on commenting line :105 "Swingline " the Pool is
>>>>> working fine..
>>>>>                  */
>>>>>
>>>>> javax.swing.JOptionPane.showMessageDialog(null,"VENBRO-ERODE","MESSAGE",1);//
>>>>> Swing line 105
>>>>>                 }
>>>>>
>>>>> }//End of the class
>>>>> ##########################################################################################
>>>>>
>>>>> ###########################################################################################
>>>>>
>>>>>
>>>>> ---------------------------(end of
>>>>> broadcast)---------------------------
>>>>> TIP 3: if posting/reading through Usenet, please send an appropriate
>>>>> subscribe-nomail command to majordomo@postgresql.org so that your
>>>>> message can get through to the mailing list cleanly
>>>>>
>>>>
>>>>
>>>> ---------------------------(end of
>>>> broadcast)---------------------------
>>>> TIP 5: Have you checked our extensive FAQ?
>>>>
>>>> http://www.postgresql.org/docs/faqs/FAQ.html
>>>>
>>>
>>>
>>> ---------------------------(end of
>>> broadcast)---------------------------
>>> TIP 3: if posting/reading through Usenet, please send an appropriate
>>> subscribe-nomail command to majordomo@postgresql.org so that your
>>> message can get through to the mailing list cleanly
>>>
>>
>
>

--
Scot P. Floess - 27 Lake Royale - Louisburg, NC  27549 - 252-478-8087

Open Source Home Page
--------------------------------------
http://javapim.sourceforge.net
http://jplate.sourceforge.net
http://jwaretechniques.sourceforge.net

Open Source Project Host
-----------------------------------------------
http://sourceforge.net/projects/javapim
http://sourceforge.net/projects/jplate
http://sourceforge.net/projects/jwaretechniques


pgsql-jdbc by date:

Previous
From: Derek S
Date:
Subject: Re: Help Needed with Connection Pooling for Java Swing Based
Next
From: "Marcus Andree S. Magalhaes"
Date:
Subject: Re: : URGENT: problem installing Ant