jford       2004/07/28 18:23:45

  Modified:    src/java/org/apache/jetspeed/services/registry
                        CastorRegistryService.java
  Log:
  Added messaging support to the registry
  
  Revision  Changes    Path
  1.43      +107 -2    
jakarta-jetspeed/src/java/org/apache/jetspeed/services/registry/CastorRegistryService.java
  
  Index: CastorRegistryService.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/registry/CastorRegistryService.java,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- CastorRegistryService.java        14 Jul 2004 22:35:01 -0000      1.42
  +++ CastorRegistryService.java        29 Jul 2004 01:23:45 -0000      1.43
  @@ -17,8 +17,10 @@
   package org.apache.jetspeed.services.registry;
   
   // Jetspeed stuff
  +import org.apache.jetspeed.services.Messenger;
   import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
   import org.apache.jetspeed.services.logging.JetspeedLogger;
  +import org.apache.jetspeed.services.messaging.MessagingService;
   import org.apache.jetspeed.om.registry.Registry;
   import org.apache.jetspeed.om.registry.RegistryEntry;
   import org.apache.jetspeed.om.registry.RegistryException;
  @@ -57,6 +59,11 @@
   import java.util.Map;
   import java.util.Iterator;
   import java.util.Vector;
  +
  +import javax.jms.JMSException;
  +import javax.jms.Message;
  +import javax.jms.MessageListener;
  +import javax.jms.ObjectMessage;
   import javax.servlet.ServletConfig;
   import javax.xml.parsers.DocumentBuilder;
   import javax.xml.parsers.DocumentBuilderFactory;
  @@ -89,7 +96,7 @@
    */
   public class CastorRegistryService
       extends TurbineBaseService
  -    implements RegistryService, FileRegistry
  +    implements RegistryService, FileRegistry, MessageListener
   {
       /**
        * Static initialization of the logger for this class
  @@ -127,6 +134,9 @@
       /** the extension for registry files */
       private String extension = null;
       
  +    /** enable messaging */
  +    protected boolean enableMessaging = false;
  +    
       /**
        * Returns a Registry object for further manipulation
        *
  @@ -264,6 +274,12 @@
                   // mark this fragment so that it's persisted next time
                   // the registry watcher is running
                   fragment.setDirty(true);
  +                
  +                if(enableMessaging)
  +                {
  +                    Message msg = createMessage(regName, entry.getName());
  +                    Messenger.sendMessage(msg, 
MessagingService.REGISTRY_UPDATE_SUBJECT);
  +                }
               }
           }
       }
  @@ -318,6 +334,22 @@
   
           //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, 
CastorRegistryService.class.getName(), MessagingService.REGISTRY_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.");
  +            }
  +        }
   
           String mapFile = null;
           Vector names = new Vector();
  @@ -942,6 +974,79 @@
           }
           
           saveFragment(fragmentName);
  +        
  +        if(enableMessaging)
  +        {
  +            Message msg = createMessage(regName, entry.getName());
  +            Messenger.sendMessage(msg, MessagingService.REGISTRY_UPDATE_SUBJECT);
  +        }
  +    }
  +    
  +    private Message createMessage(String registry, String entryName)
  +    {
  +        ObjectMessage msg = (ObjectMessage) 
Messenger.createMessage(MessagingService.OBJECT_MESSAGE);
  +        RegistryMessage rm = new RegistryMessage();
  +        rm.setAction(RegistryMessage.ACTION_REFRESH);
  +        rm.setRegistry(registry);
  +        rm.setEntryName(entryName);
  +        
  +        try
  +        {
  +            msg.setObject(rm);
  +        }
  +        catch (JMSException e)
  +        {
  +            logger.error("Failed to add object to message", e);
  +        }
  +        
  +        return msg;
       }
   
  +    /**
  +     * @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) && (obj instanceof RegistryMessage))
  +            {
  +                 RegistryMessage regMsg = (RegistryMessage)obj;
  +                 String entryName = regMsg.getEntryName();
  +                 if(RegistryMessage.ACTION_REFRESH.equals(regMsg.getAction()))
  +                 {
  +                     LocalRegistry reg = (LocalRegistry) get(regMsg.getRegistry());
  +                     reg.removeLocalEntry(entryName); //remove from cache
  +                     try
  +                    {
  +                        reg.getEntry(entryName); //immediately reload
  +                    }
  +                    catch (RegistryException e)
  +                    {
  +                        logger.error("Failed to retrieve entry from persistent 
storage", e);
  +                    }
  +                 }
  +            }
  +            else if(obj != null)
  +            {
  +                logger.error("Recieved unsupported object " + 
obj.getClass().getName());
  +            }
  +        }
  +        else
  +        {
  +            logger.error("Received unsupported message type ");
  +        }
  +    }
   }
  
  
  

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

Reply via email to