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]