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/11/29 17:23:09 UTC

svn commit: r1847732 [3/16] - in /uima/uima-as/branches/uima-as-3/uimaj-as-core: ./ .settings/ src/main/java/org/apache/uima/aae/client/ src/main/java/org/apache/uima/aae/component/ src/main/java/org/apache/uima/aae/controller/ src/main/java/org/apache...

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/AsynchronousUimaASService.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/AsynchronousUimaASService.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/AsynchronousUimaASService.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/AsynchronousUimaASService.java Thu Nov 29 17:23:00 2018
@@ -19,6 +19,9 @@
 package org.apache.uima.aae.service;
 
 import java.util.HashSet;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -26,11 +29,20 @@ import java.util.concurrent.LinkedBlocki
 import org.apache.uima.aae.InProcessCache;
 import org.apache.uima.aae.InProcessCache.CacheEntry;
 import org.apache.uima.aae.controller.AnalysisEngineController;
+import org.apache.uima.aae.definition.connectors.Endpoints;
+import org.apache.uima.aae.definition.connectors.UimaAsConsumer;
+import org.apache.uima.aae.definition.connectors.UimaAsConsumer.ConsumerType;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
 import org.apache.uima.aae.message.AsynchAEMessage;
 import org.apache.uima.aae.message.MessageContext;
+import org.apache.uima.aae.message.MessageProcessor;
+import org.apache.uima.aae.message.Origin;
+import org.apache.uima.aae.message.Target;
+import org.apache.uima.aae.message.UimaAsOrigin;
+import org.apache.uima.aae.service.command.UimaAsMessageProcessor;
 import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData;
 import org.apache.uima.as.client.DirectMessage;
-import org.apache.uima.as.client.DirectMessageContext;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.resource.ResourceSpecifier;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@@ -50,16 +62,20 @@ implements UimaASService {
 	private BlockingQueue<DirectMessage> replyQueue = 
 	    new LinkedBlockingQueue<>();
 	private String tlc_bean_name;
+	private UimaAsEndpoint directEndpoint;
 	
+	private boolean initialized = false;
     private AnnotationConfigApplicationContext context = 
     		new AnnotationConfigApplicationContext();
     
     private String endpoint;
     
-	public AsynchronousUimaASService(String endpoint) { 
-		this.endpoint = endpoint;
+	public AsynchronousUimaASService(String name) { 
+		endpoint = super.name = name;
+	}
+	public AsynchronousUimaASService(UimaAsEndpoint endpoint) { 
+		super(endpoint);
 	}
-	
 	public void setTopLevelControlleBeanName(String beanName) {
 		tlc_bean_name = beanName;
 	}
@@ -129,7 +145,7 @@ implements UimaASService {
 		inProcessCache.remove(casReferenceId);
 		System.out.println("AsynchronousUimaASService.removeFromCache()-cache size:"+inProcessCache.getSize());
 	}
-	private CacheEntry add2Cache( CAS cas, MessageContext messageContext, String casReferenceId ) throws Exception {
+	public CacheEntry add2Cache( CAS cas, MessageContext messageContext, String casReferenceId ) throws Exception {
 		return inProcessCache.register(cas, messageContext, casReferenceId);
 	}
 	public String getId() {
@@ -163,9 +179,63 @@ implements UimaASService {
 	public CAS getCAS() throws Exception {
 		return null;
 	}
+    private String getServiceUri(ConsumerType consumerType) {
+    	return new StringBuilder(EndpointType.Direct.getName()).append(controller.getComponentName()).append(":").append(consumerType.name()).toString();
+    }
+	public void connect(UimaAsEndpoint clientEndpoint) throws Exception {
+    	UimaAsEndpoint serviceEndpoint =
+    			getDirectEndpoint();
+    	Map<Target, UimaAsConsumer> serviceConsumers =
+    			serviceEndpoint.getConsumers();
+
+//    	Origin clientOrigin = new UimaAsOrigin(EndpointType.Direct.getName()+"Client");
+ //   	Origin serviceOrigin = new UimaAsOrigin(controller.getComponentName(), EndpointType.Direct);
+    	for( Entry<Target, UimaAsConsumer> serviceConsumer : serviceConsumers.entrySet() ) {
+    		ConsumerType consumerType = serviceConsumer.getValue().getType();
+    	//	StringBuilder sb = new StringBuilder(EndpointType.Direct.getName()).
+		//			append(clientOrigin.getName());
+    		switch(consumerType) {
+    		case GetMetaRequest:
+    			// creates client producer for the service consumer and links the two
+    			clientEndpoint.createProducer(serviceConsumer.getValue(), controller.getComponentName()); //getServiceUri(consumerType));
+    			// creates client consumer for GetMeta replies
+    			UimaAsConsumer clientGetMetaResponseConsumer
+    				= clientEndpoint.createConsumer( ConsumerType.GetMetaResponse, 1);
+    		//	sb.append(":").append(ConsumerType.GetMetaResponse.name());
+    			serviceEndpoint.createProducer(clientGetMetaResponseConsumer, "Client");
+    			break;
+    		case ProcessCASRequest:
+    			clientEndpoint.createProducer(serviceConsumer.getValue(), controller.getComponentName()); //getServiceUri(consumerType));
+    			UimaAsConsumer clientProcessCASResponseConsumer
+					= clientEndpoint.createConsumer( ConsumerType.ProcessCASResponse, 1);
+    		//	sb.append(":").append(ConsumerType.ProcessCASResponse.name());
+    			serviceEndpoint.createProducer(clientProcessCASResponseConsumer, "Client");
+    			
+    			break;
+    		case CpcRequest:
+    			clientEndpoint.createProducer(serviceConsumer.getValue(), controller.getComponentName()); //getServiceUri(consumerType));
+    			UimaAsConsumer clientCpcResponseConsumer
+					= clientEndpoint.createConsumer( ConsumerType.CpcResponse, 1);
+    		//	sb.append(":").append(ConsumerType.CpcResponse.name());
+    			serviceEndpoint.createProducer(clientCpcResponseConsumer, "Client");
+    			
+    			break;
+    			
+       		case FreeCASRequest:
+    			clientEndpoint.createProducer(serviceConsumer.getValue(), controller.getComponentName()); //getServiceUri(consumerType));
+    			
+    			break;
+
+       		default:
+    				
+    		}
+    	}
+    }
 
 	public void process(CAS cas, String casReferenceId) throws Exception {
 
+		/*
+		 * 10/19/19 JC replace with new methodology
 		DirectMessage processMessage = 
 				new DirectMessage().
 				withCommand(AsynchAEMessage.Process).
@@ -177,12 +247,29 @@ implements UimaASService {
 
 		DirectMessageContext messageContext = 
 				new DirectMessageContext(processMessage, CLIENT,"");
-		add2Cache(cas, messageContext, casReferenceId);
+		*/
 		
-		processRequestQueue.add(processMessage);
-	}
+		
+		UimaAsEndpoint serviceEndpoint = super.getDirectEndpoint();
+		MessageContext processMessage =
+			serviceEndpoint.newMessageBuilder()
+				.newProcessCASRequestMessage(new UimaAsOrigin(CLIENT, EndpointType.Direct))
+				.withCasReferenceId(casReferenceId)
+				.withPayload(AsynchAEMessage.CASRefID)
+				.build();
+
+		add2Cache(cas, processMessage, casReferenceId);
+		
+		super.getDirectEndpoint().dispatch(processMessage, "direct:service");
+		
+		
+//		processRequestQueue.add((DirectMessage)processMessage.getRawMessage());
+}
 
 	public void sendGetMetaRequest() throws Exception {
+		/*
+		 * 
+		
 		DirectMessage getMetaMessage = 
 				new DirectMessage().
 				withCommand(AsynchAEMessage.GetMeta).
@@ -190,10 +277,18 @@ implements UimaASService {
 				withOrigin(CLIENT).
 				withPayload(AsynchAEMessage.None).
 				withReplyQueue(replyQueue);
-		
-		getMetaRequestQueue.add(getMetaMessage);
+		 */
+		UimaAsEndpoint serviceEndpoint = super.getDirectEndpoint();
+		MessageContext getMetaMessage =
+				serviceEndpoint.newMessageBuilder().
+			newGetMetaRequestMessage(new UimaAsOrigin(CLIENT, EndpointType.Direct))
+			.withPayload(AsynchAEMessage.None)
+			.build();
+		serviceEndpoint.dispatch(getMetaMessage,"direct:service");
+		//getMetaRequestQueue.add((DirectMessage)getMetaMessage.getRawMessage());
 	}
 	public void collectionProcessComplete() throws Exception {
+		/*
 		DirectMessage cpcMessage = 
 				new DirectMessage().
 				withCommand(AsynchAEMessage.CollectionProcessComplete).
@@ -201,10 +296,19 @@ implements UimaASService {
 				withOrigin(CLIENT).
 				withPayload(AsynchAEMessage.None).
 				withReplyQueue(replyQueue);
-		
-		processRequestQueue.add(cpcMessage);
+		*/
+		UimaAsEndpoint directEndpoint = super.getDirectEndpoint();
+		MessageContext cpcMessage =
+				directEndpoint.newMessageBuilder().
+			newCpCRequestMessage(new UimaAsOrigin(CLIENT, EndpointType.Direct))
+			.withPayload(AsynchAEMessage.None)
+			.build();
+
+		super.getDirectEndpoint().dispatch(cpcMessage,"direct:service");
+		//processRequestQueue.add((DirectMessage)cpcMessage.getRawMessage());
 	}
 	public void releaseCAS(String casReferenceId, BlockingQueue<DirectMessage> releaseCASQueue ) throws Exception {
+		/*
 		DirectMessage getMetaMessage = 
 				new DirectMessage().
 				withCommand(AsynchAEMessage.ReleaseCAS).
@@ -213,11 +317,26 @@ implements UimaASService {
 				withCasReferenceId(casReferenceId).
 				withOrigin(CLIENT).
 				withPayload(AsynchAEMessage.None);
+		*/
+		UimaAsEndpoint directEndpoint = super.getDirectEndpoint();
+		MessageContext freeCasMessage =
+				directEndpoint.newMessageBuilder().
+			newReleaseCASRequestMessage(new UimaAsOrigin(CLIENT, EndpointType.Direct))
+			.withPayload(AsynchAEMessage.CASRefID)
+			.withCasReferenceId(casReferenceId)
+			.build();
+		UimaAsEndpoint serviceEndpoint = 
+				controller.getEndpoint(EndpointType.Direct);
+		Map<Target, UimaAsConsumer> serviceConsumers =
+				serviceEndpoint.getConsumers();
+		
 		
-		releaseCASQueue.add(getMetaMessage);
+		super.getDirectEndpoint().dispatch(freeCasMessage,"direct:service");
+		//releaseCASQueue.add((DirectMessage)freeCasMessage.getRawMessage());
 	}
 
 	public AnalysisEngineMetaData getMetaData() throws Exception {
+		/*
 		DirectMessage getMetaMessage = 
 				new DirectMessage().
 				    withCommand(AsynchAEMessage.GetMeta).
@@ -226,14 +345,24 @@ implements UimaASService {
 				    withReplyQueue(replyQueue).
 				    withPayload(AsynchAEMessage.None);
 		
+		*/
+		UimaAsEndpoint directEndpoint = super.getDirectEndpoint();
+		MessageContext getMetaMessage =
+				directEndpoint.newMessageBuilder().
+			newGetMetaRequestMessage(new UimaAsOrigin(CLIENT, EndpointType.Direct))
+			.withPayload(AsynchAEMessage.None)
+			.build();
 		return getMetaData(getMetaMessage);
+//		getMetaRequestQueue.add((DirectMessage)getMetaMessage.getRawMessage());
+//		return getMetaData((DirectMessage)getMetaMessage.getRawMessage());
 	}
 	
-	public AnalysisEngineMetaData getMetaData(DirectMessage getMetaMessage) throws InterruptedException {
+	///public AnalysisEngineMetaData getMetaData(DirectMessage getMetaMessage) throws InterruptedException {
+	public AnalysisEngineMetaData getMetaData(MessageContext getMetaMessage) throws Exception {
 
 	//	getMetaMessage.put(AsynchAEMessage.Endpoint, replyQueue);
-		getMetaRequestQueue.add(getMetaMessage);
-
+		//getMetaRequestQueue.add(getMetaMessage);
+		super.getDirectEndpoint().dispatch(getMetaMessage,"direct:service");
 		DirectMessage dm = replyQueue.take();
 		return (AnalysisEngineMetaData)dm.get(AsynchAEMessage.AEMetadata);
 	}
@@ -241,7 +370,156 @@ implements UimaASService {
 		controller.quiesceAndStop();
 		context.destroy();
 	}
+/*
+	private void parentDelegateConsumers(UimaAsEndpoint delegateDirectEndpoint,UimaAsEndpoint parentDirectEndpoint, ConsumerType type, int scaleout ) throws Exception {
+		UimaAsConsumer consumer =
+				delegateDirectEndpoint.createConsumer("direct:Client", type, scaleout);
+		parentDirectEndpoint.createProducer(consumer, new UimaAsOrigin("direct:"+EndpointType.Direct));
+
+	}
+	*/
+	
+	
+	/**
+	 * This is called for aggregates with asynch delegates
+	 */
+	@Override
+	public void initialize(MessageProcessor messageProcessor, AnalysisEngineController parentController) throws Exception {
+		boolean addEndpoint=false;
+		if ( !controller.isPrimitive() ) {
+			System.out.println(".......... Aggregate:"+controller.getComponentName());
+		}
+		// create service producers for this client consumers
+		UimaAsEndpoint parentServiceEndpoint = 
+				parentController.getEndpoint(EndpointType.Direct);
+		UimaAsEndpoint delegateDirectEndpoint; 
+		if ( ( delegateDirectEndpoint = controller.getEndpoint(EndpointType.Direct) ) == null ){
+			delegateDirectEndpoint = Endpoints.newEndpoint(EndpointType.Direct, getName(), messageProcessor);
+			addEndpoint = true;
+		} 
+//		directEndpoint = new DirectUimaAsEndpoint(messageProcessor, "Service");
+		String did = getName();
+		UimaAsConsumer clientGetMetaRequestConsumer =
+				delegateDirectEndpoint.createConsumer( ConsumerType.GetMetaRequest, 1);
+		UimaAsConsumer clientProcessRequestConsumer =
+				delegateDirectEndpoint.createConsumer( ConsumerType.ProcessCASRequest, 4);
+		UimaAsConsumer clientCpcRequestConsumer =
+				delegateDirectEndpoint.createConsumer( ConsumerType.CpcRequest, 1);
+		// CPC request must be processed on Process CAS thread since this
+		// request calls AE.collectionProcessComplete and AS instances are
+		// pinned to Process CAS threads
+		clientCpcRequestConsumer.delegateTo(clientProcessRequestConsumer);
+		if ( addEndpoint ) {
+			controller.addEndpoint(delegateDirectEndpoint);
+		}
 
+			
+		parentServiceEndpoint.createProducer(clientGetMetaRequestConsumer, did);
+		parentServiceEndpoint.createProducer(clientProcessRequestConsumer, did);
+		parentServiceEndpoint.createProducer(clientCpcRequestConsumer, did);
+		
+	//	String sid = new StringBuilder("direct:").append(parentController.getKey()).toString();
+		UimaAsConsumer parentGetMetaResponseConsumer = 
+				parentServiceEndpoint.createConsumer(ConsumerType.GetMetaResponse, 1);
+		UimaAsConsumer parentProcessCASResponseConsumer = 
+				parentServiceEndpoint.createConsumer(ConsumerType.ProcessCASResponse, 1);
+		UimaAsConsumer parentCpcResponseConsumer = 
+				parentServiceEndpoint.createConsumer(ConsumerType.CpcResponse, 1);
+
+		String pid = parentController.getKey();  // default
+		if ( parentController.isTopLevelComponent() ) {
+			pid = parentController.getComponentName();
+		}
+		delegateDirectEndpoint.createProducer(parentGetMetaResponseConsumer, pid);
+		delegateDirectEndpoint.createProducer(parentProcessCASResponseConsumer, pid);
+		delegateDirectEndpoint.createProducer(parentCpcResponseConsumer, pid);
+		
+		if ( controller.isCasMultiplier() ) {
+			UimaAsConsumer delegateFreeCasRequestConsumer = 
+					delegateDirectEndpoint.createConsumer(ConsumerType.FreeCASRequest, 1);
+			parentServiceEndpoint.createProducer(delegateFreeCasRequestConsumer, parentController.getComponentName());
+			UimaAsConsumer parentProcessCASRequestConsumer = 
+					parentServiceEndpoint.createConsumer(ConsumerType.ProcessCASRequest, 1);
+
+			delegateDirectEndpoint.createProducer(parentProcessCASRequestConsumer, parentController.getComponentName());
+		}
+		initialized = true;
+	}
+	/**
+	 * This is used for top level service
+	 */
+	@Override
+	public void initialize(MessageProcessor messageProcessor) throws Exception {
+		// create service producers for this client consumers
+		UimaAsEndpoint serviceEndpoint = 
+				controller.getEndpoint(EndpointType.Direct);
+		if ( Objects.isNull(serviceEndpoint) ) {
+			serviceEndpoint = Endpoints.newEndpoint(EndpointType.Direct, controller.getComponentName(), new UimaAsMessageProcessor(controller));
+			//controller.addEndpoint(serviceEndpoint);
+		}
+		serviceEndpoint.createConsumer( ConsumerType.GetMetaRequest, 1);
+		UimaAsConsumer processConsumer =
+				serviceEndpoint.createConsumer( ConsumerType.ProcessCASRequest, 1);
+		UimaAsConsumer cpcConsumer =
+				serviceEndpoint.createConsumer( ConsumerType.CpcRequest, 1);
+		// CPC request should be handled by process consumer. Each AE instance is pinned to 
+		// initialize thread and only process consumer guarantees this. So the CPC consumer
+		// delegates all requests to process consumer.
+		cpcConsumer.delegateTo(processConsumer);
+		
+		if ( controller.isCasMultiplier() ) {
+			serviceEndpoint.createConsumer( ConsumerType.FreeCASRequest, 1);
+		}
+		
+		
+		/*
+		if ( directEndpoint == null ) {
+			directEndpoint = Endpoints.newEndpoint(EndpointType.Direct,"Service",messageProcessor);
+		}
+		//		directEndpoint = new DirectUimaAsEndpoint(messageProcessor, "Service");
+		UimaAsConsumer clientGetMetaResponseConsumer =
+				directEndpoint.createConsumer("direct:"+controller.getComponentName(), ConsumerType.GetMetaResponse, 1);
+		UimaAsConsumer clientProcessResponseConsumer =
+				directEndpoint.createConsumer("direct:"+controller.getComponentName(), ConsumerType.ProcessCASResponse, 4);
+		UimaAsConsumer clientCpcResponseConsumer =
+				directEndpoint.createConsumer("direct:"+controller.getComponentName(), ConsumerType.CpcResponse, 1);
+
+		// create service producers for this client consumers
+		UimaAsEndpoint serviceEndpoint = 
+				controller.getEndpoint(EndpointType.Direct);
+		if ( Objects.isNull(serviceEndpoint) ) {
+			serviceEndpoint = Endpoints.newEndpoint(EndpointType.Direct, controller.getComponentName(), new UimaAsMessageProcessor(controller));
+			//controller.addEndpoint(serviceEndpoint);
+		}
+		Origin origin = 
+				new UimaAsOrigin("direct:"+controller.getComponentName());
+		serviceEndpoint.createProducer(clientGetMetaResponseConsumer, "direct:"+controller.getComponentName());
+		serviceEndpoint.createProducer(clientProcessResponseConsumer, "direct:"+controller.getComponentName());
+		serviceEndpoint.createProducer(clientCpcResponseConsumer, "direct:"+controller.getComponentName());
+		
+		UimaAsConsumer c1 =
+				serviceEndpoint.createConsumer("direct:"+controller.getComponentName()+":"+ConsumerType.GetMetaRequest.name(), ConsumerType.GetMetaRequest, 1);
+		UimaAsConsumer c2 =
+				serviceEndpoint.createConsumer("direct:"+controller.getComponentName()+":"+ConsumerType.ProcessCASRequest.name(), ConsumerType.ProcessCASRequest, 1);
+		UimaAsConsumer c3 =
+				serviceEndpoint.createConsumer("direct:"+controller.getComponentName()+":"+ConsumerType.CpcRequest.name(), ConsumerType.CpcRequest, 1);
+		
+		Origin clientOrigin = new UimaAsOrigin("direct:Client");
+		directEndpoint.createProducer(c1, "direct:"+getName() );
+		directEndpoint.createProducer(c2, "direct:"+getName() );
+		directEndpoint.createProducer(c3, "direct:"+getName() );
+		*/
+		controller.addEndpoint(serviceEndpoint);
+	
+		initialized = true;
+	}
+	
+	public void start() throws Exception {
+		if ( !initialized ) {
+			throw new RuntimeException("AsynchronousUimaASService.start() - initialize() must be called first");
+		}
+		super.start();
+	}
 	public void stop() throws Exception {
 		for ( AsynchronousUimaASService instance : allInstancesOfThisClass) {
 			instance.stop();
@@ -252,4 +530,6 @@ implements UimaASService {
         context.destroy();
 	}
 
+
+
 }

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/UimaASService.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/UimaASService.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/UimaASService.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/UimaASService.java Thu Nov 29 17:23:00 2018
@@ -21,6 +21,11 @@ package org.apache.uima.aae.service;
 import java.util.concurrent.BlockingQueue;
 
 import org.apache.uima.aae.InProcessCache;
+import org.apache.uima.aae.InProcessCache.CacheEntry;
+import org.apache.uima.aae.controller.AnalysisEngineController;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint;
+import org.apache.uima.aae.message.MessageContext;
+import org.apache.uima.aae.message.MessageProcessor;
 import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData;
 import org.apache.uima.as.client.DirectMessage;
 import org.apache.uima.cas.CAS;
@@ -48,5 +53,10 @@ public interface UimaASService {
 	public void releaseCAS(String casReferenceId, BlockingQueue<DirectMessage> releaseCASQueue ) throws Exception;
 	public AnalysisEngineMetaData getMetaData() throws Exception; 
 	public void removeFromCache(String casReferenceId);
+	public CacheEntry add2Cache( CAS cas, MessageContext messageContext, String casReferenceId ) throws Exception;
+
 	public UimaASService withInProcessCache(InProcessCache cache);
+	public void initialize(MessageProcessor messageProcessor) throws Exception;
+	public void initialize(MessageProcessor messageProcessor, AnalysisEngineController parentController) throws Exception;
+    public void connect(UimaAsEndpoint clientEndpoint) throws Exception;
 }

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/AbstractUimaAsServiceBuilder.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/AbstractUimaAsServiceBuilder.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/AbstractUimaAsServiceBuilder.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/AbstractUimaAsServiceBuilder.java Thu Nov 29 17:23:00 2018
@@ -19,12 +19,15 @@
 package org.apache.uima.aae.service.builder;
 
 import java.io.File;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
+import java.util.Stack;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.regex.Matcher;
@@ -41,6 +44,7 @@ import org.apache.uima.aae.client.UimaAs
 import org.apache.uima.aae.component.AggregateAnalysisEngineComponent;
 import org.apache.uima.aae.component.AnalysisEngineComponent;
 import org.apache.uima.aae.component.ComponentCasPool;
+import org.apache.uima.aae.component.PrimitiveAnalysisEngineComponent;
 import org.apache.uima.aae.component.RemoteAnalysisEngineComponent;
 import org.apache.uima.aae.component.TopLevelServiceComponent;
 import org.apache.uima.aae.controller.AggregateAnalysisEngineController;
@@ -48,6 +52,11 @@ import org.apache.uima.aae.controller.Ag
 import org.apache.uima.aae.controller.AnalysisEngineController;
 import org.apache.uima.aae.controller.ControllerCallbackListener;
 import org.apache.uima.aae.controller.BaseAnalysisEngineController.ENDPOINT_TYPE;
+import org.apache.uima.aae.definition.connectors.Endpoints;
+import org.apache.uima.aae.definition.connectors.UimaAsConsumer;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
+import org.apache.uima.aae.definition.connectors.UimaAsConsumer.ConsumerType;
 import org.apache.uima.aae.controller.DelegateEndpoint;
 import org.apache.uima.aae.controller.Endpoint;
 import org.apache.uima.aae.controller.Endpoint_impl;
@@ -66,8 +75,10 @@ import org.apache.uima.aae.handler.input
 import org.apache.uima.aae.handler.input.MetadataResponseHandler_impl;
 import org.apache.uima.aae.handler.input.ProcessRequestHandler_impl;
 import org.apache.uima.aae.handler.input.ProcessResponseHandler;
+import org.apache.uima.aae.message.MessageProcessor;
 import org.apache.uima.aae.service.AsynchronousUimaASService;
 import org.apache.uima.aae.service.UimaASService;
+import org.apache.uima.aae.service.command.UimaAsMessageProcessor;
 import org.apache.uima.aae.service.delegate.AggregateAnalysisEngineDelegate;
 import org.apache.uima.aae.service.delegate.AnalysisEngineDelegate;
 import org.apache.uima.aae.service.delegate.CasMultiplierNature;
@@ -104,11 +115,13 @@ import org.apache.uima.resourceSpecifier
 import org.apache.uima.resourceSpecifier.TopLevelAnalysisEngineType;
 import org.apache.xmlbeans.XmlDocumentProperties;
 
-public abstract class AbstractUimaAsServiceBuilder implements ServiceBuilder {
+public abstract class AbstractUimaAsServiceBuilder 
+implements ServiceBuilder, UimaAsServiceWrapperCreator {
 	protected InProcessCache cache;
 	protected AsynchAECasManager_impl casManager;
     protected ResourceManager resourceManager;
     private static final String NoParent= "NoParent";
+    private ControllerBuilder controllerBuilder;
     private  enum FlowControllerType {
 		FIXED
 	}
@@ -117,11 +130,25 @@ public abstract class AbstractUimaAsServ
 
 //    public AnalysisEngineController createController( AnalysisEngineComponent component, int howManyInstances) throws Exception {
     public AnalysisEngineController createController( AnalysisEngineComponent component, ControllerCallbackListener aListener, String serviceId) throws Exception {
-    	AnalysisEngineController controller =
-    			createController(component, null /*, component.getScaleout() */);
-    	controller.setServiceId(serviceId);
-    	controller.addControllerCallbackListener(aListener);
-    	return controller;
+    	// get a builder which will traverse the component N-ary tree in 
+    	// post order traversal mode. Each node on a tree is either
+    	// primitive or aggregate component. For each, create AnalysisEngineController
+    	// instance of appropriate type (primitive or aggregate) and wrap it in
+    	// UimaASService instance for deployment.
+    	controllerBuilder = new PostOrderControllerBuilder(this, cache, casManager);
+    			
+    	AnalysisEngineController topLevelController =
+     			controllerBuilder.build(component);
+    	// the builder created a list of UimaASService instances sorted
+    	// in post order (when traversing component N-ary tree). Start
+    	// each service.
+		for (UimaASService service : controllerBuilder.getServiceList()) {
+			service.start();
+		}		
+        //createController(component, null /*, component.getScaleout() */);
+		topLevelController.setServiceId(serviceId);
+		topLevelController.addControllerCallbackListener(aListener);
+    	return topLevelController;
     }
 
     /**
@@ -139,13 +166,26 @@ public abstract class AbstractUimaAsServ
      */
     public AnalysisEngineController createController( AnalysisEngineComponent component, AnalysisEngineController parentController/*, int howManyInstances */) throws Exception {
 
-    	AnalysisEngineController controller = null;
+//    	AnalysisEngineController controller = null;
      	System.out.println("---------Controller:"+
      			component.getKey()+
      			" resourceSpecifier:"+
      			component.getResourceSpecifier().getClass().getName()+
      			" ResourceCreationSpecifier:"+(component.getResourceSpecifier() instanceof ResourceCreationSpecifier) );
+        /*
+         * public interface AnalysisEngineVisitor {
+         * 
+         *     public void visit(PrimitiveAnalysisEngineComponent visitor);
+         *     public void visit(AggregateAnalysisEngineComponent visitor);
+         *     public void visit(TopLevelAnalysisEngineComponent visitor);
+         * 
+         */
+     	
+     	// Visitor visitor = VisitorFactory.newControllerVisitor(parentController,casManager, cache, 10);
+     	// component.accept(visitor);
 
+     	/*
+     	
      	if ( component.isPrimitive()) {
        		controller = new PrimitiveAnalysisEngineController_impl(parentController, component.getKey(), component.getResourceSpecifier().getSourceUrlString(),casManager, cache, 10, component.getScaleout());
      	} else {
@@ -160,6 +200,10 @@ public abstract class AbstractUimaAsServ
     		} else {
     			throw new RuntimeException("Expected instance of AggregateAnalysisEngineComponent, instead is instanceof "+component.getClass().getName());
     		}
+    		
+    		
+ 
+
 //    		List<AnalysisEngineComponent> delegateComponents = ((AggregateAnalysisEngineComponent)component).getChildren();
     		List<AnalysisEngineComponent> delegateComponents = aggregate.getChildren();
     		for( AnalysisEngineComponent delegateComponent : delegateComponents ) {
@@ -167,19 +211,126 @@ public abstract class AbstractUimaAsServ
     		}
     		controller = new AggregateAnalysisEngineController_impl(parentController, component.getKey(), component.getResourceSpecifier().getSourceUrlString(), casManager, cache, endpoints);
     		addFlowController((AggregateAnalysisEngineController)controller, (AnalysisEngineDescription)component.getResourceSpecifier());
+
+    		String aggregateId = (Objects.isNull(parentController) ? controller.getComponentName() : component.getKey());
+    		
+       		UimaAsEndpoint directEndpoint = 
+    				Endpoints.newEndpoint(EndpointType.Direct,aggregateId,new UimaAsMessageProcessor(controller));
+       		controller.addEndpoint(directEndpoint);
+    		
     		// recursively create delegate controllers for all async delegates
     		createDelegateControllers(aggregate, controller);
      	}
+     	*/
+    	
+     	/*
+     	
+     	AnalysisEngineController controller = null;
+     	
+     	
+     	Deque<ComponentNode> stack = new ArrayDeque<>();
+     	List<UimaASService> serviceList = new ArrayList<>();
+     	stack.push(new ComponentNode(component, parentController, false));
+     	// non-recursive traversal of AnalysisEngineComponent tree producing
+     	// appropriate AnalysisEngineControllers and decorating/wrapping each
+     	// with UimaASService instance.
+     	while( !stack.isEmpty() ) {
+     		ComponentNode entry = stack.pop();
+     		AnalysisEngineComponent c = entry.node;
+     		if ( entry.flag ) {
+     			// check if the last node
+     			if ( entry.aggregateController.isTopLevelComponent() ) {
+     				controller = entry.aggregateController;
+     				
+     			} else {
+     				UimaASService service = 
+     						newServiceWrapperDecorator(entry.aggregateController, entry.parentController, c);
+     				serviceList.add(service);
+     			}
+     		} else {
+     			
+         		if ( c.isPrimitive()  ) {
+         			controller = c.newAnalysisEngineController(entry.parentController,casManager, cache);
+         			UimaASService service =  
+               			newServiceWrapperDecorator(controller, entry.parentController, c);
+         			
+         			serviceList.add(service);
+ 
+         		} else {
+         			if ( !c.getChildren().isEmpty() ) {
+         				controller = 
+         						c.newAnalysisEngineController(entry.parentController, casManager, cache);
+            		
+         	       		stack.push( new ComponentNode(c, controller, parentController, true) );
+         				parentController = controller;
+             			for( AnalysisEngineComponent cc : c.getChildren()) {
+                 			stack.push(new ComponentNode(cc, controller, false));
+             			}
+         				
+         			} else {
+         			}
+         		}
+     			
+     		}
+     	}
+     	
+     	for( UimaASService service : serviceList ) {
+     		service.start();
+     	}
+     	*/
+     	
+     	
+     	//AnalysisEngineController controller = component.visit(parentController);
+  /* 	
    	    if ( !controller.isTopLevelComponent() ) {
-       		UimaASService service = createUimaASServiceWrapper(controller, component);
+       		UimaASService service = 
+       				createUimaASServiceWrapper(controller, parentController, component);
+
+       		
     	    service.start();
 	    }
-
-    	return controller;
+*/
+     	
+     	AnalysisEngineController topLevelController = null;
+     	/*
+     	AnalysisEngineController topLevelController =
+     			controllerBuilder.build(component, parentController);
+    	
+		for (UimaASService service : controllerBuilder.getServiceList()) {
+			service.start();
+		}
+		*/
+     	
+    	return topLevelController;
     }
 
-	
+	class ComponentNode {
+		AnalysisEngineComponent node;
+		AnalysisEngineController parentController;
+		AnalysisEngineController aggregateController;
+		boolean flag;
+
+		ComponentNode(AnalysisEngineComponent node, AnalysisEngineController parentController, boolean flag) {
+			this(node,null,parentController,flag);
+		}
 
+		ComponentNode(AnalysisEngineComponent node, AnalysisEngineController aggregateController, AnalysisEngineController parentController, boolean flag) {
+			this.node = node;
+			this.flag = flag;
+			this.parentController = parentController;
+			this.aggregateController = aggregateController;
+		}
+		@Override
+		public String toString() {
+			return node.toString();
+		}
+	}
+	
+	public UimaASService create(AnalysisEngineController controller, AnalysisEngineController parentController, AnalysisEngineComponent component) throws Exception {
+   		UimaASService service = 
+   				createUimaASServiceWrapper(controller, parentController, component);
+	    return service;
+	}
 	private void createDelegateControllers(AggregateAnalysisEngineComponent aggregateComponent, AnalysisEngineController controller) throws Exception {
 		for (AnalysisEngineComponent delegateComponent : aggregateComponent.getChildren()) {
 			// if error handling threshold has not been defined for the delegate, add
@@ -192,6 +343,7 @@ public abstract class AbstractUimaAsServ
 				}
 				
 			} else {
+				/*
 				if (Objects.isNull(controller.getOutputChannel(ENDPOINT_TYPE.DIRECT))) {
 					OutputChannel oc = new DirectOutputChannel().withController(controller);
 					oc.initialize();
@@ -205,6 +357,7 @@ public abstract class AbstractUimaAsServ
 					controller.addInputChannel(inputChannel);
 					
 				}
+				*/
 				createController(delegateComponent,	controller /*, scaleout */);
 			}
 
@@ -213,10 +366,14 @@ public abstract class AbstractUimaAsServ
 	}
 	
 	
-    private UimaASService createUimaASServiceWrapper(AnalysisEngineController controller, AnalysisEngineComponent component) throws Exception {
-        
+    private UimaASService createUimaASServiceWrapper(AnalysisEngineController controller, AnalysisEngineController parentController, AnalysisEngineComponent component) throws Exception {
+        String serviceId = (Objects.isNull(controller))? controller.getComponentName() : controller.getKey();
     	AsynchronousUimaASService service = 
-    			new AsynchronousUimaASService(controller.getComponentName()).withController(controller);
+    			new AsynchronousUimaASService(serviceId).withController(controller);
+    
+    	
+    	/*   10/19/18 JC replaced with Endpoint idea
+    	 * 
     	// Need an OutputChannel to dispatch messages from this service
     	OutputChannel outputChannel;
 		if ( ( outputChannel = controller.getOutputChannel(ENDPOINT_TYPE.DIRECT)) == null) {
@@ -254,6 +411,9 @@ public abstract class AbstractUimaAsServ
 			((DirectOutputChannel)outputChannel).setFreeCASQueue(service.getFreeCasQueue());
 		}			
 		
+		
+		*/
+		
 		/*
 		DirectListener processListener = new DirectListener(Type.ProcessCAS).
 				withController(controller).
@@ -282,6 +442,35 @@ public abstract class AbstractUimaAsServ
 			((DirectOutputChannel)outputChannel).setFreeCASQueue(service.getFreeCasQueue());
 		}
     	*/
+	
+   		
+		MessageProcessor messageProcessor = 
+				new UimaAsMessageProcessor(controller);
+	/*	
+		UimaAsEndpoint directEndpoint = new DirectUimaAsEndpoint(messageProcessor, "Service");
+		UimaAsConsumer serviceGetMetaRequestConsumer = directEndpoint.createConsumer("direct:", ConsumerType.GetMetaRequest, 1);
+		UimaAsConsumer serviceProcessCasRequestConsumer = directEndpoint.createConsumer("direct:", ConsumerType.ProcessCASRequest, component.getScaleout());
+		UimaAsConsumer serviceCpcRequestConsumer = directEndpoint.createConsumer("direct:", ConsumerType.CpcRequest, 1);
+
+		UimaAsEndpoint parentEndpoint = parentController.getEndpoint(EndpointType.Direct);
+   		parentEndpoint.createConsumer("direct:"+controller.getComponentName(), ConsumerType.GetMetaResponse, 1);
+   		parentEndpoint.createConsumer("direct:"+controller.getComponentName(), ConsumerType.ProcessCASResponse, component.getScaleout());
+   		parentEndpoint.createConsumer("direct:"+controller.getComponentName(), ConsumerType.CpcResponse, 1);
+   		
+   		parentEndpoint.createProducer(serviceGetMetaRequestConsumer, parentController.getOrigin());
+   		parentEndpoint.createProducer(serviceProcessCasRequestConsumer, parentController.getOrigin());
+   		parentEndpoint.createProducer(serviceCpcRequestConsumer, parentController.getOrigin());
+
+		if (controller.isCasMultiplier()) {
+			UimaAsConsumer serviceFreeCasConsumer = directEndpoint.createConsumer("direct:", ConsumerType.FreeCAS, 1);
+	   		parentEndpoint.createProducer(serviceFreeCasConsumer, parentController.getOrigin());
+		}
+*/
+		if ( Objects.isNull(parentController ) ) {
+			service.initialize(messageProcessor);
+		} else {
+			service.initialize(messageProcessor, parentController);
+		}
     	return service;
     }
 	private DirectListener createDirectListener(AnalysisEngineController controller, int scaleout, DirectInputChannel inputChannel, BlockingQueue<DirectMessage> q, Type type) throws Exception{
@@ -553,8 +742,12 @@ public abstract class AbstractUimaAsServ
 
     private UimaASService createUimaASServiceWrapper(AnalysisEngineController controller, AnalysisEngineDelegate d) throws Exception {
     
-    	AsynchronousUimaASService service = 
+    	UimaASService service = 
     			new AsynchronousUimaASService(controller.getComponentName()).withController(controller);
+ 
+    	service.initialize(new UimaAsMessageProcessor(controller));
+    	
+    	/*
     	// Need an OutputChannel to dispatch messages from this service
     	OutputChannel outputChannel;
 		if ( ( outputChannel = controller.getOutputChannel(ENDPOINT_TYPE.DIRECT)) == null) {
@@ -605,7 +798,7 @@ public abstract class AbstractUimaAsServ
 			inputChannel.registerListener(freCASChannelListener);
 			((DirectOutputChannel)outputChannel).setFreeCASQueue(service.getFreeCasQueue());
 		}
-    	
+    	*/
     	return service;
     }
     private boolean isAggregate(AnalysisEngineDelegate d, ResourceSpecifier resourceSpecifier) {
@@ -719,7 +912,9 @@ public abstract class AbstractUimaAsServ
       	}
    	    if ( !controller.isTopLevelComponent() ) {
        		UimaASService service = createUimaASServiceWrapper(controller, d);
-    	    service.start();
+       		// create listeners and service producers
+    	    //service.initilize(new UimaAsMessageProcessor(controller));
+       		service.start();
 	    }
 
     	return controller;

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/ControllerBuilder.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/ControllerBuilder.java?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/ControllerBuilder.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/ControllerBuilder.java Thu Nov 29 17:23:00 2018
@@ -0,0 +1,12 @@
+package org.apache.uima.aae.service.builder;
+
+import java.util.List;
+
+import org.apache.uima.aae.component.AnalysisEngineComponent;
+import org.apache.uima.aae.controller.AnalysisEngineController;
+import org.apache.uima.aae.service.UimaASService;
+
+public interface ControllerBuilder {
+	public AnalysisEngineController build(AnalysisEngineComponent component) throws Exception;
+	public List<UimaASService> getServiceList();
+}

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/ControllerBuilder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/PostOrderControllerBuilder.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/PostOrderControllerBuilder.java?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/PostOrderControllerBuilder.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/PostOrderControllerBuilder.java Thu Nov 29 17:23:00 2018
@@ -0,0 +1,109 @@
+package org.apache.uima.aae.service.builder;
+
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Deque;
+import java.util.List;
+
+import org.apache.uima.aae.AsynchAECasManager_impl;
+import org.apache.uima.aae.InProcessCache;
+import org.apache.uima.aae.component.AnalysisEngineComponent;
+import org.apache.uima.aae.controller.AnalysisEngineController;
+import org.apache.uima.aae.service.UimaASService;
+
+public class PostOrderControllerBuilder implements ControllerBuilder {
+	private UimaAsServiceWrapperCreator wrapperCreator;
+	private InProcessCache cache;
+	private AsynchAECasManager_impl casManager;
+	private List<UimaASService> serviceList = new ArrayList<>();
+
+	PostOrderControllerBuilder(UimaAsServiceWrapperCreator wrapperCreator, InProcessCache cache,
+			AsynchAECasManager_impl casManager) {
+		this.wrapperCreator = wrapperCreator;
+		this.cache = cache;
+		this.casManager = casManager;
+	}
+
+	public AnalysisEngineController build(AnalysisEngineComponent component)
+			throws Exception {
+		AnalysisEngineController parentController = null;
+		AnalysisEngineController controller = null;
+
+		Deque<ComponentNode> stack = new ArrayDeque<>();
+		stack.push(new ComponentNode(component, parentController, false));
+		// non-recursive traversal of AnalysisEngineComponent N-ary tree producing
+		// appropriate AnalysisEngineControllers and decorating/wrapping each
+		// with UimaASService instance.
+		while (!stack.isEmpty()) {
+			ComponentNode entry = stack.pop();
+			AnalysisEngineComponent c = entry.node;
+			if (entry.flag) {
+				// check if this is a root node
+				if (entry.aggregateController.isTopLevelComponent()) {
+					controller = entry.aggregateController;
+
+				} else {
+					UimaASService service = wrapperCreator.create(entry.aggregateController, entry.parentController, c);
+					serviceList.add(service);
+				}
+			} else {
+
+				if (c.isPrimitive()) {
+					controller = c.newAnalysisEngineController(entry.parentController, casManager, cache);
+					UimaASService service  = 
+							wrapperCreator.create(controller, entry.parentController, c);
+
+					serviceList.add(service);
+
+				} else {
+					if (!c.getChildren().isEmpty()) {
+						controller = c.newAnalysisEngineController(entry.parentController, casManager, cache);
+
+						stack.push(new ComponentNode(c, controller, parentController, true));
+						parentController = controller;
+						for (AnalysisEngineComponent cc : c.getChildren()) {
+							stack.push(new ComponentNode(cc, controller, false));
+						}
+
+					} else {
+					}
+				}
+
+			}
+		}
+/*
+		for (UimaASService service : serviceList) {
+			service.start();
+		}
+		*/
+		return controller;
+	}
+	public List<UimaASService> getServiceList() {
+		return serviceList;
+	}
+}
+
+class ComponentNode {
+	AnalysisEngineComponent node;
+	AnalysisEngineController parentController;
+	AnalysisEngineController aggregateController;
+	boolean flag;
+
+	ComponentNode(AnalysisEngineComponent node, AnalysisEngineController parentController, boolean flag) {
+		this(node, null, parentController, flag);
+	}
+
+	ComponentNode(AnalysisEngineComponent node, AnalysisEngineController aggregateController,
+			AnalysisEngineController parentController, boolean flag) {
+		this.node = node;
+		this.flag = flag;
+		this.parentController = parentController;
+		this.aggregateController = aggregateController;
+	}
+
+	@Override
+	public String toString() {
+		return node.toString();
+	}
+
+}

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/PostOrderControllerBuilder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/UimaAsDirectServiceBuilder.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/UimaAsDirectServiceBuilder.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/UimaAsDirectServiceBuilder.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/UimaAsDirectServiceBuilder.java Thu Nov 29 17:23:00 2018
@@ -31,11 +31,12 @@ import org.apache.uima.aae.UimaClassFact
 import org.apache.uima.aae.client.UimaAsynchronousEngine.Transport;
 import org.apache.uima.aae.component.TopLevelServiceComponent;
 import org.apache.uima.aae.controller.AggregateAnalysisEngineController;
-import org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl;
 import org.apache.uima.aae.controller.AnalysisEngineController;
 import org.apache.uima.aae.controller.BaseAnalysisEngineController.ENDPOINT_TYPE;
 import org.apache.uima.aae.controller.ControllerCallbackListener;
 import org.apache.uima.aae.controller.Endpoint_impl;
+import org.apache.uima.aae.definition.connectors.UimaAsConsumer.ConsumerType;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint;
 import org.apache.uima.aae.error.ErrorHandler;
 import org.apache.uima.aae.error.ErrorHandlerChain;
 import org.apache.uima.aae.error.Threshold;
@@ -47,6 +48,7 @@ import org.apache.uima.aae.handler.Handl
 import org.apache.uima.aae.service.AsynchronousUimaASService;
 import org.apache.uima.aae.service.UimaASService;
 import org.apache.uima.aae.service.UimaAsServiceRegistry;
+import org.apache.uima.aae.service.command.UimaAsMessageProcessor;
 import org.apache.uima.aae.service.delegate.AnalysisEngineDelegate;
 import org.apache.uima.aae.service.delegate.RemoteAnalysisEngineDelegate;
 import org.apache.uima.analysis_engine.AnalysisEngineDescription;
@@ -122,10 +124,10 @@ public class UimaAsDirectServiceBuilder
 		//topLevelController.addControllerCallbackListener(callback);
 
 		//topLevelController.setServiceId(service.getId());
-		
+		service.withController(topLevelController);
 		service.withInProcessCache(super.cache);
 		System.setProperty("BrokerURI", "Direct");
-		configureTopLevelService(topLevelController, service);//, topLevelComponent.getScaleout());
+		configureTopLevelService(topLevelController, service);
 		return service;
 
 	}
@@ -164,7 +166,7 @@ public class UimaAsDirectServiceBuilder
 		
 		//addErrorHandling(topLevelController, pec);
 
-
+/*
 		// create a single instance of OutputChannel for Direct communication if
 		// necessary
 		DirectOutputChannel outputChannel = outputChannel(topLevelController);
@@ -207,9 +209,31 @@ public class UimaAsDirectServiceBuilder
 
 		inputChannel.registerListener(getMetaListener);
 		inputChannel.registerListener(processListener);
+*/
+		
+		service.initialize(new UimaAsMessageProcessor(topLevelController));
+		/*
+		scaleout = service.getScaleout();
+		MessageProcessor dummyProcessor = 
+				new UimaAsMessageProcessor(topLevelController);
+		
+		UimaAsEndpoint directEndpoint = new DirectUimaAsEndpoint(dummyProcessor, "Service");
+		directEndpoint.createConsumer("direct:", ConsumerType.GetMetaRequest, 1);
+		directEndpoint.createConsumer("direct:", ConsumerType.ProcessCASRequest, 4);
+		directEndpoint.createConsumer("direct:", ConsumerType.CpcRequest, 1);
+		addFreeCASListener(service, topLevelController, directEndpoint, scaleout );
+		
+		
+		
+		*/
+//		UimaAsConsumer freeCasRequestConsumer = directEndpoint.createConsumer("direct:", ConsumerType.FreeCAS, 1);
 
 		service.withController(topLevelController);
 		
+		//topLevelController.addEndpoint(directEndpoint);
+
+		
+		
 	}
 	
 	
@@ -334,7 +358,10 @@ public class UimaAsDirectServiceBuilder
 	private void configureTopLevelService(AnalysisEngineController topLevelController,
 			AsynchronousUimaASService service, AsyncPrimitiveErrorConfigurationType pec, int howMany) throws Exception {
 		addErrorHandling(topLevelController, pec);
+		
+		service.initialize(new UimaAsMessageProcessor(topLevelController));
 
+/*
 
 		// create a single instance of OutputChannel for Direct communication if
 		// necessary
@@ -396,6 +423,8 @@ public class UimaAsDirectServiceBuilder
 		inputChannel.registerListener(getMetaListener);
 		inputChannel.registerListener(processListener);
 
+		
+		*/
 		service.withController(topLevelController);
 		
 	}
@@ -411,6 +440,23 @@ public class UimaAsDirectServiceBuilder
 			outputChannel.setFreeCASQueue(service.getFreeCasQueue());
 		}
 	}
+	
+	private void addFreeCASListener( AsynchronousUimaASService service, AnalysisEngineController controller, 
+			UimaAsEndpoint endpoint, int scaleout ) throws Exception {
+		DirectListener freCASChannelListener = null;
+		if (controller.isCasMultiplier()) {
+			endpoint.createConsumer( ConsumerType.FreeCASRequest, 1);
+			
+			
+//			freCASChannelListener = new DirectListener(Type.FreeCAS).withController(controller)
+//					.withConsumerThreads(scaleout).withInputChannel(inputChannel).withQueue(service.getFreeCasQueue())
+//					.initialize();
+//			inputChannel.registerListener(freCASChannelListener);
+//			outputChannel.setFreeCASQueue(service.getFreeCasQueue());
+		}
+	}
+	
+
 	public static InputChannel createInputChannel(ChannelType type) {
 		return new DirectInputChannel(type);
 	}

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/UimaAsServiceWrapperCreator.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/UimaAsServiceWrapperCreator.java?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/UimaAsServiceWrapperCreator.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/UimaAsServiceWrapperCreator.java Thu Nov 29 17:23:00 2018
@@ -0,0 +1,9 @@
+package org.apache.uima.aae.service.builder;
+
+import org.apache.uima.aae.component.AnalysisEngineComponent;
+import org.apache.uima.aae.controller.AnalysisEngineController;
+import org.apache.uima.aae.service.UimaASService;
+
+public interface UimaAsServiceWrapperCreator {
+	public UimaASService create(AnalysisEngineController controller, AnalysisEngineController parentController, AnalysisEngineComponent component)  throws Exception ;
+}

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/UimaAsServiceWrapperCreator.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/AbstractUimaAsCommand.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/AbstractUimaAsCommand.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/AbstractUimaAsCommand.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/AbstractUimaAsCommand.java Thu Nov 29 17:23:00 2018
@@ -36,6 +36,7 @@ import org.apache.uima.aae.error.ErrorCo
 import org.apache.uima.aae.jmx.ServicePerformance;
 import org.apache.uima.aae.message.AsynchAEMessage;
 import org.apache.uima.aae.message.MessageContext;
+import org.apache.uima.aae.message.Origin;
 import org.apache.uima.aae.message.UIMAMessage;
 import org.apache.uima.aae.monitor.Monitor;
 import org.apache.uima.aae.monitor.statistics.DelegateStats;
@@ -53,8 +54,11 @@ import org.apache.uima.util.Level;
 public abstract class AbstractUimaAsCommand implements UimaAsCommand {
 	protected AnalysisEngineController controller;
 	private Object mux = new Object();
-	private final MessageContext messageContext;
-	
+    // package visibility only for messageContext
+	MessageContext messageContext;
+	protected AbstractUimaAsCommand(AnalysisEngineController controller) {
+		this(controller, null);
+	}
 	protected AbstractUimaAsCommand(AnalysisEngineController controller, MessageContext aMessageContext) {
 		this.controller = controller;
 		this.messageContext = aMessageContext;
@@ -325,7 +329,8 @@ public abstract class AbstractUimaAsComm
 	protected Delegate getDelegate(/* MessageContext mc */) throws AsynchAEException {
 		String delegateKey = null;
 		if (messageContext.getEndpoint().getEndpoint() == null || messageContext.getEndpoint().getEndpoint().trim().length() == 0) {
-			String fromEndpoint = messageContext.getMessageStringProperty(AsynchAEMessage.MessageFrom);
+			String fromEndpoint = 
+					((Origin)messageContext.getMessageObjectProperty(AsynchAEMessage.MessageFrom)).getName();
 			delegateKey = ((AggregateAnalysisEngineController) controller)
 					.lookUpDelegateKey(fromEndpoint);
 		} else {

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/CommandFactory.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/CommandFactory.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/CommandFactory.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/CommandFactory.java Thu Nov 29 17:23:00 2018
@@ -22,13 +22,47 @@ import org.apache.uima.aae.controller.An
 import org.apache.uima.aae.error.AsynchAEException;
 import org.apache.uima.aae.message.AsynchAEMessage;
 import org.apache.uima.aae.message.MessageContext;
-import org.apache.uima.aae.message.UimaAsMessage;
 
 public class CommandFactory {
-	// Can't instantiate this factory. Use static methods only
-	private CommandFactory() {
 
+	/* Consider this Command Pattern implementation
+	 * 
+	private volatile CommandFactory instance;
+	
+	public CommandFactory newInstance(AnalysisEngineController controller) {
+		// use double checked locking to create Singleton
+		if ( Objects.isNull(instance) ) {
+			synchronized(CommandFactory.class) {
+				if ( Objects.isNull(instance) ) {
+					instance = new CommandFactory(controller);
+				}
+			}
+		}
+		return instance;
+	}
+	private static EnumMap<Commands, UimaAsCommand> em =
+			new EnumMap<>(Commands.class);
+	
+	// Can't instantiate this factory. Use static methods only
+	private CommandFactory(AnalysisEngineController controller) {
+		em.put(Commands.ProcessInputCASRequest,CommandBuilder.createProcessInputCasRequestCommand(controller));
+		em.put(Commands.ProcessChildCASRequest,CommandBuilder.createProcessChildCasRequestCommand(controller));
+		em.put(Commands.ProcessInputCASResponse,CommandBuilder.createProcessInputCasResponseCommand(controller));
+		em.put(Commands.GetMetaRequest,CommandBuilder.createGetMetaRequestCommand(controller));
+		em.put(Commands.GetMetaResponse,CommandBuilder.createGetMetaResponseCommand(controller));
+		em.put(Commands.CollectionProcessCompleteRequest,CommandBuilder.createCollectionProcessCompleteRequestCommand(controller));
+		em.put(Commands.CollectionProcessCompleteResponse,CommandBuilder.createCollectionProcessCompleteResponseCommand(controller));
+		em.put(Commands.NoOp,CommandBuilder.createNoOpCommand(controller));
+		
+	}
+	public static UimaAsCommand getCommandFor(Commands command) {
+		if ( em.containsKey(command)) {
+			return em.get(command);
+		}
+		return em.get(Commands.NoOp);
+		
 	}
+	*/
 	public static UimaAsCommand newCommand(MessageContext mc, AnalysisEngineController controller)
 			throws AsynchAEException {
 		// Message type is either Request or Response

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/GetMetaResponseCommand.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/GetMetaResponseCommand.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/GetMetaResponseCommand.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/GetMetaResponseCommand.java Thu Nov 29 17:23:00 2018
@@ -27,6 +27,7 @@ import org.apache.uima.aae.controller.Ba
 import org.apache.uima.aae.controller.Endpoint;
 import org.apache.uima.aae.message.AsynchAEMessage;
 import org.apache.uima.aae.message.MessageContext;
+import org.apache.uima.aae.message.Origin;
 import org.apache.uima.resource.metadata.ResourceMetaData;
 import org.apache.uima.util.XMLInputSource;
 
@@ -48,11 +49,13 @@ public class GetMetaResponseCommand exte
             return;
           }
        
-       String fromEndpoint =// mc
-           super.getMessageStringProperty(AsynchAEMessage.MessageFrom);
-
-       String delegateKey = ((AggregateAnalysisEngineController) controller)
-               .lookUpDelegateKey(fromEndpoint);
+//       String fromEndpoint =// mc
+//           super.getMessageStringProperty(AsynchAEMessage.MessageFrom);
+    	Origin origin = (Origin) super.getMessageContext().getMessageObjectProperty(AsynchAEMessage.MessageFrom);
+    	String delegateKey = origin.getName();//.split(":")[1];
+ System.out.println("++++++++++++++++++++++  delegateKey: "+delegateKey);
+   //   	String delegateKey = ((AggregateAnalysisEngineController) controller)
+ //              .lookUpDelegateKey(fromEndpoint);
           ResourceMetaData resource = null;
           int serializationSupportedByRemote = AsynchAEMessage.None;
 //          ((MessageContext) anObjectToHandle).getMessageIntProperty(AsynchAEMessage.SERIALIZATION);
@@ -80,11 +83,16 @@ public class GetMetaResponseCommand exte
           // be unique.
           // The ServerURI set by the service may be its local name for the broker, e.g.
           // tcp://localhost:61616
+ 
           
           ((AggregateAnalysisEngineController) controller).mergeTypeSystem(
-                  resource, fromEndpoint, fromServer);
-          ((AggregateAnalysisEngineController) controller).setRemoteSerializationSupported(serializationSupportedByRemote, fromEndpoint, fromServer);
+                  resource, delegateKey, fromServer);
+          ((AggregateAnalysisEngineController) controller).setRemoteSerializationSupported(serializationSupportedByRemote, delegateKey, fromServer);
 
+//          ((AggregateAnalysisEngineController) controller).mergeTypeSystem(
+//                  resource, fromEndpoint, fromServer);
+//          ((AggregateAnalysisEngineController) controller).setRemoteSerializationSupported(serializationSupportedByRemote, fromEndpoint, fromServer);
+//
 	}
 
 }

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessChildCasRequestCommand.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessChildCasRequestCommand.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessChildCasRequestCommand.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessChildCasRequestCommand.java Thu Nov 29 17:23:00 2018
@@ -32,6 +32,7 @@ import org.apache.uima.aae.error.AsynchA
 import org.apache.uima.aae.jmx.ServicePerformance;
 import org.apache.uima.aae.message.AsynchAEMessage;
 import org.apache.uima.aae.message.MessageContext;
+import org.apache.uima.aae.message.Origin;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.Marker;
 import org.apache.uima.util.Level;
@@ -51,9 +52,9 @@ public class ProcessChildCasRequestComma
 		System.out.println(">>>>>>>>>>>>>>> Controller:"+controller.getComponentName()+
 				" in ProcessChildCasRequestCommand.execute() - Child CAS:"+casReferenceId+
 				" Parent CAS:"+parentCasReferenceId+
-				" from "+super
-                .getMessageStringProperty(AsynchAEMessage.MessageFrom)
-				);
+				" from "+
+				((Origin)super
+                .getMessageObjectProperty(AsynchAEMessage.MessageFrom)).getName());
 
 		if (parentCasReferenceId == null) {
             if (UIMAFramework.getLogger(getClass()).isLoggable(Level.INFO)) {
@@ -384,7 +385,8 @@ public class ProcessChildCasRequestComma
 
 	}
 	private Delegate getLastDelegate(CasStateEntry childCasStateEntry) throws Exception {
-		String cmEndpointName = super.getMessageStringProperty(AsynchAEMessage.MessageFrom);
+		String cmEndpointName = 
+				((Origin)super.getMessageObjectProperty(AsynchAEMessage.MessageFrom)).getName();
 		String newCASProducedBy = ((AggregateAnalysisEngineController) controller).lookUpDelegateKey(cmEndpointName);
 		Delegate delegate = ((AggregateAnalysisEngineController) controller).lookupDelegate(newCASProducedBy);
 

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessInputCasRequestCommand.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessInputCasRequestCommand.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessInputCasRequestCommand.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessInputCasRequestCommand.java Thu Nov 29 17:23:00 2018
@@ -34,6 +34,7 @@ import org.apache.uima.aae.error.AsynchA
 import org.apache.uima.aae.handler.input.ProcessRequestHandler_impl;
 import org.apache.uima.aae.message.AsynchAEMessage;
 import org.apache.uima.aae.message.MessageContext;
+import org.apache.uima.aae.message.Origin;
 import org.apache.uima.aae.monitor.Monitor;
 import org.apache.uima.util.Level;
 
@@ -98,7 +99,8 @@ public class ProcessInputCasRequestComma
 	private void saveDelegateKey() throws Exception{
 		String delegateKey = super.getMessageStringProperty(AsynchAEMessage.DelegateKey);
 		if ( delegateKey == null ) {
-			delegateKey =  super.getMessageStringProperty(AsynchAEMessage.MessageFrom);
+//			delegateKey =  super.getMessageStringProperty(AsynchAEMessage.MessageFrom);
+			delegateKey =  super.getMessageStringProperty(AsynchAEMessage.DelegateKey);
 		}
 		super.getEndpoint().setDelegateKey(delegateKey);
 
@@ -106,7 +108,9 @@ public class ProcessInputCasRequestComma
 	private void saveEndpointName() throws Exception {
 		String endpointName = super.getMessageStringProperty(AsynchAEMessage.EndpointName);
 		if (endpointName == null ) {
-			endpointName = super.getMessageStringProperty(AsynchAEMessage.MessageFrom);
+			Origin origin = (Origin)super.getMessageObjectProperty(AsynchAEMessage.MessageFrom);
+			endpointName = origin.getName();
+//			endpointName = super.getMessageStringProperty(AsynchAEMessage.MessageFrom);
 		}
 		super.getEndpoint().setEndpoint(endpointName);
 

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessInputCasResponseCommand.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessInputCasResponseCommand.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessInputCasResponseCommand.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessInputCasResponseCommand.java Thu Nov 29 17:23:00 2018
@@ -43,6 +43,7 @@ import org.apache.uima.aae.error.UimaEES
 import org.apache.uima.aae.jmx.ServicePerformance;
 import org.apache.uima.aae.message.AsynchAEMessage;
 import org.apache.uima.aae.message.MessageContext;
+import org.apache.uima.aae.message.Origin;
 import org.apache.uima.aae.monitor.Monitor;
 import org.apache.uima.aae.monitor.statistics.AnalysisEnginePerformanceMetrics;
 import org.apache.uima.aae.monitor.statistics.LongNumericStatistic;
@@ -71,11 +72,13 @@ public class ProcessInputCasResponseComm
 
 		int payload = super.getMessageIntProperty(AsynchAEMessage.Payload);
 		String casReferenceId = super.getCasReferenceId(this.getClass());
-		String msgFrom = super.getMessageStringProperty(AsynchAEMessage.MessageFrom);
+//		String msgFrom = super.getMessageStringProperty(AsynchAEMessage.MessageFrom);
+		String msgFrom = ((Origin)super.getMessageObjectProperty(AsynchAEMessage.MessageFrom)).getName();
 
 		System.out.println(">>>>>>>>>>>>>>> Controller:" + controller.getComponentName()
 				+ " in ProcessInputCasResponseCommand.execute() - Input CAS:" + casReferenceId + " from "
-				+ super.getMessageStringProperty(AsynchAEMessage.MessageFrom)+" Payload:"+payload);
+				+ msgFrom +" Payload:"+payload);
+				//+ super.getMessageStringProperty(AsynchAEMessage.MessageFrom)+" Payload:"+payload);
 
 		if (casReferenceId == null) {
 			// LOG THIS
@@ -874,7 +877,8 @@ public class ProcessInputCasResponseComm
 
 			if (super.getEndpoint().getEndpoint() == null
 					|| super.getEndpoint().getEndpoint().trim().length() == 0) {
-				String fromEndpoint = super.getMessageStringProperty(AsynchAEMessage.MessageFrom);
+				String fromEndpoint = 
+						((Origin)super.getMessageObjectProperty(AsynchAEMessage.MessageFrom)).getName();
 				delegateKey = ((AggregateAnalysisEngineController) controller).lookUpDelegateKey(fromEndpoint);
 			} else {
 				delegateKey = ((AggregateAnalysisEngineController) controller)

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/UimaAsMessageProcessor.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/UimaAsMessageProcessor.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/UimaAsMessageProcessor.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/UimaAsMessageProcessor.java Thu Nov 29 17:23:00 2018
@@ -3,9 +3,10 @@ package org.apache.uima.aae.service.comm
 import org.apache.uima.aae.controller.AnalysisEngineController;
 import org.apache.uima.aae.message.MessageContext;
 import org.apache.uima.aae.message.MessageProcessor;
+import org.apache.uima.aae.message.ServiceMessageProcessor;
 import org.apache.uima.aae.message.UimaAsMessage;
 
-public class UimaAsMessageProcessor implements MessageProcessor {
+public class UimaAsMessageProcessor implements ServiceMessageProcessor {
 
 	private AnalysisEngineController controller;
 	
@@ -18,5 +19,9 @@ public class UimaAsMessageProcessor impl
 				CommandFactory.newCommand(message, controller);
 		command.execute();
 	}
+	@Override
+	public AnalysisEngineController getController() {
+		return controller;
+	}
 
 }

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/as/client/DirectMessage.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/as/client/DirectMessage.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/as/client/DirectMessage.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/as/client/DirectMessage.java Thu Nov 29 17:23:00 2018
@@ -108,6 +108,9 @@ public class DirectMessage implements Ui
 		store(AsynchAEMessage.ReplyToEndpoint, replyDestination);
 		return this;
 	}
+	public Origin getOrigin() {
+		return (Origin)stateMap.get(AsynchAEMessage.MessageFrom);
+	}
 	public Object getReplyDestination() {
 		return stateMap.get(AsynchAEMessage.ReplyToEndpoint);
 	}

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/as/client/DirectMessageContext.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/as/client/DirectMessageContext.java?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/as/client/DirectMessageContext.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/as/client/DirectMessageContext.java Thu Nov 29 17:23:00 2018
@@ -46,7 +46,8 @@ public class DirectMessageContext implem
 		endpoint.setSerialFormat(SerialFormat.UNKNOWN);
 		endpoint.setServerURI("java");
 		endpoint.setEndpoint(anEndpointName);
-		endpoint.setReplyDestination(message.get(AsynchAEMessage.ReplyToEndpoint));
+		
+		endpoint.setReplyDestination(message.getReplyDestination());
 		endpoint.setDelegateKey(message.getAsString(AsynchAEMessage.DelegateKey));
 		endpoint.setMessageOrigin((Origin)message.get(AsynchAEMessage.MessageFrom));
 		
@@ -121,7 +122,9 @@ public class DirectMessageContext implem
 	public String getMessageStringProperty(String aMessagePropertyName) throws AsynchAEException {
 		return (String)message.get(aMessagePropertyName);
 	}
-
+	public DirectMessage getMessage() {
+		return message;
+	}
 	public int getMessageIntProperty(String aMessagePropertyName) throws AsynchAEException {
 		return (Integer)message.get(aMessagePropertyName);
 	}

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/.plxarc
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/.plxarc?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/target/.plxarc (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/target/.plxarc Thu Nov 29 17:23:00 2018
@@ -0,0 +1 @@
+maven-shared-archive-resources
\ No newline at end of file

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/.staleFlag
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/.staleFlag?rev=1847732&view=auto
==============================================================================
    (empty)

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/AsynchAECasManager.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/AsynchAECasManager.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/AsynchAECasManager.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/AsynchAECasManager_impl.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/AsynchAECasManager_impl.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/AsynchAECasManager_impl.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/Channel.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/Channel.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/Channel.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/EECasManager_impl.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/EECasManager_impl.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/EECasManager_impl.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCache$CacheEntry.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCache%24CacheEntry.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCache$CacheEntry.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCache$UndefinedCacheEntry.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCache%24UndefinedCacheEntry.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCache$UndefinedCacheEntry.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCache.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCache.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCache.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCacheMBean.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCacheMBean.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InProcessCacheMBean.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InputChannel$ChannelType.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InputChannel%24ChannelType.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InputChannel$ChannelType.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InputChannel.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InputChannel.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/InputChannel.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/Lifecycle.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/Lifecycle.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/Lifecycle.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/OutputChannel.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/OutputChannel.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/OutputChannel.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/ParallelStep.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/ParallelStep.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/ParallelStep.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/SerializerCache.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/SerializerCache.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/SerializerCache.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UIDGenerator.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UIDGenerator.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UIDGenerator.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UIMAEE_Constants.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UIMAEE_Constants.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UIMAEE_Constants.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASApplicationEvent$EventTrigger.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASApplicationEvent%24EventTrigger.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASApplicationEvent$EventTrigger.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASApplicationEvent.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASApplicationEvent.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASApplicationEvent.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASApplicationExitEvent.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASApplicationExitEvent.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASApplicationExitEvent.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASUtils.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASUtils.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaASUtils.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsContext.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsContext.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsContext.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsPriorityBasedThreadFactory$1.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsPriorityBasedThreadFactory%241.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsPriorityBasedThreadFactory$1.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsPriorityBasedThreadFactory.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsPriorityBasedThreadFactory.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsPriorityBasedThreadFactory.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsThreadFactory$1.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsThreadFactory%241.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsThreadFactory$1.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsThreadFactory.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsThreadFactory.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsThreadFactory.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsVersion.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsVersion.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaAsVersion.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaBlockingExecutor$1.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaBlockingExecutor%241.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaBlockingExecutor$1.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaBlockingExecutor.class
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/target/classes/org/apache/uima/aae/UimaBlockingExecutor.class?rev=1847732&view=auto
==============================================================================
Binary file - no diff available.