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