jford       2004/08/04 21:27:04

  Modified:    src/java/org/apache/jetspeed/services/registry
                        CastorRegistryService.java
                        HybridRegistryService.java
  Log:
  Handle non DB registries correctly
  Handle removal of registry entry
  
  Revision  Changes    Path
  1.44      +10 -13    
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.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- CastorRegistryService.java        29 Jul 2004 01:23:45 -0000      1.43
  +++ CastorRegistryService.java        5 Aug 2004 04:27:03 -0000       1.44
  @@ -322,6 +322,12 @@
   
               // the entry is physically removed, remove the dangling reference
               registry.removeLocalEntry(entryName);
  +            
  +            if(enableMessaging)
  +            {
  +                Message msg = createMessage(regName, entryName);
  +                Messenger.sendMessage(msg, 
MessagingService.REGISTRY_UPDATE_SUBJECT);
  +            }
           }
       }
   
  @@ -982,7 +988,7 @@
           }
       }
       
  -    private Message createMessage(String registry, String entryName)
  +    protected Message createMessage(String registry, String entryName)
       {
           ObjectMessage msg = (ObjectMessage) 
Messenger.createMessage(MessagingService.OBJECT_MESSAGE);
           RegistryMessage rm = new RegistryMessage();
  @@ -1024,19 +1030,10 @@
               if((obj != null) && (obj instanceof RegistryMessage))
               {
                    RegistryMessage regMsg = (RegistryMessage)obj;
  -                 String entryName = regMsg.getEntryName();
  +                 String registry = regMsg.getRegistry();
                    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);
  -                    }
  +                    refresh(registry);
                    }
               }
               else if(obj != null)
  
  
  
  1.12      +82 -2     
jakarta-jetspeed/src/java/org/apache/jetspeed/services/registry/HybridRegistryService.java
  
  Index: HybridRegistryService.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/registry/HybridRegistryService.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- HybridRegistryService.java        23 Jul 2004 00:29:29 -0000      1.11
  +++ HybridRegistryService.java        5 Aug 2004 04:27:03 -0000       1.12
  @@ -22,6 +22,9 @@
   import java.util.Iterator;
   import java.util.List;
   
  +import javax.jms.JMSException;
  +import javax.jms.Message;
  +import javax.jms.ObjectMessage;
   import javax.servlet.ServletConfig;
   
   import org.apache.jetspeed.om.dbregistry.PortletDbEntryPeer;
  @@ -32,9 +35,12 @@
   import org.apache.jetspeed.om.registry.RegistryException;
   import org.apache.jetspeed.om.registry.SecurityEntry;
   import org.apache.jetspeed.om.registry.base.LocalRegistry;
  +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.turbine.services.InitializationException;
  +import org.apache.turbine.services.TurbineServices;
   
   /**
    * Implements the Jetspeed Registry Service interface, with a hybrid of Database 
and File-based (Castor)
  @@ -80,6 +86,25 @@
           {
               super.init(conf);
           }
  +        else
  +        {
  +            //check for messaging if we're not in hybrid mode
  +            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.");
  +                }
  +            }
  +        }
   
           try
           {
  @@ -252,7 +277,7 @@
                   LocalRegistry local = (LocalRegistry)registry;
                   try
                   {
  -                    local.addEntry(entry);
  +                    local.addLocalEntry(entry);
                   }
                   catch (RegistryException e)
                   {
  @@ -287,6 +312,12 @@
           }        
           
           save(registry, entry);
  +        
  +        if(enableMessaging)
  +        {
  +            Message msg = createMessage(registryName, entry.getName());
  +            Messenger.sendMessage(msg, MessagingService.REGISTRY_UPDATE_SUBJECT);
  +        }
       }
       
       public void removeEntry(String registryName, String entryName)
  @@ -316,6 +347,9 @@
                   PortletDbEntryPeer.removePortletEntry(entryName);        
                   registry.removeLocalEntry(entryName);                
               }
  +            
  +            Message msg = createMessage(registryName, entryName);
  +            Messenger.sendMessage(msg, MessagingService.REGISTRY_UPDATE_SUBJECT);
           }
           catch (RegistryException e)
           {
  @@ -405,4 +439,50 @@
           }
       }
       
  +    /**
  +     * @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();
  +                 String registry = regMsg.getRegistry();
  +                 if(RegistryMessage.ACTION_REFRESH.equals(regMsg.getAction()))
  +                 {
  +                     boolean usesDb = dbRegistries.containsKey(registry);
  +                     if(usesDb)
  +                     {
  +                         LocalRegistry reg = (LocalRegistry) get(registry);
  +                         reg.removeLocalEntry(entryName); //remove from cache
  +                     }
  +                     
  +                    refresh(registry);
  +                 }
  +            }
  +            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