You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2018/07/18 20:42:44 UTC

svn commit: r1836233 - in /uima/uima-ducc/trunk/uima-ducc-pullservice/src: main/java/org/apache/uima/ducc/ps/service/ main/java/org/apache/uima/ducc/ps/service/main/ main/java/org/apache/uima/ducc/ps/service/protocol/builtin/ main/java/org/apache/uima/...

Author: cwiklik
Date: Wed Jul 18 20:42:44 2018
New Revision: 1836233

URL: http://svn.apache.org/viewvc?rev=1836233&view=rev
Log:
UIMA-5815 support quiesce on SIGTERM

Modified:
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/Lifecycle.java
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/PullService.java
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/ServiceWrapper.java
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/transport/http/HttpServiceTransport.java
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/JunitPullServiceTestCase.java
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/wrapper/JUnitServiceWrapperTestCase.java
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/transport/JunitProtocolHandlerTestCase.java

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/Lifecycle.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/Lifecycle.java?rev=1836233&r1=1836232&r2=1836233&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/Lifecycle.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/Lifecycle.java Wed Jul 18 20:42:44 2018
@@ -25,4 +25,5 @@ import org.apache.uima.ducc.ps.service.e
 public interface Lifecycle {
 	public void start() throws ExecutionException, ServiceException;
 	public void stop();
+    public void quiesceAndStop();
 }

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/PullService.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/PullService.java?rev=1836233&r1=1836232&r2=1836233&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/PullService.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/PullService.java Wed Jul 18 20:42:44 2018
@@ -250,12 +250,21 @@ public class PullService implements ISer
 		stopProcessThreads();
 		// close connection to remote client and cleanup
 		stopTransport();
-		stopProtocolHandler();
+		stopProtocolHandler(false);
 		stopServiceProcessor();
-        // monitor should be stopped last to keep posting updates to observer
+	    // monitor should be stopped last to keep posting updates to observer
 		stopMonitor();
 	}
-
+    public void quiesceAndStop() {
+		// when quiescing, let the process threads finish processing 
+    	stopProtocolHandler(true);
+		
+		// close connection to remote client and cleanup
+		stopTransport();
+		stopServiceProcessor();
+        // monitor should be stopped last to keep posting updates to observer
+		stopMonitor();
+    }
 	private void waitForProcessThreads() throws InterruptedException, ExecutionException {
 		for (Future<String> future : threadHandleList) {
 			// print the return value of Future, notice the output delay in console
@@ -306,8 +315,12 @@ public class PullService implements ISer
 			serviceProcessor.stop();
 		}
 	}
-	private void stopProtocolHandler() {
-
+	private void stopProtocolHandler(boolean quiesce) {
+		if ( quiesce ) {
+			protocolHandler.quiesceAndStop();
+		} else {
+			protocolHandler.stop();
+		}
 	}
 	private void stopTransport() {
 		transport.stop();

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/ServiceWrapper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/ServiceWrapper.java?rev=1836233&r1=1836232&r2=1836233&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/ServiceWrapper.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/ServiceWrapper.java Wed Jul 18 20:42:44 2018
@@ -19,7 +19,6 @@
 package org.apache.uima.ducc.ps.service.main;
 
 
-import java.io.IOException;
 import java.lang.reflect.Constructor;
 import java.util.Objects;
 import java.util.concurrent.ExecutionException;
@@ -186,15 +185,25 @@ public class ServiceWrapper {
 	}
 
 	public void stop() {
-		service.stop();
 		try {
+			service.stop();
 			jmxAgent.stop();
-		} catch( IOException e ) {
-			
+		} catch( Exception e ) {
+			logger.log(Level.WARNING,"",e);
+
 		}
 		
 	}
+	public void quiesceAndStop() {
+		try {
+			service.quiesceAndStop();
+			jmxAgent.stop();
+		} catch( Exception e ) {
+			logger.log(Level.WARNING,"",e);
 
+		}
+		
+	}
 	public static void main(String[] args) {
 		ServiceWrapper wrapper = null;
 		try {
@@ -219,9 +228,9 @@ public class ServiceWrapper {
 		    @Override
 		    public void run() {
 		      try {
-		          logger.log(Level.INFO, "Pull Service Caught SIGTERM Signal - Stopping ...");
+		          logger.log(Level.INFO, "Pull Service Caught SIGTERM Signal - Stopping (Quiescing) ...");
 
-		        serviceWrapper.stop();
+		        serviceWrapper.quiesceAndStop();
 
 		      } catch (Exception e) {
 		    	  logger.log(Level.WARNING,"", e);

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java?rev=1836233&r1=1836232&r2=1836233&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java Wed Jul 18 20:42:44 2018
@@ -52,6 +52,7 @@ public class DefaultServiceProtocolHandl
 	Logger logger = UIMAFramework.getLogger(DefaultServiceProtocolHandler.class);
 	private volatile boolean initError = false;
 	private volatile boolean running = false;
+	private volatile boolean quiescing = false;
 	private IServiceTransport transport;
 	private IServiceProcessor processor;
 	private INoTaskAvailableStrategy noTaskStrategy;
@@ -214,8 +215,10 @@ public class DefaultServiceProtocolHandl
 				// send GET Request
 				transaction = callGet(new MetaTaskTransaction());
 				// the code may have blocked in callGet for awhile, so check
-				// if service is still running
-				if ( !running ) {
+				// if service is still running. If this service is in quiescing
+				// mode, finish processing current task. The while-loop will
+				// terminate when the task is finished.
+				if ( !running && !quiescing  ) {
 					break;
 				}
 				if (transaction.getMetaTask() == null || transaction.getMetaTask().getUserSpaceTask() == null ) {
@@ -227,7 +230,7 @@ public class DefaultServiceProtocolHandl
 				
 				// send ACK 
 				transaction = callAck(transaction);
-				if (!running) {
+				if (!running  && !quiescing ) {
 					break;
 				}
 				IProcessResult processResult = processor.process((String) task);
@@ -241,7 +244,6 @@ public class DefaultServiceProtocolHandl
 					mc.setUserSpaceException(errorAsString);
 				} else {
 					// success
-					// System.out.println("Performance Metrics:"+processResult.getResult());
 					transaction.getMetaTask().setPerformanceMetrics(processResult.getResult());
 				}
 				// send END Request
@@ -282,16 +284,31 @@ public class DefaultServiceProtocolHandl
 
 	
 	private void delegateStop() {
-		service.stop();
+		service.stop(); // dont quiesce
 	}
 	@Override
 	public void stop() {
+		quiescing = false;
 		running = false;
 		if ( logger.isLoggable(Level.INFO)) {
 			logger.log(Level.INFO, this.getClass().getName()+" stop() called");
 		}
 	}
 	@Override
+	public void quiesceAndStop() {
+		quiescing = true;
+		running = false;
+		if ( logger.isLoggable(Level.INFO)) {
+			logger.log(Level.INFO, this.getClass().getName()+" quiesceAndStop() called");
+		}
+		try {
+			// wait for process threads to terminate
+			stopLatch.await();
+			logger.log(Level.INFO, this.getClass().getName()+" All process threads completed quiesce");
+		} catch( Exception e ) {
+		}
+	}
+	@Override
 	public void start() {
 		running = true;
 		// process threads are initialized and are awaiting latch countdown

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/transport/http/HttpServiceTransport.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/transport/http/HttpServiceTransport.java?rev=1836233&r1=1836232&r2=1836233&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/transport/http/HttpServiceTransport.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/transport/http/HttpServiceTransport.java Wed Jul 18 20:42:44 2018
@@ -66,7 +66,6 @@ public class HttpServiceTransport implem
 	private int clientMaxConnectionsPerRoute = 60;
 	private int clientMaxConnectionsPerHostPort = 0;
 	private ReentrantLock lock = new ReentrantLock();
-//	private CountDownLatch initLatch = new CountDownLatch(1);
 	private ReentrantLock registryLookupLock = new ReentrantLock();
     private long threadSleepTime=10000; // millis
     private final String nodeIP;
@@ -82,30 +81,7 @@ public class HttpServiceTransport implem
     private volatile boolean stopping = false;
 	private volatile boolean running = false;
 	private volatile boolean log = true;
- /*  
-	public HttpServiceTransport(IRegistryClient registryClient, int scaleout) { 
-		// create instance of HttpServiceTransport with RegistryClient. The assumption
-		// is that the implementation of the client has been fully configured with
-		// registry URI and target id. We just pass in a NoOpTarget instead of null.
-		// The initialize() will use registry to lookup the client TargetURI and will
-		// create correct instance of ITargetURI based on what registry returns
-//		this(new NoOpTargetURI(), registryClient, scaleout);
-		this(new NoOpTargetURI(), registryClient, scaleout);
-		
-	}
-	*/
-//	private HttpServiceTransport(ITargetURI targetUrl, IRegistryClient registryClient, int scaleout) {
-	public HttpServiceTransport(IRegistryClient registryClient, int scaleout) throws ServiceException {
-		//TargetURIFactory.newTarget(registryClient.lookUp(new NoOpTargetURI().asString()));
-		/*
-		if ( registryClient == null ) {  
-			// the default client just returns the same targetUrl
-			// No lookups
-			this.registryClient = new DefaultRegistryClient(targetUrl);
-		} else {
-			this.registryClient = registryClient;
-		}
-		*/
+ 	public HttpServiceTransport(IRegistryClient registryClient, int scaleout) throws ServiceException {
 		this.registryClient = registryClient;
 		clientMaxConnections = scaleout;
 
@@ -152,7 +128,6 @@ public class HttpServiceTransport implem
 		while( !stopping ) {
 			try {
 				String newTarget = registryClient.lookUp(currentTargetUrl.asString());
-			//	logger.log(Level.INFO, "Registry lookup succesfull - current target URL:"+newTarget);
 				currentTargetUrl = TargetURIFactory.newTarget(newTarget);
 				break;
 			} catch(  Exception e) {
@@ -184,11 +159,6 @@ public class HttpServiceTransport implem
         	logger.log(Level.FINE, "threadId:"+transaction.getRequesterThreadId());
 
     	}
-//
-// 		transaction.setRequesterNodeName(nodeName);
-// 		transaction.setRequesterProcessId(pid);
-// 		transaction.setRequesterProcessName(value);
-// 		transaction.setRequesterThreadId((int)Thread.currentThread().getId());
  		
 	}
 	public void initialize() throws ServiceInitializationException { 
@@ -211,19 +181,6 @@ public class HttpServiceTransport implem
 			cMgr.setMaxPerRoute(new HttpRoute(httpHost), clientMaxConnectionsPerHostPort);
 		}
 		
-		int timeout = 30;
-//		SocketConfig socketConfig = SocketConfig.custom().setSoTimeout(timeout*1000).build();
- //       RequestConfig requestConfig = RequestConfig.custom()
-   //     		  .setConnectTimeout(timeout * 1000)
-     //   		  .setConnectionRequestTimeout(timeout * 1000)
-       // 		  .setSocketTimeout(0).build();
-  //      cMgr.setDefaultSocketConfig(socketConfig);
-        
-//        System.out.println("HttpTransport Max Connections:"+cMgr.getMaxTotal());
-//        httpClient = HttpClients.custom().
-  //      		setConnectionManager(cMgr).
-    //    		setDefaultRequestConfig(requestConfig).build();
-        
 		httpClient = HttpClients.custom().setConnectionManager(cMgr).build();
 		running = true;
 
@@ -258,7 +215,6 @@ public class HttpServiceTransport implem
 		// retry until service is stopped
 		while (isRunning()) {
 			try {
-				//response = dispatch(request);
 				response =  doPost(postMethod);
 				// success, so release the lock so that other waiting threads
 				// can retry command
@@ -307,7 +263,6 @@ public class HttpServiceTransport implem
 	}
 	@Override
 	public String dispatch(String serializedRequest) throws TransportException  {
-//		System.out.println(".... in dispatch()...stopping="+stopping);
 		if ( stopping ) {
 			throw new IllegalStateException("Service transport has been stopped, unable to dispatch request");
 		}
@@ -326,14 +281,11 @@ public class HttpServiceTransport implem
 		} catch ( NoHttpResponseException ex ) {
 			if ( stopping ) {
 				System.out.println("Process Thread:"+Thread.currentThread().getId()+" NoHttpResponseException ");
-				//ex.printStackTrace();
 				throw new TransportException(ex);
 			} else {
 				serializedResponse = retryUntilSuccessfull(serializedRequest, postMethod);
 			}
 
-			// timeout so try again
-			//ex.printStackTrace();
 		} catch (HttpHostConnectException | UnknownHostException ex ) {
 			if ( stopping ) {
 				System.out.println("Process Thread:"+Thread.currentThread().getId()+" HttpHostConnectException ");
@@ -368,7 +320,6 @@ public class HttpServiceTransport implem
 			
 		} catch (SocketException ex) {
 			if ( stopping ) {
-				//System.out.println("Process Thread:"+Thread.currentThread().getId()+" SocketException ");
 				throw new TransportException(ex);
 			}
 			
@@ -404,7 +355,6 @@ public class HttpServiceTransport implem
 
 		stopping = true;
 		running = false;
-		//initLatch.countDown();
 		logger.log(Level.INFO,this.getClass().getName()+" stop() called");
 		if ( cMgr != null ) {
 			cMgr.shutdown();

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/JunitPullServiceTestCase.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/JunitPullServiceTestCase.java?rev=1836233&r1=1836232&r2=1836233&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/JunitPullServiceTestCase.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/JunitPullServiceTestCase.java Wed Jul 18 20:42:44 2018
@@ -19,6 +19,7 @@ public class JunitPullServiceTestCase ex
 
 	@Test
 	public void testPullService() throws Exception {
+		System.out.println("----------------- testPullService -------------------");
 		int scaleout = 2;
 		super.startJetty(false);  // don't block
 		String analysisEngineDescriptor = "TestAAE";
@@ -36,7 +37,7 @@ public class JunitPullServiceTestCase ex
 			service.initialize();
 			Timer fTimer = new Timer("testPullService Timer");
 			// after 5secs stop the pull service
-			fTimer.schedule(new MyTimerTask(service, fTimer), 35000);
+			fTimer.schedule(new MyTimerTask(service, fTimer, false), 35000);
 			
 			service.start();
 
@@ -47,7 +48,39 @@ public class JunitPullServiceTestCase ex
 		}
 	}
 	@Test
+	public void testPullServiceQuiesce() throws Exception {
+		System.out.println("----------------- testPullServiceQuiesce -------------------");
+		int scaleout = 2;
+		super.startJetty(false);  // don't block
+		String analysisEngineDescriptor = "TestAAE";
+		System.setProperty("ducc.deploy.JpType", "uima");
+		IServiceProcessor processor = new 
+				UimaServiceProcessor(analysisEngineDescriptor);
+
+		String tasURL = "http://localhost:8080/test";
+		
+		IService service = PullServiceStepBuilder.newBuilder().withProcessor(processor)
+				.withClientURL(tasURL).withType("Note Service").withScaleout(scaleout)
+				.withOptionalsDone().build();
+
+		try {
+			service.initialize();
+			Timer fTimer = new Timer("testPullService Timer");
+			// after 5secs stop the pull service
+			fTimer.schedule(new MyTimerTask(service, fTimer, true), 35000);
+			
+			service.start();
+
+		} catch (ServiceInitializationException e) {
+			throw e;
+		} catch (Exception e) {
+			throw e;
+		}
+	}
+
+	@Test
 	public void testPullServiceTimeout() throws Exception {
+		System.out.println("----------------- testPullServiceTimeout -------------------");
 		super.startJetty(true);  // true=client blocks all POST requests
 		int scaleout = 12;
 		String analysisEngineDescriptor = "TestAAE";
@@ -65,7 +98,7 @@ public class JunitPullServiceTestCase ex
 			System.out.println("----------- Starting Service .....");
 			Timer fTimer = new Timer();
 			//after 10sec stop the service
-			fTimer.schedule(new MyTimerTask(service, fTimer), 40000);
+			fTimer.schedule(new MyTimerTask(service, fTimer, false), 40000);
 
 			service.start();
 
@@ -79,6 +112,7 @@ public class JunitPullServiceTestCase ex
 	
 	@Test
 	public void testPullServiceWithProcessFailure() throws Exception {
+		System.out.println("----------------- testPullServiceWithProcessFailure -------------------");
 		int scaleout = 2;
 		super.startJetty(false);  // don't block
 		String analysisEngineDescriptor = "NoOpAE";
@@ -96,7 +130,7 @@ public class JunitPullServiceTestCase ex
 			service.initialize();
 			Timer fTimer = new Timer("testPullService Timer");
 			// after 5secs stop the pull service
-			fTimer.schedule(new MyTimerTask(service, fTimer), 35000);
+			fTimer.schedule(new MyTimerTask(service, fTimer, false), 35000);
 			
 			service.start();
 
@@ -139,24 +173,28 @@ public class JunitPullServiceTestCase ex
 	class MyTimerTask extends TimerTask {
 		final IService service;
 		final Timer fTimer;
-		MyTimerTask(IService service, Timer fTimer) {
+		final boolean quiesce;
+		
+		MyTimerTask(IService service, Timer fTimer, boolean quiesce) {
 			this.service = service;
 			this.fTimer = fTimer;
+			this.quiesce = quiesce;
 		}
-		
-		        @Override
-		
-		        public void run() {
-		        	this.cancel();
-		        	fTimer.purge();
-		        	fTimer.cancel();
-		        	System.out.println("Timmer popped - stopping service");
-		        	service.stop();
-		        	
-		        }
-		
-		 
-		
-		    }
+
+		@Override
+
+		public void run() {
+			this.cancel();
+			fTimer.purge();
+			fTimer.cancel();
+			System.out.println("Timmer popped - stopping service");
+			if (quiesce ) {
+				service.quiesceAndStop();
+			} else {
+				service.stop();
+			}
+		}
+
+	}
 
 }

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/wrapper/JUnitServiceWrapperTestCase.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/wrapper/JUnitServiceWrapperTestCase.java?rev=1836233&r1=1836232&r2=1836233&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/wrapper/JUnitServiceWrapperTestCase.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/service/wrapper/JUnitServiceWrapperTestCase.java Wed Jul 18 20:42:44 2018
@@ -31,6 +31,8 @@ public class JUnitServiceWrapperTestCase
 
 	@Test
 	public void testPullServiceWrapper() throws Exception {
+		System.out.println("-------------------------- testPullServiceWrapper ----------------------");;
+
 		//int scaleout = 2;
 		StateMonitor monitor = new StateMonitor();
 		monitor.start();
@@ -44,7 +46,7 @@ public class JUnitServiceWrapperTestCase
 			System.setProperty("ducc.deploy.JdURL", tasURL);
 			System.setProperty("ducc.deploy.JpThreadCount","4");
 			System.setProperty("ducc.deploy.service.type", "NotesService");
-			System.getProperty("ducc.deploy.JpType", "uima");
+			System.setProperty("ducc.deploy.JpType", "uima");
 
 			ServiceWrapper service = new ServiceWrapper();
 
@@ -69,6 +71,7 @@ public class JUnitServiceWrapperTestCase
 	
 	@Test
 	public void testPullServiceWrapperWithProcessFailure() throws Exception {
+		System.out.println("-------------------------- testPullServiceWrapperWithProcessFailure ----------------------");;
 		//int scaleout = 2;
 		StateMonitor monitor = new StateMonitor();
 		monitor.start();
@@ -84,7 +87,7 @@ public class JUnitServiceWrapperTestCase
 			System.setProperty("ducc.deploy.JdURL", tasURL);
 			System.setProperty("ducc.deploy.JpThreadCount","4");
 			System.setProperty("ducc.deploy.service.type", "NotesService");
-			System.getProperty("ducc.deploy.JpType", "uima");
+			System.setProperty("ducc.deploy.JpType", "uima");
 
 			ServiceWrapper service = new ServiceWrapper();
 

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/transport/JunitProtocolHandlerTestCase.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/transport/JunitProtocolHandlerTestCase.java?rev=1836233&r1=1836232&r2=1836233&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/transport/JunitProtocolHandlerTestCase.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/test/java/org/apache/uima/ducc/ps/transport/JunitProtocolHandlerTestCase.java Wed Jul 18 20:42:44 2018
@@ -125,30 +125,35 @@ public class JunitProtocolHandlerTestCas
 			transport.stop();
 			processor.stop();
 		}
-
+		@Override
+		public void quiesceAndStop() {
+			protocolHandler.quiesceAndStop();
+			threadPool.shutdown();
+			transport.stop();
+			processor.stop();
+		}
 		@Override
 		public void initialize() throws ServiceInitializationException {
-			
-				List<Future<String>> threadHandleList =
-						new ArrayList<Future<String>>();
-				threadPool = 
-						new ScheduledThreadPoolExecutor(scaleout, new ServiceThreadFactory());
-				
-				
-		    	// Create and start worker threads that pull Work Items from a client
-				for (int j = 0; j < scaleout; j++) {
-					threadHandleList.add( threadPool.submit(protocolHandler));
-				}
-				try {
-					// wait until all process threads initialize
-					threadsReady.await();
-					
-				} catch( InterruptedException e) {
-					Thread.currentThread().interrupt();
-					threadPool.shutdownNow();
-					throw new ServiceInitializationException("Service interrupted during initialization - shutting down process threads");
-				}
+
+			List<Future<String>> threadHandleList = new ArrayList<Future<String>>();
+			threadPool = new ScheduledThreadPoolExecutor(scaleout, new ServiceThreadFactory());
+
+			// Create and start worker threads that pull Work Items from a client
+			for (int j = 0; j < scaleout; j++) {
+				threadHandleList.add(threadPool.submit(protocolHandler));
+			}
+			try {
+				// wait until all process threads initialize
+				threadsReady.await();
+
+			} catch (InterruptedException e) {
+				Thread.currentThread().interrupt();
+				threadPool.shutdownNow();
+				throw new ServiceInitializationException(
+						"Service interrupted during initialization - shutting down process threads");
+			}
 		}
+
 		@Override
 		public String getType() {
 			// TODO Auto-generated method stub