in uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java [1922:2083]
public void stop(Throwable cause, String aCasReferenceId, boolean shutdownNow ) {
if (!isStopped()) {
setStopped();
}
try {
// Remove all MBeans registered by this service
jmxManagement.destroy();
} catch (Exception e) {
}
/*
* Send an exception to the client if this is a top level service
*/
if (cause != null && aCasReferenceId != null && getOutputChannel() != null
&& isTopLevelComponent()) {
Endpoint clientEndpoint = null;
if ((clientEndpoint = getClientEndpoint()) != null) {
try {
getOutputChannel().sendReply(cause, aCasReferenceId, null, clientEndpoint,
clientEndpoint.getCommand());
} catch (Exception e) {
if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.WARNING)) {
UIMAFramework.getLogger(CLASS_NAME).logrb(Level.WARNING, CLASS_NAME.getName(),
"stop", UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE,
"UIMAEE_service_exception_WARNING", getComponentName());
UIMAFramework.getLogger(CLASS_NAME).logrb(Level.WARNING, CLASS_NAME.getName(), "stop",
UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE, "UIMAEE_exception__WARNING",
e);
}
}
}
}
if (daemonServiceExecutor != null) {
daemonServiceExecutor.shutdown();
}
if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.INFO)) {
UIMAFramework.getLogger(CLASS_NAME).logrb(Level.INFO, getClass().getName(), "stop",
UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE, "UIMAEE_stop__INFO",
new Object[] { getComponentName() });
}
if (getOutputChannel() != null) {
getOutputChannel().cancelTimers();
}
if (this instanceof PrimitiveAnalysisEngineController) {
getControllerLatch().release();
// Stops the input channel of this service
stopInputChannels(InputChannel.CloseAllChannels, shutdownNow);
} else {
((AggregateAnalysisEngineController_impl) this).stopTimers();
// Stops ALL input channels of this service including the reply channels
stopInputChannels(InputChannel.CloseAllChannels,shutdownNow);
List<AnalysisEngineController> colocatedControllerList =
((AggregateAnalysisEngineController_impl)this).getChildControllerList();
synchronized(colocatedControllerList) {
if ( colocatedControllerList.size() > 0 ) {
for( AnalysisEngineController childController : colocatedControllerList ) {
if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.INFO)) {
UIMAFramework.getLogger(CLASS_NAME).logrb(Level.INFO, getClass().getName(), "stop",
UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE, "UIMAEE_stop_delegate__INFO",
new Object[] { getComponentName(), childController.getComponentName() });
}
childController.stop();
childController.getControllerLatch().release();
}
}
}
}
// Stops internal transport used to communicate with colocated services
stopTransportLayer();
for (Iterator it = getLocalCache().entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
CasStateEntry casStateEntry = (CasStateEntry) entry.getValue();
if ( casStateEntry.isSubordinate() ) {
try {
getInProcessCache().getCacheEntryForCAS(casStateEntry.getCasReferenceId()).getCas().release();
} catch( Exception e) {
}
}
}
getInProcessCache().releaseAllCASes();
getLocalCache().clear();
releasedAllCASes = true;
if (!isTopLevelComponent()) {
adminContext = null;
} else {
// Stop output channel
getOutputChannel().stop();
try {
getInProcessCache().destroy();
} catch (Exception e) {
}
}
if (this instanceof AggregateAnalysisEngineController_impl) {
((AggregateAnalysisEngineController_impl) this).cleanUp();
if (!((AggregateAnalysisEngineController_impl) this).initialized) {
if ( cause != null ) {
notifyListenersWithInitializationStatus(new ResourceInitializationException(cause));
} else {
notifyListenersWithInitializationStatus(new ResourceInitializationException());
}
}
}
if (statsMap != null) {
statsMap.clear();
}
if (inputChannelList != null) {
inputChannelList.clear();
}
//inputChannel = null;
if (serviceErrorMap != null) {
serviceErrorMap.clear();
}
// TODO any reason this list needs to be cleared on Stop???
if (unregisteredDelegateList != null) {
unregisteredDelegateList.clear();
}
if (casManager != null) {
if ( casManager instanceof EECasManager_impl) {
try {
((EECasManager_impl)casManager).destroy();
} catch( Throwable t) {}
} else if ( casManager instanceof AsynchAECasManager_impl ) {
((AsynchAECasManager_impl)casManager).destroy();
}
casManager = null;
}
if (transports != null) {
transports.clear();
}
if (threadStateMap != null) {
threadStateMap.clear();
}
if (inputChannelMap != null) {
inputChannelMap.clear();
}
if (controllerListeners != null) {
controllerListeners.clear();
}
if (perCasStatistics != null) {
perCasStatistics.clear();
}
if (cmOutstandingCASes != null) {
cmOutstandingCASes.clear();
}
if (messageListeners != null) {
messageListeners.clear();
}
EECasManager_impl cm = (EECasManager_impl) getResourceManager().getCasManager();
if (cm != null) {
cm.cleanUp();
}
super.destroy();
}