jford       2004/08/28 12:05:36

  Modified:    src/java/org/apache/jetspeed/services/psmlmanager/db
                        DatabasePsmlManagerService.java
  Log:
  Added support for messaging
  
  Revision  Changes    Path
  1.36      +161 -4    
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.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- DatabasePsmlManagerService.java   23 Feb 2004 03:32:19 -0000      1.35
  +++ DatabasePsmlManagerService.java   28 Aug 2004 19:05:36 -0000      1.36
  @@ -20,10 +20,12 @@
   
   // PSML Manager Service interface
   import org.apache.jetspeed.services.psmlmanager.PsmlManagerService;
  +import org.apache.jetspeed.services.psmlmanager.PsmlMessage;
   
   
   // Jetspeed Security service
   import org.apache.jetspeed.services.JetspeedSecurity;
  +import org.apache.jetspeed.services.Messenger;
   
   // Profile and ProfileLocator interface
   import org.apache.jetspeed.om.profile.Profile;
  @@ -32,6 +34,7 @@
   import org.apache.jetspeed.services.Profiler;
   import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
   import org.apache.jetspeed.services.logging.JetspeedLogger;
  +import org.apache.jetspeed.services.messaging.MessagingService;
   
   //Castor defined API
   import org.apache.jetspeed.om.profile.Portlets;
  @@ -59,6 +62,10 @@
   import org.apache.jetspeed.services.security.JetspeedSecurityException;
   
   //Servlet API
  +import javax.jms.JMSException;
  +import javax.jms.Message;
  +import javax.jms.MessageListener;
  +import javax.jms.ObjectMessage;
   import javax.servlet.ServletConfig;
   
   // Torque generated classes
  @@ -79,6 +86,7 @@
   import java.util.HashMap;
   import java.io.FileReader;
   import java.io.File;
  +import java.io.Serializable;
   
   import org.exolab.castor.mapping.Mapping;
   import org.xml.sax.InputSource;
  @@ -94,7 +102,8 @@
    * @version $Id$
    */
   public class DatabasePsmlManagerService extends TurbineBaseService
  -                                     implements DatabasePsmlManager
  +                                     implements DatabasePsmlManager,
  +                                     MessageListener
   {
       /**
        * Static initialization of the logger for this class
  @@ -131,6 +140,8 @@
   
       /** The pool name to use for database requests. */
       private String poolName = null;
  +    
  +    private boolean enableMessaging = false;
   
       /**
        * This is the early initialization method called by the
  @@ -163,6 +174,21 @@
   
           //Ensure that the servlet service is initialized
           TurbineServices.getInstance().initService(ServletService.SERVICE_NAME, 
conf);
  +        
  +        this.enableMessaging = getConfiguration().getBoolean("enable_messaging", 
false);
  +        if(enableMessaging)
  +        {
  +            try
  +            {
  +                
TurbineServices.getInstance().initService(MessagingService.SERVICE_NAME, conf);
  +                Messenger.addMessageListener(this, 
DatabasePsmlManagerService.class.getName(), MessagingService.PSML_UPDATE_SUBJECT);
  +            }
  +            catch(Exception e)
  +            {
  +                enableMessaging = false;
  +                logger.warn("Messaging support has been disabled due to a failure 
to initialize the service or add a listener.");
  +            }
  +        }
   
           ResourceService serviceConf =
                         ((TurbineServices)TurbineServices.getInstance())
  @@ -638,6 +664,12 @@
                       psmlCache.put(locatorToString(profile), profile.getDocument());
                   }
               }
  +            
  +            if(enableMessaging)
  +            {
  +                Message msg = createMessage(profile);
  +                Messenger.sendMessage(msg, MessagingService.PSML_UPDATE_SUBJECT);
  +            }
   
               return profile.getDocument();
           }
  @@ -703,6 +735,12 @@
                       psmlCache.remove(locatorToString(locator));
                   }
               }
  +            
  +            if(enableMessaging)
  +            {
  +                Message msg = createMessage(locator);
  +                Messenger.sendMessage(msg, MessagingService.PSML_UPDATE_SUBJECT);
  +            }
           }
           catch (Exception e) // insert failed
           {
  @@ -1019,6 +1057,23 @@
               if (user != null)
               {
                   new JetspeedUserProfilePeer().delete(user, dbCon);
  +                
  +                if (cachingOn)
  +                {
  +                    synchronized (psmlCache)
  +                    {
  +                        psmlCache.clear();
  +                    }
  +                }
  +                
  +                if(enableMessaging)
  +                {
  +                    PsmlMessage psmlMessage = new PsmlMessage();
  +                    psmlMessage.setUser(user.getUserName());
  +                    psmlMessage.setAction(PsmlMessage.REMOVE_ACTION);
  +                    Message message = createMessage(psmlMessage);
  +                    Messenger.sendMessage(message, 
MessagingService.PSML_UPDATE_SUBJECT);
  +                }
               }
           }
           catch (Exception e) // delete failed
  @@ -1031,7 +1086,6 @@
               // make sure to release the database connection
               releaseDbConnection(dbCon);
           }
  -
       }
   
       /** Removes all documents for a given role.
  @@ -1047,6 +1101,23 @@
               if (role != null)
               {
                   new JetspeedRoleProfilePeer().delete(role, dbCon);
  +                
  +                if (cachingOn)
  +                {
  +                    synchronized (psmlCache)
  +                    {
  +                        psmlCache.clear();
  +                    }
  +                }
  +                
  +                if(enableMessaging)
  +                {
  +                    PsmlMessage psmlMessage = new PsmlMessage();
  +                    psmlMessage.setRole(role.getName());
  +                    psmlMessage.setAction(PsmlMessage.REMOVE_ACTION);
  +                    Message message = createMessage(psmlMessage);
  +                    Messenger.sendMessage(message, 
MessagingService.PSML_UPDATE_SUBJECT);
  +                }
               }
           }
           catch (Exception e) // delete failed
  @@ -1074,6 +1145,23 @@
               if (group != null)
               {
                   new JetspeedGroupProfilePeer().delete(group, dbCon);
  +                
  +                if (cachingOn)
  +                {
  +                    synchronized (psmlCache)
  +                    {
  +                        psmlCache.clear();
  +                    }
  +                }
  +                
  +                if(enableMessaging)
  +                {
  +                    PsmlMessage psmlMessage = new PsmlMessage();
  +                    psmlMessage.setGroup(group.getName());
  +                    psmlMessage.setAction(PsmlMessage.REMOVE_ACTION);
  +                    Message message = createMessage(psmlMessage);
  +                    Messenger.sendMessage(message, 
MessagingService.PSML_UPDATE_SUBJECT);
  +                }
               }
           }
           catch (Exception e) // delete failed
  @@ -1272,5 +1360,74 @@
       {
           Torque.closeConnection(connection);
       }
  -}
  +    
  +    private Message createMessage(Serializable messageObject)
  +    {
  +        ObjectMessage msg = (ObjectMessage) 
Messenger.createMessage(MessagingService.OBJECT_MESSAGE);
  +        
  +        try
  +        {
  +            msg.setObject(messageObject);
  +        }
  +        catch (JMSException e)
  +        {
  +            logger.error("Failed to add object to message", e);
  +        }
  +        
  +        return msg;
  +    }
   
  +    /* (non-Javadoc)
  +     * @see javax.jms.MessageListener#onMessage(javax.jms.Message)
  +     */
  +    public void onMessage(Message message)
  +    {
  +        if(message instanceof ObjectMessage)
  +        {
  +            ObjectMessage objMsg = (ObjectMessage)message;
  +            Object obj = null;
  +            try
  +            {
  +                obj = objMsg.getObject();
  +            }
  +            catch (JMSException e)
  +            {
  +                logger.error("Failed to retrieve object from message.");
  +                return;
  +            }
  +            
  +            if(obj != null)
  +            {
  +                if(obj instanceof ProfileLocator)
  +                 {
  +                     ProfileLocator locator = (ProfileLocator)obj;
  +                     refresh(locator);
  +                 }
  +                 
  +                 if(obj instanceof PsmlMessage)
  +                 {
  +                     PsmlMessage psmlMsg = (PsmlMessage)obj;
  +                     
  +                     String user = psmlMsg.getUser();
  +                     String role = psmlMsg.getRole();
  +                     String group = psmlMsg.getGroup();
  +                     String action = psmlMsg.getAction();
  +
  +                     if(user != null || role != null || group != null)
  +                     {
  +                         if(PsmlMessage.REMOVE_ACTION.equals(action))
  +                         {
  +                             if (cachingOn)
  +                             {
  +                                 synchronized (psmlCache)
  +                                 {
  +                                     psmlCache.clear();
  +                                 }
  +                             }
  +                         }
  +                     }
  +                 }
  +            }
  +        }
  +    }
  +}
  
  
  

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

Reply via email to