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