where is _isIBMi declaration?..
how is _isIBMi used to configure ConnectionPool?
Martin
______________________________________________ 
Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité
 
Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger 
sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung 
oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht dient lediglich dem 
Austausch von Informationen und entfaltet keine rechtliche Bindungswirkung. 
Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir keine Haftung 
fuer den Inhalt uebernehmen.
Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le 
destinataire prévu, nous te demandons avec bonté que pour satisfaire informez 
l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est 
interdite. Ce message sert à l'information seulement et n'aura pas n'importe 
quel effet légalement obligatoire. Étant donné que les email peuvent facilement 
être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité 
pour le contenu fourni.




> Date: Sun, 21 Jun 2009 13:25:25 -0600
> From: p...@valadd.com
> To: users@tomcat.apache.org
> Subject: Re: Pointers on diagnosing session and thread hangs
> 
> "For curiosity's sake, why did you roll your own DB pooling, rather than 
> letting Tomcat manage it?"
> 
> That is a good question and one I am not sure I can easily answer since 
> the base code I am working with was originally written by someone else 6 
> years ago. I am not sure if DB pooling was implemented back then, but we 
> have a particular platform where we need to call some system routines 
> before making the connection and so this driver is just small piece of 
> code handles that system call and all the DB connecting and pooling.  I 
> am not sure why the pooling was implemented in this code since my 
> understanding is that the JDBC driver usually handles this.
> 
> We then added some additional support for other DB's into this code so 
> that the web application can stay completely agnostic to the database it 
> is connecting to.  We specify different JDBC connection information in 
> the configuration file that the DB Manager code references.  So I guess 
> the bottom line is that this code exists to keep the webapp independent 
> of the database but why pooling was implemented in the driver is 
> something that we are now looking into since it appears to be the point 
> of pain.
> 
> FWIW the code from the relevant method is:
> 
>     public DataSource setupDataSource(String userName, String password,
>             String connectURI, String roleID, boolean doAdd) {
>         //
>         // First, we'll need a ObjectPool that serves as the
>         // actual pool of connections.
>         //
>         // We'll use a GenericObjectPool instance, although
>         // any ObjectPool implementation will suffice.
>         //
>         if(_debug)
>             System.out.println("Setting up datasource with Role: 
> "+roleID);  //Specific to our implementation
>            
>         ObjectPool connectionPool = new GenericObjectPool(null, maxActive,
>                 whenExhaustedAction, maxWait, maxIdle, minIdle,
>                 testOnBorrow, testOnReturn, timeBetweenEvictionRunsMillis,
>                 numTestsPerEvictionRun, minEvictableIdleTimeMillis, 
> testWhileIdle);
>         //
>         // Next, we'll create a ConnectionFactory that the
>         // pool will use to create Connections.
>         // We'll use the DriverManagerConnectionFactory,
>         // using the connect string passed in the command line
>         // arguments.
>         //
>         ConnectionFactory connectionFactory = new 
> DriverManagerConnectionFactory(
>                 connectURI, userName, password);
>         //
>         // Now we'll create the PoolableConnectionFactory, which wraps
>         // the "real" Connections created by the ConnectionFactory with
>         // the classes that implement the pooling functionality.
>         //
>         PoolableConnectionFactory pool = null;
>        
>        // Code to handle member overrides specific to IBM i
> 
>             if(_debug)
>                 System.out.println("Creating connection pool using 
> PoolableConnectionFactory");
>             pool = new PoolableConnectionFactory(
>                     connectionFactory, connectionPool, null, null, 
> false, true) {
>                 /*
>                  * (non-Javadoc)
>                  *
>                  * @see 
> org.apache.commons.dbcp.PoolableConnectionFactory#makeObject()
>                  */
> 
>                 public synchronized Object makeObject() throws Exception {
>                 // This line of code is BLOCKED randomly
>                     Connection conn = (Connection) super.makeObject();
>                // Code to handle member overrides specific to IBM i
>                     if(_isIBMi.equals("Y"))
>                         if(_debug)
>                             System.out.println("Preparing member 
> connection");
>                    //Calls the override routines on the IBM i system
>                     databaseManager.prepareMemberConnection(conn);
>                    
>                     return conn;
>                 }
>             };
>            
>         }
>         else
>         {
>             if(_debug)
>                 System.out.println("Creating connection pool using 
> PoolableConnectionFactory");
>          pool = new PoolableConnectionFactory(
>                 connectionFactory, connectionPool, null, null, false, true);
>         }
>         //
>         // Finally, we create the PoolingDriver itself,
>         // passing in the object pool we created.
>         //
>         if(_debug)
>             System.out.println("Creating PoolingDataSource");
>         PoolingDataSource dataSource = new 
> PoolingDataSource(connectionPool);
>        
>         pool.setDefaultAutoCommit(defaultAutoCommit);
>         pool.setDefaultCatalog(defaultCatalog);
>         pool.setDefaultReadOnly(defaultReadOnly);
>         //pool.setDefaultTransactionIsolation(defaultTransactionIsolation);
>         if (validationQuery != null)
>             pool.setValidationQuery(validationQuery);
> 
>         dataSource
>                 
> .setAccessToUnderlyingConnectionAllowed(accessToUnderlyingConnectionAllowed);
> 
>         try {
>             for (int i = 0; i < initialSize; i++) {
>                 if(_debug)
>                     System.out.println("Adding object to pool up to 
> initial size");
>                 connectionPool.addObject();
>             }
>         }
>         catch (Exception e) {
>             e.printStackTrace();
>         }
>         if (doAdd == true)
>         {
>             if(_debug)
>                 System.out.println("Adding object to pool");
>             _pools.put(roleID, connectionPool);
>             _dataSources.put(roleID, dataSource);
>         }
>         return dataSource;
>     }
> 
> I will need to find out why the code is structured this way, 
> particularly the makeObject calls.  And, again, the thread dump has been 
> very helpful in sorting this all out. 
> 
> Pete
> 
> 
> Caldarale, Charles R wrote:
> >> From: Pete Helgren [mailto:p...@valadd.com]
> >> Subject: Re: Pointers on diagnosing session and thread hangs
> >>
> >> I am looking at the DB Manager code I wrote to see if I am doing
> >> something wrong in implementing the pooling.
> >>     
> >
> > For curiosity's sake, why did you roll your own DB pooling, rather than 
> > letting Tomcat manage it?
> >
> >  - Chuck
> >
> >
> > THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY 
> > MATERIAL and is thus for use only by the intended recipient. If you 
> > received this in error, please contact the sender and delete the e-mail and 
> > its attachments from all computers.
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> > For additional commands, e-mail: users-h...@tomcat.apache.org
> >
> >
> >   

_________________________________________________________________
Microsoft brings you a new way to search the web.  Try  Bing™ now
http://www.bing.com?form=MFEHPG&publ=WLHMTAG&crea=TEXT_MFEHPG_Core_tagline_try 
bing_1x1

Reply via email to