Author: cwiklik Date: Tue Jul 31 14:06:06 2018 New Revision: 1837148 URL: http://svn.apache.org/viewvc?rev=1837148&view=rev Log: UIMA-5815 modified to support clean shutdown
Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/Application.java Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/builders/PullServiceStepBuilder.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 Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/builders/PullServiceStepBuilder.java URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/builders/PullServiceStepBuilder.java?rev=1837148&r1=1837147&r2=1837148&view=diff ============================================================================== --- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/builders/PullServiceStepBuilder.java (original) +++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/builders/PullServiceStepBuilder.java Tue Jul 31 14:06:06 2018 @@ -18,11 +18,13 @@ */ package org.apache.uima.ducc.ps.service.builders; +import java.util.Objects; import java.util.concurrent.ExecutionException; import org.apache.uima.ducc.ps.service.IService; import org.apache.uima.ducc.ps.service.errors.ServiceException; import org.apache.uima.ducc.ps.service.errors.ServiceInitializationException; +import org.apache.uima.ducc.ps.service.main.Application; import org.apache.uima.ducc.ps.service.main.PullService; import org.apache.uima.ducc.ps.service.processor.IServiceProcessor; import org.apache.uima.ducc.ps.service.processor.uima.UimaServiceProcessor; @@ -30,8 +32,12 @@ import org.apache.uima.ducc.ps.service.r public final class PullServiceStepBuilder { private PullServiceStepBuilder() {} - + private static Application app; public static ServiceProcessorStep newBuilder() { + return newBuilder(null); + } + public static ServiceProcessorStep newBuilder(Application application) { + app = application; return new ServiceSteps(); } private static class ServiceSteps implements ServiceProcessorStep, RegistryStep, OptionalsStep, BuildStep { @@ -47,8 +53,13 @@ public final class PullServiceStepBuilde @Override public IService build() { - - PullService service = new PullService(serviceType); + PullService service = null; + if ( Objects.nonNull(app)) { + service = new PullService(serviceType, app); + } else { + service = new PullService(serviceType); + } + service.setScaleout(scaleout); if ( registryClient == null ) { service.setClientURL(clientURL); Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/Application.java URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/Application.java?rev=1837148&view=auto ============================================================================== --- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/Application.java (added) +++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/Application.java Tue Jul 31 14:06:06 2018 @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. +*/ + +package org.apache.uima.ducc.ps.service.main; + +public interface Application { + public void onServiceStop(); +} 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=1837148&r1=1837147&r2=1837148&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 Tue Jul 31 14:06:06 2018 @@ -22,6 +22,7 @@ package org.apache.uima.ducc.ps.service. import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -33,6 +34,7 @@ import java.util.concurrent.locks.Reentr import org.apache.uima.UIMAFramework; import org.apache.uima.ducc.ps.ServiceThreadFactory; import org.apache.uima.ducc.ps.service.IService; +//import org.apache.uima.ducc.ps.service.ServiceConfiguration; import org.apache.uima.ducc.ps.service.errors.IServiceErrorHandler; import org.apache.uima.ducc.ps.service.errors.ServiceException; import org.apache.uima.ducc.ps.service.errors.ServiceInitializationException; @@ -87,10 +89,20 @@ public class PullService implements ISer private Lock initLock = new ReentrantLock(); + private Application application=null; + + public PullService(String type) { + this(type,null); + + } + + public PullService(String type, Application application ) { this.type = type; + this.application = application; } + public String getType() { return type; } @@ -244,7 +256,7 @@ public class PullService implements ISer public void stop() { // process threads should stop first to avoid trying to pull new // work while threads are running - stopProcessThreads(); + stopProcessThreadPool(); // close connection to remote client and cleanup stopTransport(); stopProtocolHandler(false); @@ -269,8 +281,13 @@ public class PullService implements ISer String result = future.get(); logger.log(Level.INFO, "Thread:" + Thread.currentThread().getName() + " Terminated " + new Date() + "::" + result); } + stopProcessThreadPool(); + if ( Objects.nonNull(application) ) { + application.onServiceStop(); + } } + private void initializeTransport() throws ServiceInitializationException { try { transport.initialize(); @@ -289,11 +306,16 @@ public class PullService implements ISer } } - private void stopProcessThreads() { - if (threadPool != null && !threadPool.isShutdown() && !threadPool.isTerminating() && !threadPool.isTerminated()) { + private void stopProcessThreadPool() { +// if (threadPool != null && !threadPool.isShutdown() && !threadPool.isTerminating() && !threadPool.isTerminated()) { + if (threadPool != null ) { + try { + logger.log(Level.INFO, "Stopping Process Thread Pool"); threadPool.shutdownNow(); threadPool.awaitTermination(0, TimeUnit.MILLISECONDS); + logger.log(Level.INFO, "Process Thread Pool Stopped"); + } catch (InterruptedException e) { Thread.currentThread().interrupt(); } 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=1837148&r1=1837147&r2=1837148&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 Tue Jul 31 14:06:06 2018 @@ -41,7 +41,7 @@ import org.apache.uima.ducc.ps.service.r import org.apache.uima.util.Level; import org.apache.uima.util.Logger; -public class ServiceWrapper { +public class ServiceWrapper implements Application { private Logger logger = UIMAFramework.getLogger(ServiceWrapper.class); private IService service = null; // holds -D's and env variables needed at runtime @@ -166,7 +166,7 @@ public class ServiceWrapper { Objects.requireNonNull(processor, "Unable to instantiate IServiceProcessor"); if ( serviceConfiguration.getCustomRegistryClass() != null ) { - service = PullServiceStepBuilder.newBuilder() + service = PullServiceStepBuilder.newBuilder(this) .withProcessor(processor) .withRegistry(getRegistryClient()) .withType(serviceConfiguration.getServiceType()) @@ -174,7 +174,7 @@ public class ServiceWrapper { .withOptionalsDone().build(); } else { - service = PullServiceStepBuilder.newBuilder() + service = PullServiceStepBuilder.newBuilder(this) .withProcessor(processor) .withClientURL(serviceConfiguration.getClientURL()) .withType(serviceConfiguration.getServiceType()) @@ -215,7 +215,15 @@ public class ServiceWrapper { public void start() throws ServiceException, ExecutionException { service.start(); } - + public void stopJmx() { + try { + if ( Objects.nonNull(jmxAgent)) { + jmxAgent.stop(); + } + } catch( Exception e) { + + } + } public void stop() { try { service.stop(); @@ -228,8 +236,10 @@ public class ServiceWrapper { } public void quiesceAndStop() { try { - service.quiesceAndStop(); + logger.log(Level.INFO,"Stoppng JMX Agent"); jmxAgent.stop(); + + service.quiesceAndStop(); } catch( Exception e ) { logger.log(Level.WARNING,"",e); @@ -269,5 +279,10 @@ public class ServiceWrapper { } } } + @Override + public void onServiceStop() { + stopJmx(); + + } }