[prev in list] [next in list] [prev in thread] [next in thread]
List: juddi-cvs
Subject: svn commit: r1127255 - in /juddi/trunk:
From: kstam () apache ! org
Date: 2011-05-24 20:12:44
Message-ID: 20110524201244.74F0D2388A33 () eris ! apache ! org
[Download RAW message or body]
Author: kstam
Date: Tue May 24 20:12:43 2011
New Revision: 1127255
URL: http://svn.apache.org/viewvc?rev=1127255&view=rev
Log:
JUDDI-423 Making sure we only notify once on an asynchronous subscription. Now also \
supporting endPoint types.
Added:
juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/subscriptionnotifier/subscription2.xml
Modified:
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/subscription/notify/HTTPNotifier.java
juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_SubscriptionListenerIntegrationTest.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/judd \
i/subscription/SubscriptionNotifier.java?rev=1127255&r1=1127254&r2=1127255&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 \
Tue May 24 20:12:43 2011 @@ -121,10 +121,13 @@ public class SubscriptionNotifier \
extend
Collection<Subscription> subscriptions = getAllAsyncSubscriptions();
for (Subscription subscription : subscriptions) {
- //expireCache after subscription.getExpiresAfter().getTime()
+
if (subscription.getExpiresAfter()==null || \
subscription.getExpiresAfter().getTime() > startTime) { try {
- GetSubscriptionResults getSubscriptionResults = \
buildGetSubscriptionResults(subscription, new Date(scheduledExecutionTime())); \
+ //build a query with a coverage period from the lastNotified time to \
+ //now (the scheduled Execution time) + GetSubscriptionResults \
getSubscriptionResults = + buildGetSubscriptionResults(subscription, new \
Date(scheduledExecutionTime())); if (getSubscriptionResults!=null) {
getSubscriptionResults.setSubscriptionKey(subscription.getSubscriptionKey());
UddiEntityPublisher publisher = new UddiEntityPublisher();
@@ -139,6 +142,11 @@ public class SubscriptionNotifier extend
log.error("Could not obtain subscriptionResult for subscriptionKey "
+ subscription.getSubscriptionKey() + ". " + e.getMessage(),e);
}
+ } else {
+ // the subscription expired, we should delete it
+ log.info("Subcription with key " + subscription.getSubscriptionKey()
+ + " expired " + subscription.getExpiresAfter());
+ deleteSubscription(subscription);
}
}
long endTime = System.currentTimeMillis();
@@ -152,7 +160,7 @@ public class SubscriptionNotifier extend
} else {
log.debug("Skipping current notification cycle because lagtime is too great.");
}
- }
+ }
/**
* Checks to see that the event are fired on time. If they are late this may \
indicate that the server
* is under load. The acceptableLagTime is configurable using the \
"juddi.notification.acceptable.lagtime" @@ -167,7 +175,7 @@ public class \
SubscriptionNotifier extend if (lagTime <= acceptableLagTime || acceptableLagTime < \
0) { return true;
} else {
- log.warn("NotificationTimer is lagging " + lagTime + " milli seconds behind. A \
lag time " + log.debug("NotificationTimer is lagging " + lagTime + " milli seconds \
behind. A lag time "
+ "which exceeds an acceptable lagtime of " + acceptableLagTime + "ms indicates \
"
+ "that the registry server is under load or was in sleep mode. We are \
therefore skipping this notification " + "cycle.");
@@ -184,7 +192,9 @@ public class SubscriptionNotifier extend
if (startPoint==null) startPoint = subscription.getCreateDate();
nextDesiredNotificationDate = new Date(startPoint.getTime());
duration.addTo(nextDesiredNotificationDate);
-
+ //nextDesiredNotificationDate = lastTime + the Interval Duration, which should be:
+ //AFTER the lastNotified time and BEFORE the endTime (current time). If it is
+ //after the endTime, then the user does not want a notification yet, so we \
accumulate. if (subscription.getLastNotified()==null || \
nextDesiredNotificationDate.after(startPoint) && \
nextDesiredNotificationDate.before(endPoint)) { getSubscriptionResults = new \
GetSubscriptionResults(); CoveragePeriod period = new CoveragePeriod();
@@ -234,34 +244,39 @@ public class SubscriptionNotifier extend
return subscriptions;
}
/**
+ * Deletes the subscription. i.e. when it is expired.
+ * @param subscription
+ */
+ protected void deleteSubscription(Subscription subscription) {
+ EntityManager em = PersistenceManager.getEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+ em.remove(subscription);
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+ /**
* Sends out the notifications.
* @param resultList
* @throws MalformedURLException
* @throws DispositionReportFaultMessage
*/
- protected synchronized void notify(GetSubscriptionResults getSubscriptionResults, \
SubscriptionResultsList resultList) + protected void notify(GetSubscriptionResults \
getSubscriptionResults, SubscriptionResultsList resultList) {
EntityManager em = PersistenceManager.getEntityManager();
EntityTransaction tx = em.getTransaction();
try {
- 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);
+ org.apache.juddi.model.Subscription modelSubscription =
+ em.find(org.apache.juddi.model.Subscription.class, \
resultList.getSubscription().getSubscriptionKey()); Date notificationDate = new \
Date();
- 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;
- }
-
- //now log to the db that we completed sending the notification.
+ //now log to the db that we are sending the notification.
tx.begin();
modelSubscription.setLastNotified(notificationDate);
em.persist(modelSubscription);
@@ -269,10 +284,10 @@ public class SubscriptionNotifier extend
org.apache.juddi.model.BindingTemplate bindingTemplate= \
em.find(org.apache.juddi.model.BindingTemplate.class, \
modelSubscription.getBindingKey()); NotifySubscriptionListener body = new \
NotifySubscriptionListener();
- if (resultList.getServiceList()!=null && \
resultList.getServiceList().getServiceInfos()!=null &&
- resultList.getServiceList().getServiceInfos().getServiceInfo().size() == 0) {
- resultList.getServiceList().setServiceInfos(null);
- }
+// if (resultList.getServiceList()!=null && \
resultList.getServiceList().getServiceInfos()!=null && \
+// resultList.getServiceList().getServiceInfos().getServiceInfo().size() == 0) { \
+// resultList.getServiceList().setServiceInfos(null); +// }
body.setSubscriptionResultsList(resultList);
String authorizedName = modelSubscription.getAuthorizedName();
UDDISecurityImpl security = new UDDISecurityImpl();
Modified: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/subscription/notify/HTTPNotifier.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/judd \
i/subscription/notify/HTTPNotifier.java?rev=1127255&r1=1127254&r2=1127255&view=diff \
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/subscription/notify/HTTPNotifier.java \
(original)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/subscription/notify/HTTPNotifier.java \
Tue May 24 20:12:43 2011 @@ -21,7 +21,7 @@ import org.uddi.v3_service.UDDISubscript
public class HTTPNotifier implements Notifier {
private static String SUBR_V3_NAMESPACE = "urn:uddi-org:v3_service";
- private static String SUBSCRIPTION_LISTENER_SERVICE = \
"UDDI_SubscriptionListener_Port"; + private static String \
SUBSCRIPTION_LISTENER_SERVICE = "UDDISubscriptionListenerImplPort";
Log log = LogFactory.getLog(this.getClass());
UDDISubscriptionListenerPortType subscriptionListenerPort = null;
@@ -34,7 +34,7 @@ public class HTTPNotifier implements Not
" should start with 'http' or 'https'");
}
if (AccessPointType.WSDL_DEPLOYMENT.toString().equalsIgnoreCase(bindingTemplate.getAccessPointType())) \
{
- //WSDL deployment types
+ //WSDL deployment type
//TODO, let user override the SUBSCRIPTION_LISTENER_SERVICE setting
QName qName = new QName(SUBR_V3_NAMESPACE, SUBSCRIPTION_LISTENER_SERVICE);
Service service = Service.create(new URL(bindingTemplate.getAccessPointUrl()), \
qName);
Added: juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/subscriptionnotifier/subscription2.xml
URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/subscriptionnotifier/subscription2.xml?rev=1127255&view=auto
==============================================================================
--- juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/subscriptionnotifier/subscription2.xml \
(added)
+++ juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/subscriptionnotifier/subscription2.xml \
Tue May 24 20:12:43 2011 @@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Copyright 2001-2009 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+-->
+<subscription xmlns="urn:uddi-org:sub_v3">
+ <subscriptionKey>uddi:uddi.joepublisher.com:subscriptionone</subscriptionKey>
+ <subscriptionFilter>
+ <find_business xmlns="urn:uddi-org:api_v3" \
xmlns:xml="http://www.w3.org/XML/1998/namespace"> + <findQualifiers>
+ <findQualifier>exactMatch</findQualifier>
+ </findQualifiers>
+ <name xml:lang="en">Listener One</name>
+ </find_business>
+ </subscriptionFilter>
+ <bindingKey xmlns="urn:uddi-org:api_v3">uddi:uddi.joepublisher.com:bindinglistener</bindingKey>
+ <notificationInterval>P5D</notificationInterval>
+ <maxEntities>1000</maxEntities>
+</subscription>
Modified: juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_SubscriptionListenerIntegrationTest.java
URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/ \
v3/tck/UDDI_090_SubscriptionListenerIntegrationTest.java?rev=1127255&r1=1127254&r2=1127255&view=diff
==============================================================================
--- juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_SubscriptionListenerIntegrationTest.java \
(original)
+++ juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_SubscriptionListenerIntegrationTest.java \
Tue May 24 20:12:43 2011 @@ -89,7 +89,7 @@ public class UDDI_090_SubscriptionListen
}
@Test
- public void joePublisher() {
+ public void joePublisherUpdateService() {
try {
tckTModel.saveJoePublisherTmodel(authInfoJoe);
tckBusiness.saveJoePublisherBusiness(authInfoJoe);
@@ -101,8 +101,7 @@ public class UDDI_090_SubscriptionListen
//Changing the service we subscribed to "JoePublisherService"
Thread.sleep(1000);
logger.info("Updating Service ********** ");
- tckBusinessService.updateJoePublisherService(authInfoJoe, "foo" + new Date());
- //tckSubscriptionListener.changeSubscribedObject(authInfoJoe);
+ tckBusinessService.updateJoePublisherService(authInfoJoe, "foo");
//waiting up to 100 seconds for the listener to notice the change.
String test="";
@@ -134,6 +133,51 @@ public class UDDI_090_SubscriptionListen
tckBusiness.deleteJoePublisherBusiness(authInfoJoe);
tckTModel.deleteJoePublisherTmodel(authInfoJoe);
}
+ }
+
+ @Test
+ public void joePublisherUpdateBusiness() {
+ try {
+ tckTModel.saveJoePublisherTmodel(authInfoJoe);
+ tckBusiness.saveJoePublisherBusiness(authInfoJoe);
+ tckBusinessService.saveJoePublisherService(authInfoJoe);
+ //Saving the Listener Service
+ tckSubscriptionListener.saveService(authInfoJoe);
+ //Saving the Subscription
+ tckSubscriptionListener.saveNotifierSubscription(authInfoJoe);
+ //Changing the service we subscribed to "JoePublisherService"
+ Thread.sleep(1000);
+ logger.info("Deleting Business ********** ");
+ tckBusiness.deleteJoePublisherBusiness(authInfoJoe);
+
+ //waiting up to 100 seconds for the listener to notice the change.
+ String test="";
+ for (int i=0; i<200; i++) {
+ Thread.sleep(500);
+ System.out.print(".");
+ if (UDDISubscriptionListenerImpl.notificationCount > 0) {
+ logger.info("Received Notification");
+ break;
+ } else {
+ System.out.print(test);
+ }
+ }
+ if (UDDISubscriptionListenerImpl.notificationCount == 0) {
+ Assert.fail("No Notification was sent");
+ }
+ if (!UDDISubscriptionListenerImpl.notifcationMap.get(0).contains("<name \
xml:lang=\"en\">Service One</name>")) { + Assert.fail("Notification does not \
contain the correct service"); + }
+
+ } catch (Exception e) {
+ logger.error("No exceptions please.");
+ e.printStackTrace();
+
+ Assert.fail();
+ } finally {
+ tckSubscriptionListener.deleteNotifierSubscription(authInfoJoe);
+ tckTModel.deleteJoePublisherTmodel(authInfoJoe);
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@juddi.apache.org
For additional commands, e-mail: commits-help@juddi.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic