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]