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 2009/05/14 20:25:57 UTC
svn commit: r774865 -
/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java
Author: kstam
Date: Thu May 14 18:25:56 2009
New Revision: 774865
URL: http://svn.apache.org/viewvc?rev=774865&view=rev
Log:
JUDDI-205 adding locking of the subscription row in the db, so only *one* thread/node will send out a notification.
Modified:
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java?rev=774865&r1=774864&r2=774865&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java Thu May 14 18:25:56 2009
@@ -10,6 +10,7 @@
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
+import javax.persistence.LockModeType;
import javax.persistence.Query;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.Duration;
@@ -76,7 +77,7 @@
log.info("Notification background task took " + (endTime - startTime) + " milliseconds.");
}
} else {
- log.warn("Skipping current notification cycle because the registry is busy.");
+ log.warn("Skipping current notification cycle because the registry is too busy.");
}
}
/**
@@ -155,13 +156,20 @@
*/
@SuppressWarnings("unchecked")
protected Collection<Subscription> getAllSubscriptions() {
+ Collection<Subscription> subscriptions = null;
EntityManager em = PersistenceManager.getEntityManager();
EntityTransaction tx = em.getTransaction();
- tx.begin();
- Query query = em.createQuery("SELECT s FROM Subscription s");
- Collection<Subscription> subscriptions = (Collection<Subscription>) query.getResultList();
- tx.commit();
- em.close();
+ try {
+ tx.begin();
+ Query query = em.createQuery("SELECT s FROM Subscription s");
+ subscriptions = (Collection<Subscription>) query.getResultList();
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
return subscriptions;
}
/**
@@ -174,9 +182,20 @@
{
EntityManager em = PersistenceManager.getEntityManager();
EntityTransaction tx = em.getTransaction();
- tx.begin();
try {
+ tx.begin();
org.apache.juddi.model.Subscription modelSubscription = em.find(org.apache.juddi.model.Subscription.class, resultList.getSubscription().getSubscriptionKey());
+ log.debug("Taking out a write lock on this subscription, and bail if we can't get it since that would mean"
+ + " another jUDDI instance is in the process of sending out the notification.");
+ em.lock(modelSubscription, LockModeType.WRITE);
+ Date startPoint = resultList.getCoveragePeriod().getStartPoint().toGregorianCalendar().getTime();
+ Date endPoint = resultList.getCoveragePeriod().getEndPoint().toGregorianCalendar().getTime();
+ if (modelSubscription.getLastNotified()!=null
+ && startPoint.before(modelSubscription.getLastNotified())
+ && endPoint.after(modelSubscription.getLastNotified())) {
+ log.info("We already send out a notification within this coverage period, no need to send another one.");
+ return;
+ }
org.apache.juddi.model.BindingTemplate bindingTemplate= em.find(org.apache.juddi.model.BindingTemplate.class, modelSubscription.getBindingKey());
NotifySubscriptionListener body = new NotifySubscriptionListener();
body.setSubscriptionResultsList(resultList);
---------------------------------------------------------------------
To unsubscribe, e-mail: juddi-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: juddi-cvs-help@ws.apache.org