You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by ks...@apache.org on 2011/05/19 07:55:56 UTC

svn commit: r1124544 - /juddi/trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java

Author: kstam
Date: Thu May 19 05:55:56 2011
New Revision: 1124544

URL: http://svn.apache.org/viewvc?rev=1124544&view=rev
Log:
JUDDI-482, Use the ServiceCounters to optimize how often the SubscriptionNotification needs to run

Modified:
    juddi/trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java

Modified: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java?rev=1124544&r1=1124543&r2=1124544&view=diff
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java (original)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java Thu May 19 05:55:56 2011
@@ -23,6 +23,9 @@ import java.util.GregorianCalendar;
 import java.util.Timer;
 import java.util.TimerTask;
 
+import javax.management.AttributeNotFoundException;
+import javax.management.MBeanException;
+import javax.management.ReflectionException;
 import javax.persistence.EntityManager;
 import javax.persistence.EntityTransaction;
 import javax.persistence.LockModeType;
@@ -34,7 +37,10 @@ import javax.xml.datatype.Duration;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.api.impl.ServiceCounterLifecycleResource;
+import org.apache.juddi.api.impl.UDDIPublicationImpl;
 import org.apache.juddi.api.impl.UDDISecurityImpl;
+import org.apache.juddi.api.impl.UDDIServiceCounter;
 import org.apache.juddi.api.impl.UDDISubscriptionImpl;
 import org.apache.juddi.api_v3.AccessPointType;
 import org.apache.juddi.config.AppConfig;
@@ -63,8 +69,14 @@ public class SubscriptionNotifier extend
 	private long interval = AppConfig.getConfiguration().getLong(Property.JUDDI_NOTIFICATION_INTERVAL, 300000l); //5 min default
 	private long acceptableLagTime = AppConfig.getConfiguration().getLong(Property.JUDDI_NOTIFICATION_ACCEPTABLE_LAGTIME, 500l); //500 milliseconds
 	private UDDISubscriptionImpl subscriptionImpl = new UDDISubscriptionImpl();
-	private Boolean registryHasChanges = true;
 	private Boolean alwaysNotify = false;
+	private int lastUpdateCounter;
+	private UDDIServiceCounter serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(UDDIPublicationImpl.class);
+	private String[] attributes = {
+			  "save_business",  "save_service",  "save_binding",  "save_tmodel",
+			"delete_business","delete_service","delete_binding","delete_tmodel",
+			"add_publisherassertions","set_publisherassertions","delete_publisherassertions"
+	};
 	
 	public SubscriptionNotifier() throws ConfigurationException {
 		super();
@@ -77,10 +89,37 @@ public class SubscriptionNotifier extend
 		timer.cancel();
 		return super.cancel();
 	}
+	
+	/**
+	 * If the CRUD methods on the publication API where not called, this registry node does not contain changes. If
+	 * the registry database is shared with other registry nodes and one of those registries pushed in a change, then
+	 * that registry node will take care of sending out notifications.
+	 * @return
+	 */
+	protected boolean registryMayContainUpdates() {
+		boolean isUpdated = false;
+		int updateCounter = 0;
+		try {
+			for (String attribute : attributes) {
+				attribute += " successful queries";
+				String counter = serviceCounter.getAttribute(attribute).toString();
+				if (counter!=null) updateCounter += Integer.valueOf(counter);
+			}
+			//if the counts not the same something changed, this accounts for the case where the counters where reset.
+			if (updateCounter != lastUpdateCounter) {
+				lastUpdateCounter = updateCounter;
+				isUpdated = true;
+			}
+		} catch (Exception e) {
+		
+			e.printStackTrace();
+		}
+		return isUpdated;
+	}
 
 	public void run() 
 	{
-		if (alwaysNotify || (registryHasChanges && firedOnTime(scheduledExecutionTime()))) {
+		if ((firedOnTime(scheduledExecutionTime()) || alwaysNotify) && registryMayContainUpdates()) {
 			long startTime = System.currentTimeMillis();
 			log.debug("Start Notification background task; checking if subscription notifications need to be send out..");
 			



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@juddi.apache.org
For additional commands, e-mail: commits-help@juddi.apache.org