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]