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 22:45:22 UTC
svn commit: r774919 - in /webservices/juddi/branches/v3_trunk/juddi-core/src:
main/java/org/apache/juddi/subscription/SubscriptionNotifier.java
test/java/org/apache/juddi/subscription/SubscriptionNotifierTest.java
Author: kstam
Date: Thu May 14 20:45:22 2009
New Revision: 774919
URL: http://svn.apache.org/viewvc?rev=774919&view=rev
Log:
JUDDI-205 adding chunking of the response.
Modified:
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java
webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/subscription/SubscriptionNotifierTest.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=774919&r1=774918&r2=774919&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 20:45:22 2009
@@ -28,6 +28,7 @@
import javax.persistence.EntityTransaction;
import javax.persistence.LockModeType;
import javax.persistence.Query;
+import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.Duration;
import javax.xml.namespace.QName;
@@ -57,12 +58,12 @@
public class SubscriptionNotifier extends TimerTask {
private Logger log = Logger.getLogger(this.getClass());
- Timer timer = new Timer();
- long interval = AppConfig.getConfiguration().getLong(Property.JUDDI_NOTIFICATION_INTERVAL, 300000l); //5 min default
- UDDISubscriptionImpl subscriptionImpl = new UDDISubscriptionImpl();
+ private Timer timer = new Timer();
+ private long interval = AppConfig.getConfiguration().getLong(Property.JUDDI_NOTIFICATION_INTERVAL, 300000l); //5 min default
+ private UDDISubscriptionImpl subscriptionImpl = new UDDISubscriptionImpl();
private static long ACCEPTABLE_LAG_TIME = 20l; //20 milliseconds
private static String SUBR_V3_NAMESPACE = "urn:uddi-org:subr_v3_portType";
- private static String SUBSCRIPTION_LISTENER = "SubscriptionListener";
+ private static String SUBSCRIPTION_LISTENER = "SubscriptionListenerService";
public SubscriptionNotifier() throws ConfigurationException {
super();
@@ -78,11 +79,21 @@
Collection<Subscription> subscriptions = getAllSubscriptions();
for (Subscription subscription : subscriptions) {
if (subscription.getExpiresAfter()==null || subscription.getExpiresAfter().getTime() > startTime) {
- SubscriptionResultsList resultList = getSubscriptionResultList(subscription);
- if (resultListContainsChanges(resultList)) {
- log.info("We have a change and need to notify..");
- notify(resultList);
+ try {
+ GetSubscriptionResults getSubscriptionResults = buildGetSubscriptionResults(subscription);
+ getSubscriptionResults.setSubscriptionKey(subscription.getSubscriptionKey());
+ UddiEntityPublisher publisher = new UddiEntityPublisher();
+ publisher.setAuthorizedName(subscription.getAuthorizedName());
+ SubscriptionResultsList resultList = subscriptionImpl.getSubscriptionResults(getSubscriptionResults, publisher);
+ if (resultListContainsChanges(resultList)) {
+ log.info("We have a change and need to notify..");
+ notify(getSubscriptionResults,resultList);
+ }
+ } catch (Exception e) {
+ log.error("Could not obtain subscriptionResult for subscriptionKey "
+ + subscription.getSubscriptionKey() + ". " + e.getMessage(),e);
}
+
}
}
long endTime = System.currentTimeMillis();
@@ -116,46 +127,33 @@
return false;
}
}
- /**
- * Obtains the SubscriptionResultsList for a subscription.
- *
- * @param subscription
- * @return
- */
- protected SubscriptionResultsList getSubscriptionResultList(Subscription subscription) {
- SubscriptionResultsList resultList = null;
- try {
- Date startPoint = subscription.getLastNotified();
- if (startPoint==null) startPoint = subscription.getCreateDate();
- Date endPoint = new Date(scheduledExecutionTime());
-
- Duration duration = TypeConvertor.convertStringToDuration(subscription.getNotificationInterval());
- Date nextDesiredNotificationDate = startPoint;
- duration.addTo(nextDesiredNotificationDate);
-
- if (subscription.getLastNotified()==null || nextDesiredNotificationDate.after(startPoint) && nextDesiredNotificationDate.before(endPoint)) {
- GetSubscriptionResults subscriptionResults = new GetSubscriptionResults();
-
- CoveragePeriod period = new CoveragePeriod();
- GregorianCalendar calendar = new GregorianCalendar();
- calendar.setTimeInMillis(startPoint.getTime());
- period.setStartPoint(DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar));
- calendar.setTimeInMillis(endPoint.getTime());
- period.setEndPoint(DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar));
- subscriptionResults.setCoveragePeriod(period);
-
- subscriptionResults.setSubscriptionKey(subscription.getSubscriptionKey());
- UddiEntityPublisher publisher = new UddiEntityPublisher();
- publisher.setAuthorizedName(subscription.getAuthorizedName());
- resultList = subscriptionImpl.getSubscriptionResults(subscriptionResults, publisher);
- }
+ protected GetSubscriptionResults buildGetSubscriptionResults(Subscription subscription)
+ throws DispositionReportFaultMessage, DatatypeConfigurationException {
+
+ GetSubscriptionResults getSubscriptionResults = null;
+ Date startPoint = subscription.getLastNotified();
+ if (startPoint==null) startPoint = subscription.getCreateDate();
+ Date endPoint = new Date(scheduledExecutionTime());
+
+ Duration duration = TypeConvertor.convertStringToDuration(subscription.getNotificationInterval());
+ Date nextDesiredNotificationDate = startPoint;
+ duration.addTo(nextDesiredNotificationDate);
- } catch (Exception e) {
- log.error("Could not obtain subscriptionResult for subscriptionKey "
- + subscription.getSubscriptionKey() + ". " + e.getMessage(),e);
+ if (subscription.getLastNotified()==null || nextDesiredNotificationDate.after(startPoint) && nextDesiredNotificationDate.before(endPoint)) {
+ getSubscriptionResults = new GetSubscriptionResults();
+
+ CoveragePeriod period = new CoveragePeriod();
+ GregorianCalendar calendar = new GregorianCalendar();
+ calendar.setTimeInMillis(startPoint.getTime());
+ period.setStartPoint(DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar));
+ calendar.setTimeInMillis(endPoint.getTime());
+ period.setEndPoint(DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar));
+ getSubscriptionResults.setCoveragePeriod(period);
}
- return resultList;
+ return getSubscriptionResults;
+
}
+
protected boolean resultListContainsChanges(SubscriptionResultsList resultList)
{
if (resultList==null) return false;
@@ -195,7 +193,7 @@
* @throws MalformedURLException
* @throws DispositionReportFaultMessage
*/
- protected void notify(SubscriptionResultsList resultList)
+ protected void notify(GetSubscriptionResults getSubscriptionResults, SubscriptionResultsList resultList)
{
EntityManager em = PersistenceManager.getEntityManager();
EntityTransaction tx = em.getTransaction();
@@ -222,10 +220,22 @@
QName qName = new QName(SUBR_V3_NAMESPACE, SUBSCRIPTION_LISTENER);
try {
Service service = Service.create(new URL(bindingTemplate.getAccessPointUrl()), qName);
- UDDISubscriptionListenerPortType subscriptionListener = (UDDISubscriptionListenerPortType) service.getPort(UDDISubscriptionListenerPortType.class);
- subscriptionListener.notifySubscriptionListener(body);
-
- //now log to the db that we notified.
+ UDDISubscriptionListenerPortType subscriptionListenerPort = (UDDISubscriptionListenerPortType) service.getPort(UDDISubscriptionListenerPortType.class);
+ log.info("Sending out notification to " + bindingTemplate.getAccessPointUrl());
+ subscriptionListenerPort.notifySubscriptionListener(body);
+ //there maybe more chunks we have to send
+ String chunkToken=body.getSubscriptionResultsList().getChunkToken();
+ while(chunkToken!=null) {
+ UddiEntityPublisher publisher = new UddiEntityPublisher();
+ publisher.setAuthorizedName(modelSubscription.getAuthorizedName());
+ log.debug("Sending out next chunk: " + chunkToken + " to " + bindingTemplate.getAccessPointUrl());
+ getSubscriptionResults.setChunkToken(chunkToken);
+ resultList = subscriptionImpl.getSubscriptionResults(getSubscriptionResults, publisher);
+ body.setSubscriptionResultsList(resultList);
+ subscriptionListenerPort.notifySubscriptionListener(body);
+ chunkToken=body.getSubscriptionResultsList().getChunkToken();
+ }
+ //now log to the db that we completed sending the notification.
Date notificationDate = new Date();
modelSubscription.setLastNotified(notificationDate);
em.persist(modelSubscription);
@@ -235,6 +245,8 @@
} else {
log.error("Unsupported binding type.");
}
+ } else {
+ log.error("There is no valid binding template defined for this subscription: " + modelSubscription.getBindingKey());
}
tx.commit();
} finally {
@@ -245,4 +257,8 @@
}
}
+ protected UDDISubscriptionImpl getSubscriptionImpl() {
+ return subscriptionImpl;
+ }
+
}
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/subscription/SubscriptionNotifierTest.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/subscription/SubscriptionNotifierTest.java?rev=774919&r1=774918&r2=774919&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/subscription/SubscriptionNotifierTest.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/test/java/org/apache/juddi/subscription/SubscriptionNotifierTest.java Thu May 14 20:45:22 2009
@@ -17,6 +17,8 @@
import java.net.MalformedURLException;
import java.util.Collection;
+import javax.xml.datatype.DatatypeConfigurationException;
+
import org.apache.commons.configuration.ConfigurationException;
import org.apache.juddi.api.impl.API_010_PublisherTest;
import org.apache.juddi.api.impl.UDDIInquiryImpl;
@@ -24,6 +26,7 @@
import org.apache.juddi.api.impl.UDDISecurityImpl;
import org.apache.juddi.api.impl.UDDISubscriptionImpl;
import org.apache.juddi.model.Subscription;
+import org.apache.juddi.model.UddiEntityPublisher;
import org.apache.juddi.subscription.SubscriptionNotifier;
import org.apache.log4j.Logger;
import org.junit.AfterClass;
@@ -37,6 +40,7 @@
import org.uddi.api_v3.tck.TckSecurity;
import org.uddi.api_v3.tck.TckSubscription;
import org.uddi.api_v3.tck.TckTModel;
+import org.uddi.sub_v3.GetSubscriptionResults;
import org.uddi.sub_v3.SubscriptionResultsList;
import org.uddi.v3_service.DispositionReportFaultMessage;
@@ -73,21 +77,26 @@
}
}
@Test
- public void testGetSubscriptionResults() throws ConfigurationException, MalformedURLException, DispositionReportFaultMessage
+ public void testGetSubscriptionResults()
+ throws ConfigurationException, MalformedURLException, DispositionReportFaultMessage, DatatypeConfigurationException
{
SubscriptionNotifier notifier = new SubscriptionNotifier();
notifier.cancel();
Collection<Subscription> subscriptions = notifier.getAllSubscriptions();
Assert.assertEquals(1, subscriptions.size());
Subscription subscription = subscriptions.iterator().next();
- SubscriptionResultsList resultList = notifier.getSubscriptionResultList(subscription);
+ GetSubscriptionResults getSubscriptionResults = notifier.buildGetSubscriptionResults(subscription);
+ getSubscriptionResults.setSubscriptionKey(subscription.getSubscriptionKey());
+ UddiEntityPublisher publisher = new UddiEntityPublisher();
+ publisher.setAuthorizedName(subscription.getAuthorizedName());
+ SubscriptionResultsList resultList = notifier.getSubscriptionImpl().getSubscriptionResults(getSubscriptionResults, publisher);
//We're expecting a changed service (since it was added in the
Assert.assertNotNull(resultList.getServiceList());
//We should detect these changes.
boolean hasChanges = notifier.resultListContainsChanges(resultList);
Assert.assertTrue(hasChanges);
System.out.print(resultList);
- notifier.notify(resultList);
+ notifier.notify(getSubscriptionResults,resultList);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: juddi-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: juddi-cvs-help@ws.apache.org