You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by gg...@apache.org on 2002/09/12 15:38:05 UTC

cvs commit: jakarta-jetspeed/src/java/org/apache/jetspeed/services/psmlmanager/db DatabasePsmlManagerService.java

ggolden     2002/09/12 06:38:05

  Modified:    src/java/org/apache/jetspeed/services/psmlmanager/db
                        DatabasePsmlManagerService.java
  Log:
  The DatabasePsmlManagerService now takes an optional parameter:
  database
  which can name a torque pool to use for all database access in the service.
  If not specified, the default pool is used.
  (Also tuned the logging).
  
  The JetspeedGroup/Role/UserProfilePeer classes were updated to take
  DBConnection parameters - the service gets the connection from the proper
  pool and gives it to the peers to use.
  
  Revision  Changes    Path
  1.22      +180 -74   jakarta-jetspeed/src/java/org/apache/jetspeed/services/psmlmanager/db/DatabasePsmlManagerService.java
  
  Index: DatabasePsmlManagerService.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/psmlmanager/db/DatabasePsmlManagerService.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- DatabasePsmlManagerService.java	29 Jul 2002 02:25:27 -0000	1.21
  +++ DatabasePsmlManagerService.java	12 Sep 2002 13:38:05 -0000	1.22
  @@ -82,6 +82,11 @@
   import org.apache.turbine.services.resources.ResourceService;
   import org.apache.turbine.services.servlet.TurbineServlet;
   
  +// torque
  +import org.apache.torque.Torque;
  +import org.apache.torque.pool.DBConnection;
  +import org.apache.torque.TorqueException;
  +
   // jetspeed security
   import org.apache.jetspeed.om.security.JetspeedUser;
   import org.apache.jetspeed.om.security.JetspeedUserFactory;
  @@ -91,7 +96,6 @@
   import org.apache.jetspeed.om.security.JetspeedGroupFactory;
   import org.apache.jetspeed.services.security.JetspeedSecurityException;
   
  -
   //Servlet API
   import javax.servlet.ServletConfig;
    
  @@ -155,6 +159,8 @@
       private final static String REFRESH_RATE = "refresh-rate";
       private final static long DEFAULT_REFRESH_RATE = 60 * 60 * 8 * 1000; //8hrs
   
  +    private final static String POOL_NAME = "database";
  +
       /** the import/export consumer service **/
       private PsmlManagerService consumer = null;
   
  @@ -163,6 +169,9 @@
       String mapFile = null;
       /** the Castor mapping file name */
       private Mapping mapping = null;
  +    
  +    /** The pool name to use for database requests. */
  +    private String poolName = null;
   
       /**
        * This is the early initialization method called by the
  @@ -201,6 +210,9 @@
               refreshRate = 
                         serviceConf.getLong(REFRESH_RATE, DEFAULT_REFRESH_RATE);
   
  +            // get the name of the torque database pool to use
  +            poolName = serviceConf.getString(POOL_NAME);
  +
   //            new DatabaseInitializer(this, conf, serviceConf);
   
           // psml castor mapping file
  @@ -221,7 +233,7 @@
   
       /** Late init method from Turbine Service model */
       public void init() throws InitializationException
  -    {
  +    { 
           //Mark that we are done
           setInit(true);
   /*
  @@ -232,8 +244,7 @@
           }
           catch (Exception e)
           {
  -            Log.error("Error importing: " , e);
  -            e.printStackTrace();
  +            Log.warn("DatabasePsmlManagerService.init: exception while importing:" , e);
           }
     */
       }
  @@ -246,7 +257,8 @@
           if (mapFile != null)
           {
               File map = new File(mapFile);
  -            Log.debug("Loading psml mapping file "+mapFile);
  +            if (Log.getLogger().isDebugEnabled())
  +                Log.debug("Loading psml mapping file " + mapFile);
               if (map.exists() && map.isFile() && map.canRead())
               {
                   try
  @@ -316,10 +328,11 @@
               {
                   while (!done)
                   {
  -                    Log.info("Cache Refresher thread sleeping now!");
  +                    if (Log.getLogger().isDebugEnabled())
  +                        Log.debug("Cache Refresher thread sleeping now!");
                       sleep (refreshRate);
  -                    Log.info("Cache Refresher thread woke up!");
  -                    Log.info("Cache Refresher thread working now!");
  +                    if (Log.getLogger().isDebugEnabled())
  +                        Log.debug("Cache Refresher thread working now!");
   
                       try
                       {
  @@ -342,13 +355,14 @@
                       }
                       catch (Exception e)
                       {
  -                        Log.error("CacheRefresher: Error in cache refresher...", e);
  +                        Log.warn("DatabasePsmlManagerService.CacheRefresher: Error in cache refresher...", e);
                       }
                   }
               }
               catch (InterruptedException e)
               {
  -                Log.info("CacheRefresher: recieved interruption, aborting.");
  +                if (Log.getLogger().isDebugEnabled())
  +                    Log.debug("DatabasePsmlManagerService.CacheRefresher: recieved interruption, aborting.");
               }
           }     
       }
  @@ -401,7 +415,8 @@
                   keybuf.append('$').append("Language:").append(language);
               }
           }
  -        Log.info("Returning locator string: " + keybuf.toString());
  +        if (Log.getLogger().isDebugEnabled())
  +            Log.debug("DatabasePsmlManagerService: Returning locator string: " + keybuf.toString());
   
           return keybuf.toString();
       }
  @@ -411,7 +426,8 @@
           ProfileLocator locator = new BaseProfileLocator();
           String entity = null;
   
  -        Log.info("Creating locator for string: " + locstr);
  +        if (Log.getLogger().isDebugEnabled())
  +            Log.debug("DatabasePsmlManagerService: Creating locator for string: " + locstr);
   
           StringTokenizer dollarTokens = new StringTokenizer(locstr, "$");
           while (dollarTokens.hasMoreTokens())
  @@ -456,7 +472,8 @@
                   locator.setLanguage(entity);
               }
           }
  -        Log.info("Returning locator for string: " + locatorToString(locator));
  +        if (Log.getLogger().isDebugEnabled())
  +            Log.debug("DatabasePsmlManagerService: Returning locator for string: " + locatorToString(locator));
       
           return locator;
   
  @@ -465,21 +482,21 @@
       public PSMLDocument getDocument(String name)
       {
           // do nothing, deprecated
  -        Log.info("*** NOT SUPPORTED: GETDOC FROM DATABASE PSML MANAGER!!!");        
  +        Log.warn("*** NOT SUPPORTED: GETDOC FROM DATABASE PSML MANAGER!!!");        
           return null;
       }
   
       public boolean saveDocument(String fileOrUrl, PSMLDocument doc)
       {
           // do nothing, deprecated
  -        Log.info("*** NOT SUPPORTED: SAVING DOC FROM DATABASE PSML MANAGER!!!");
  +        Log.warn("*** NOT SUPPORTED: SAVING DOC FROM DATABASE PSML MANAGER!!!");
           return false;
       }
   
       public boolean saveDocument(PSMLDocument doc) 
       {
           // do nothing, will be deprecated 
  -        Log.info("*** NOT SUPPORTED: SAVING DOC FROM DATABASE PSML MANAGER!!!");        
  +        Log.warn("*** NOT SUPPORTED: SAVING DOC FROM DATABASE PSML MANAGER!!!");        
           return false;
       }
   
  @@ -499,7 +516,7 @@
           if (locator == null)
           {
               String message = "PSMLManager: Must specify a locator";
  -            Log.error(message);
  +            Log.warn("DatabasePsmlManagerService.getDocument: " + message);
               throw new IllegalArgumentException(message);
           }
   
  @@ -518,8 +535,9 @@
                   psmldoc = (PSMLDocument)psmlCache.get(locStr);
               }
            }
  -         //Log.info("DatabasePsmlManagerService.getDocument(): psmlcache: " +
  -         //  (inCache ? ((psmldoc == null) ? "null present" : "doc present") : "not in cache") + " : " + locStr);
  +//        if (Log.getLogger().isDebugEnabled())
  +//            Log.info("DatabasePsmlManagerService.getDocument(): psmlcache: " +
  +//                (inCache ? ((psmldoc == null) ? "null present" : "doc present") : "not in cache") + " : " + locStr);
    
   
           // if in the cache, doc or null, return what's in the cache
  @@ -534,8 +552,7 @@
           }
           catch (Exception e)
           {
  -            Log.error("Error occurred in Database PSML Manager: " + e);
  -            Log.error("Unable to get a psml document from the database.", e);
  +            Log.warn("DatabasePSMLManagerService.getDocument: exception:", e);
               throw new RuntimeException("Could not get profile from DB");
           }
       }
  @@ -570,7 +587,7 @@
           if (profile == null)
           {
               String message = "PSMLManager: Must specify a profile";
  -            Log.error(message);
  +            Log.warn("DatabasePsmlManagerService.createOrSaveDocument: " + message);
               throw new IllegalArgumentException(message);
           }
   
  @@ -579,6 +596,8 @@
           Group group = profile.getGroup();
           String tableName = null;
   
  +        DBConnection dbCon = getDbConnection();
  +
           try 
           {
               if (user != null)
  @@ -586,11 +605,11 @@
                   tableName = "JETSPEED_USER_PROFILE";
                   if (operation == INSERT) 
                   {
  -                    new JetspeedUserProfilePeer().insert(profile);
  +                    new JetspeedUserProfilePeer().insert(profile, dbCon);
                   }
                   else if (operation == UPDATE)
                   {
  -                    new JetspeedUserProfilePeer().update(profile);
  +                    new JetspeedUserProfilePeer().update(profile, dbCon);
                   }
               }
               else if (role != null)
  @@ -598,11 +617,11 @@
                   tableName = "JETSPEED_ROLE_PROFILE";
                   if (operation == INSERT) 
                   {
  -                    new JetspeedRoleProfilePeer().insert(profile);
  +                    new JetspeedRoleProfilePeer().insert(profile, dbCon);
                   }
                   else if (operation == UPDATE)
                   {
  -                    new JetspeedRoleProfilePeer().update(profile);
  +                    new JetspeedRoleProfilePeer().update(profile, dbCon);
                   }
               }  
               else if (group != null)
  @@ -610,19 +629,19 @@
                   tableName = "JETSPEED_GROUP_PROFILE";
                   if (operation == INSERT) 
                   {
  -                    new JetspeedGroupProfilePeer().insert(profile);
  +                    new JetspeedGroupProfilePeer().insert(profile, dbCon);
                   }
                   else if (operation == UPDATE)
                   {
  -                    new JetspeedGroupProfilePeer().update(profile);
  -
  +                    new JetspeedGroupProfilePeer().update(profile, dbCon);
                   }
               }   
               
               // insert successful
               synchronized (psmlCache)
               {
  -                Log.info("Putting profile in cache, in create document method, Locator string: " + locatorToString(profile));
  +                if (Log.getLogger().isDebugEnabled())
  +                    Log.debug("DatabasePsmlManagerService.createOrSaveDocument: caching document: profile: " + locatorToString(profile));
                   psmlCache.put(locatorToString(profile), profile.getDocument());
               }
   
  @@ -630,11 +649,15 @@
           }
           catch (Exception e) // insert failed
           {
  -            Log.error("Error saving profile:"+profile);
  -            Log.error("Error occurred in Database PSML Manager: " , e);
  -            Log.error("Insert in table " + tableName + " failed");
  +            Log.warn("DatabasePsmlManagerService.createOrSaveDocument: profile: "
  +                        + profile + " tableName: " + tableName, e);
               throw new RuntimeException("Could not create new profile in DB");
           }
  +        finally
  +        {
  +            // make sure to release the database connection
  +            releaseDbConnection(dbCon);
  +        }
   
       }
   
  @@ -648,7 +671,7 @@
           if (locator == null)
           {
               String message = "PSMLManager: Must specify a locator";
  -            Log.error(message);
  +            Log.warn("DatabasePsmlManagerService.removeDocument: " + message);
               throw new IllegalArgumentException(message);
           }
   
  @@ -657,21 +680,24 @@
           Group group = locator.getGroup();
           String tableName = null;
   
  +        // get a database connection
  +        DBConnection dbCon = getDbConnection();
  +
           try 
           {  
               if (user != null)
               {   
  -                new JetspeedUserProfilePeer().delete(locator);
  +                new JetspeedUserProfilePeer().delete(locator, dbCon);
                   tableName = "JETSPEED_USER_PROFILE";
               }
               else if (role != null)
               {  
  -                new JetspeedRoleProfilePeer().delete(locator);
  +                new JetspeedRoleProfilePeer().delete(locator, dbCon);
                   tableName = "JETSPEED_ROLE_PROFILE";
               } 
               else if (group != null)
               {
  -                new JetspeedGroupProfilePeer().delete(locator);
  +                new JetspeedGroupProfilePeer().delete(locator, dbCon);
                   tableName = "JETSPEED_GROUP_PROFILE";
               }  
               
  @@ -683,10 +709,15 @@
           }
           catch (Exception e) // insert failed
           {
  -            Log.error("Error occurred in Database PSML Manager: " , e);
  -            Log.error("Insert in table " + tableName + " failed");
  +            Log.warn("DatabasePsmlManagerService.removeDocument: profile: "
  +                        + locatorToString(locator) + " tableName: " + tableName, e);
               throw new RuntimeException("Could not delete profile for given locator from DB");
           }
  +        finally
  +        {
  +            // make sure to release the database connection
  +            releaseDbConnection(dbCon);
  +        }
       }
   
       /** 
  @@ -701,10 +732,12 @@
           if (locator == null)
           {
               String message = "PSMLManager: Must specify a locator";
  -            Log.error(message);
  +            Log.warn("DatabasePsmlManagerService.query: " + message);
               throw new IllegalArgumentException(message);
           }
   
  +        DBConnection dbCon = getDbConnection();
  +
           try 
           {  
               Vector userData = null;
  @@ -718,7 +751,7 @@
               switch (queryMode)
               {
                   case QueryLocator.QUERY_USER:    
  -                    userData = new JetspeedUserProfilePeer().selectOrdered(locator);
  +                    userData = new JetspeedUserProfilePeer().selectOrdered(locator, dbCon);
                       if (userData != null)
                       {
                           list = getProfiles(userData);
  @@ -726,7 +759,7 @@
                       break;
   
                   case QueryLocator.QUERY_GROUP:
  -                    groupData = new JetspeedGroupProfilePeer().selectOrdered(locator);
  +                    groupData = new JetspeedGroupProfilePeer().selectOrdered(locator, dbCon);
                       if (groupData != null)
                       {
                           list = getProfiles(groupData);
  @@ -734,7 +767,7 @@
                       break;
    
                   case QueryLocator.QUERY_ROLE:    
  -                    roleData = new JetspeedRoleProfilePeer().selectOrdered(locator);
  +                    roleData = new JetspeedRoleProfilePeer().selectOrdered(locator, dbCon);
                       if (roleData != null)
                       {
                           list = getProfiles(roleData);
  @@ -743,19 +776,19 @@
    
   
                   default:  //QUERY_ALL
  -                    userData = new JetspeedUserProfilePeer().selectOrdered(locator);
  +                    userData = new JetspeedUserProfilePeer().selectOrdered(locator, dbCon);
                       if (userData != null)
                       {
                           list.addAll(getProfiles(userData));
                       }
   
  -                    groupData = new JetspeedGroupProfilePeer().selectOrdered(locator);
  +                    groupData = new JetspeedGroupProfilePeer().selectOrdered(locator, dbCon);
                       if (groupData != null)
                       {
                           list.addAll(getProfiles(groupData));
                       }
   
  -                    roleData = new JetspeedRoleProfilePeer().selectOrdered(locator);
  +                    roleData = new JetspeedRoleProfilePeer().selectOrdered(locator, dbCon);
                       if (roleData != null)
                       {
                           list.addAll(getProfiles(roleData));
  @@ -768,8 +801,12 @@
           }
           catch (Exception e)
           {
  -            Log.error("Error occurred in Database PSML Manager: " , e);
  -            e.printStackTrace();
  +            Log.warn("DatabasePsmlManagerService.query: exception" , e);
  +        }
  +        finally
  +        {
  +            // make sure to release the databased connection
  +            releaseDbConnection(dbCon);
           }
   
           return new ArrayList().iterator();  // return empty non-null iterator
  @@ -841,7 +878,7 @@
           if (locators == null)
           {
               String message = "PSMLManager: Must specify a list of locators";
  -            Log.error(message);
  +            Log.warn("DatabasePsmlManagerService.getDocument: " + message);
               throw new IllegalArgumentException(message);
           }
   
  @@ -872,7 +909,7 @@
           if (locator == null)
           {
               String message = "PSMLManager: Must specify a locator";
  -            Log.error(message);
  +            Log.warn("DatabasePsmlManagerService.refresh: " + message);
               throw new IllegalArgumentException(message);
           }
   
  @@ -885,12 +922,14 @@
           PSMLDocument psmldoc = null;
           String page = null;
   
  +        DBConnection dbCon = getDbConnection();
  +
           try
           {
               if (user != null)
               {
                   tableName = "JETSPEED_USER_PROFILE";
  -                records = new JetspeedUserProfilePeer().select(locator);
  +                records = new JetspeedUserProfilePeer().select(locator, dbCon);
                   Iterator iterator = records.iterator(); 
                   while (iterator.hasNext())
                   {
  @@ -903,7 +942,7 @@
               else if (role != null)
               {  
                   tableName = "JETSPEED_ROLE_PROFILE";
  -                records = new JetspeedRoleProfilePeer().select(locator);
  +                records = new JetspeedRoleProfilePeer().select(locator, dbCon);
                   Iterator iterator = records.iterator(); 
                   while (iterator.hasNext())
                   {
  @@ -916,7 +955,7 @@
               else if (group != null)
               {
                   tableName = "JETSPEED_GROUP_PROFILE";
  -                records = new JetspeedGroupProfilePeer().select(locator);
  +                records = new JetspeedGroupProfilePeer().select(locator, dbCon);
                   Iterator iterator = records.iterator(); 
                   while (iterator.hasNext())
                   {
  @@ -932,7 +971,8 @@
                   psmldoc = getPSMLDocument(page, portlets);
                   synchronized (psmlCache)
                   {
  -                Log.info("Putting profile in cache, in refresh method, Locator string: " + locatorToString(locator));
  +                    if (Log.getLogger().isDebugEnabled())
  +                        Log.debug("DatabasePsmlManagerService.refresh: caching document: profile: " + locatorToString(locator));
                       psmlCache.put(locatorToString(locator), psmldoc);
                   }
                   return psmldoc;
  @@ -941,18 +981,25 @@
               {
                   // cache the fact that there is NO document matching this profile
                   psmlCache.put(locatorToString(locator), null);
  -                Log.info("Putting null in cache, in refresh method, Locator string: " + locatorToString(locator));
  +                if (Log.getLogger().isDebugEnabled())
  +                    Log.debug("DatabasePsmlManagerService.refresh: caching 'document not found': profile: " + locatorToString(locator));
               }
           }
           catch (Exception e)
           {
  -            Log.error("Error occurred in Database PSML Manager: " + e);
  -            Log.error("Select from table " + tableName + " failed");
  -            Log.error("Unable to get a psml document from the database.", e);
  -            Log.error("Refresh failed: " + locatorToString(locator));
  +            Log.warn("DatabasePsmlManagerService.refresh: profile: " + locatorToString(locator)
  +                + " tableName: " + tableName, e);
               throw new RuntimeException("Could not refresh profile from DB");
           }
  -        Log.info("DatabasePsmlManagerService: Returning null document");
  +        finally
  +        {
  +            // make sure to release the database connection
  +            releaseDbConnection(dbCon);
  +        }
  +
  +        if (Log.getLogger().isDebugEnabled())
  +            Log.debug("DatabasePsmlManagerService.refresh: no document found: profile: "
  +                    + locatorToString(locator));
           return null;
       }
   
  @@ -962,19 +1009,25 @@
        */
       public void removeUserDocuments(JetspeedUser user)
       {
  +        DBConnection dbCon = getDbConnection();
  +
           try 
           {  
               if (user != null)
               {   
  -                new JetspeedUserProfilePeer().delete(user);
  -            }   
  +                new JetspeedUserProfilePeer().delete(user, dbCon);
  +            }
           }
           catch (Exception e) // delete failed
           {
  -            Log.error("Error occurred in Database PSML Manager: " , e);
  -            Log.error("Delete from table JETSPEED_USER_PROFILE failed");
  +            Log.warn("DatabasePsmlManagerService.removeUserDocuments: exception:", e);
               throw new RuntimeException("Could not delete documents for given user from DB");
           }
  +        finally
  +        {
  +            // make sure to release the database connection
  +            releaseDbConnection(dbCon);
  +        }
   
       }
   
  @@ -984,19 +1037,25 @@
        */
       public void removeRoleDocuments(Role role)
       {
  +        DBConnection dbCon = getDbConnection();
  +
           try
           {
               if (role != null)
               {
  -                new JetspeedRoleProfilePeer().delete(role);
  +                new JetspeedRoleProfilePeer().delete(role, dbCon);
               } 
           }
           catch (Exception e) // delete failed
           {
  -            Log.error("Error occurred in Database PSML Manager: " , e);
  -            Log.error("Delete from table JETSPEED_ROLE_PROFILE failed");
  +            Log.warn("DatabasePsmlManagerService.removeRoleDocuments: exception:", e);
               throw new RuntimeException("Could not delete documents for given role from DB");
           }
  +        finally
  +        {
  +            // make sure to release the database connection
  +            releaseDbConnection(dbCon);
  +        }
       }
   
       /** Removes all documents for a given group.
  @@ -1005,19 +1064,25 @@
        */
       public void removeGroupDocuments(Group group)
       {
  +        DBConnection dbCon = getDbConnection();
  +
           try
           {
               if (group != null)
               {
  -                new JetspeedGroupProfilePeer().delete(group);
  +                new JetspeedGroupProfilePeer().delete(group, dbCon);
               }  
           }
           catch (Exception e) // delete failed
           {
  -            Log.error("Error occurred in Database PSML Manager: " + e);
  -            Log.error("Delete from table JETSPEED_GROUP_PROFILE failed");
  +            Log.warn("DatabasePsmlManagerService.removeGroupDocuments: exception:", e);
               throw new RuntimeException("Could not delete documents for given group from DB");
           }
  +        finally
  +        {
  +            // make sure to release the database connection
  +            releaseDbConnection(dbCon);
  +        }
       }
   
       /** Query for a collection of profiles given a profile locator criteria.
  @@ -1053,15 +1118,15 @@
                       }
                       catch (Exception e)
                       {
  -                        Log.error("Failed to export profile to File System: " + profile, ex);
  +                        Log.warn("DatabasePsmlManagerService.export: profile: "
  +                                + profile, ex);
                       }
                   }
               }
           }
           catch(Exception e)
           {
  -            e.printStackTrace();
  -            Log.error("Failed to export profiles to File System: " , e );
  +            Log.warn("DatabasePsmlManagerService.export: exception:", e);
   
           }
           finally
  @@ -1171,4 +1236,45 @@
       }
   
   
  +    /**
  +    * Get a database connection to the default or specifed torque database pool
  +    */
  +    private DBConnection getDbConnection()
  +    {
  +        try
  +        {
  +            // use the default pool if not specified
  +            if (poolName == null)
  +            {
  +                return Torque.getConnection();
  +            }
  +            
  +            // otherwise use the specified pool name
  +            else
  +            {
  +                return Torque.getConnection(poolName);
  +            }
  +        }
  +        catch (TorqueException e)
  +        {
  +            Log.warn("DatabasePsmlManagerService.getDbConnection: exception: " + e);
  +            return null;
  +        }
  +    }
  +
  +    /**
  +    * Release a previously gotten database connection back to the torque pool
  +    */
  +    private void releaseDbConnection(DBConnection connection)
  +    {
  +        try
  +        {
  +            Torque.releaseConnection(connection);
  +        }
  +        catch (TorqueException e)
  +        {
  +            Log.warn("DatabasePsmlManagerService.releaseDbConnection: exception: " + e);
  +        }
  +    }
   }
  +
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>