jmcnally    01/12/30 09:31:47

  Modified:    proposals/jdbc2pool/org/apache/torque/jdbc2pool Tag:
                        JDBC2POOL_BRANCH TorqueDataSource.java
  Log:
  make sure to get the pool after adding it to the map of pools.
  
  improved the thread-safety when creating a new pool
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1   +14 -6     
jakarta-turbine-torque/proposals/jdbc2pool/org/apache/torque/jdbc2pool/TorqueDataSource.java
  
  Index: TorqueDataSource.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-torque/proposals/jdbc2pool/org/apache/torque/jdbc2pool/TorqueDataSource.java,v
  retrieving revision 1.1
  retrieving revision 1.1.2.1
  diff -u -r1.1 -r1.1.2.1
  --- TorqueDataSource.java     15 Aug 2001 17:38:54 -0000      1.1
  +++ TorqueDataSource.java     30 Dec 2001 17:31:47 -0000      1.1.2.1
  @@ -78,7 +78,7 @@
    * Torque's default connection pool DataSource
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>John D. McNally</a>
  - * @version $Id: TorqueDataSource.java,v 1.1 2001/08/15 17:38:54 jmcnally Exp $
  + * @version $Id: TorqueDataSource.java,v 1.1.2.1 2001/12/30 17:31:47 jmcnally Exp $
    */
   public class TorqueDataSource
       implements DataSource, Referenceable, Serializable, ObjectFactory
  @@ -168,24 +168,32 @@
               try
               {
                   registerPool(username, password);
  +                pool = (ConnectionPool)pools.get(key);
               }
               catch (Exception e)
               {
  -                //ignore for now, should wrap in SQLException, !FIXME!
  +                throw new SQLException(e.getMessage());
               }
           }
           
           return pool.getConnection(username, password).getConnection();
       }
   
  -    private void registerPool(String username, String password)
  +    synchronized private void registerPool(String username, String password)
            throws javax.naming.NamingException
       {
  +        String key = getDataSourceName() + username;
  +        if ( !pools.containsKey(key) ) 
  +        {
               Context ctx = new InitialContext();
  -            ConnectionPoolDataSource cpds = 
  -                (ConnectionPoolDataSource)ctx.lookup(getDataSourceName());
  +            ConnectionPoolDataSource cpds = (ConnectionPoolDataSource)
  +                ctx.lookup("jdbc/" + getDataSourceName());
               ConnectionPool pool = new ConnectionPool(cpds, username, password);
  -            pools.put(username, pool);
  +            // avoid ConcurrentModificationException
  +            Map newPools = new HashMap(pools);
  +            newPools.put(key, pool);
  +            pools = newPools;   
  +        }        
       }
       
       /**
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to