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 [2/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...

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/.classpath
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/.classpath?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/.classpath (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/.classpath Thu Nov 29 17:23:00 2018
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/classes" path="target/generated-sources/releaseVersion">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/classes" path="target/generated-sources/xmlbeans">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="/uima-as/uimaj-as-connectors/target/classes"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/.project
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/.project?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/.project (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/.project Thu Nov 29 17:23:00 2018
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>uimaj-as-core</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.core.resources.prefs
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.core.resources.prefs?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.core.resources.prefs (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.core.resources.prefs Thu Nov 29 17:23:00 2018
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding//target/generated-sources/releaseVersion=UTF-8
+encoding/<project>=UTF-8

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.jdt.core.prefs?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.jdt.core.prefs (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.jdt.core.prefs Thu Nov 29 17:23:00 2018
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.7

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.m2e.core.prefs
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.m2e.core.prefs?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.m2e.core.prefs (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/.settings/org.eclipse.m2e.core.prefs Thu Nov 29 17:23:00 2018
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/pom.xml
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/pom.xml?rev=1847732&r1=1847731&r2=1847732&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/pom.xml (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/pom.xml Thu Nov 29 17:23:00 2018
@@ -114,6 +114,13 @@
 			<artifactId>spring-jms</artifactId>
 		</dependency>
 		
+		<!-- dependency>
+			<groupId>org.apache.uima</groupId>
+			<artifactId>uimaj-as-connectors</artifactId>
+			<version>${project.version}</version>
+			<scope>compile</scope>
+		</dependency-->
+		
 	</dependencies>
 	<build>
 		<finalName>${project.artifactId}</finalName>

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/client/UimaAS.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/client/UimaAS.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/client/UimaAS.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/client/UimaAS.java Thu Nov 29 17:23:00 2018
@@ -47,7 +47,6 @@ public class UimaAS {
 				Class.forName("org.apache.uima.adapter.jms.client.BaseUIMAAsynchronousEngine_impl");
 		Constructor<?> constructor = uimaClientClz.getConstructor(type);
 		Object[] argInstance = {transport};
-		//return (UimaAsynchronousEngine)uimaClientClz.newInstance();
 		return (UimaAsynchronousEngine)constructor.newInstance(argInstance);
 	}
 	/*

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AggregateAnalysisEngineComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AggregateAnalysisEngineComponent.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/component/AggregateAnalysisEngineComponent.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AggregateAnalysisEngineComponent.java Thu Nov 29 17:23:00 2018
@@ -1,14 +1,94 @@
 package org.apache.uima.aae.component;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import org.apache.uima.aae.AsynchAECasManager_impl;
+import org.apache.uima.aae.InProcessCache;
+import org.apache.uima.aae.UimaASUtils;
+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.Endpoint;
+import org.apache.uima.aae.definition.connectors.Endpoints;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
 import org.apache.uima.aae.definition.connectors.basic.BasicConnector;
+import org.apache.uima.aae.service.command.UimaAsMessageProcessor;
+import org.apache.uima.analysis_engine.AnalysisEngineDescription;
+import org.apache.uima.analysis_engine.metadata.FlowConstraints;
 import org.apache.uima.resource.ResourceSpecifier;
 
 public class AggregateAnalysisEngineComponent extends AnalysisEngineComponent {
-
+	   private  enum FlowControllerType {
+			FIXED
+		}
 	public AggregateAnalysisEngineComponent(String key, ResourceSpecifier rs) {
 		super(key, rs);
 	}
+	
+//	@Override
+//	public AnalysisEngineController newAnalysisEngineController(AnalysisEngineController parentController,
+//			String delegateKey, String resourceSpecifier, AsynchAECasManager_impl casManager, InProcessCache cache, int i, int scaleout ) throws Exception {
+//		throw new UnsupportedOperationException("This method should only be called on PrimitiveAnalysisEngineComponent");
+//
+//	}
+	@Override
+	public AnalysisEngineController newAnalysisEngineController(AnalysisEngineController parentController,  AsynchAECasManager_impl casManager, InProcessCache cache ) throws Exception {
+
+//	public AnalysisEngineController newAnalysisEngineController(AnalysisEngineController parentController, InProcessCache cache, AsynchAECasManager_impl casManager ) throws Exception {
+		AnalysisEngineController controller;
+		// add an endpoint for each delegate in this aggregate. The endpoint Map is
+		// required
+		// during initialization of an aggregate controller.
+		Map<String, Endpoint> endpoints = new HashMap<>();
+
+		for (AnalysisEngineComponent delegateComponent : getChildren()) {
+			endpoints.put(delegateComponent.getKey(), delegateComponent.getEndpoint());
+		}
+		controller = new AggregateAnalysisEngineController_impl(parentController, getKey(),
+				getResourceSpecifier().getSourceUrlString(), casManager, cache, endpoints);
+		addFlowController((AggregateAnalysisEngineController) controller,
+				(AnalysisEngineDescription) getResourceSpecifier());
+
+		String aggregateId = (Objects.isNull(parentController) ? controller.getComponentName() : getKey());
 
+		UimaAsEndpoint directEndpoint = Endpoints.newEndpoint(EndpointType.Direct, aggregateId,
+				new UimaAsMessageProcessor(controller));
+		controller.addEndpoint(directEndpoint);
+
+
+		return controller;
+	}
+	protected void addFlowController(AggregateAnalysisEngineController aggregateController, AnalysisEngineDescription rs) throws Exception {
+		String fcDescriptor=null;
+		System.out.println(rs.getSourceUrlString());
+		
+		// first check if the AE aggregate descriptor defines a custom flow controller  
+		if ( rs.getFlowControllerDeclaration() != null ) {
+			if( rs.getFlowControllerDeclaration().getImport() == null ) {
+				System.out.println("........................ What!!!!");
+			}
+		
+			// the fc is either imported by name or a location
+			fcDescriptor = rs.getFlowControllerDeclaration().getImport().getName();
+		    if ( fcDescriptor == null ) {
+		    	fcDescriptor = rs.getFlowControllerDeclaration().getImport().getLocation();
+		    	
+		    	fcDescriptor = UimaASUtils.fixPath(rs.getSourceUrlString(), fcDescriptor);
+		    } else {
+		    	throw new RuntimeException("*** Internal error - Invalid flowController specification - descriptor:"+rs.getFlowControllerDeclaration().getSourceUrlString());
+		    }
+		} else {
+			FlowConstraints fc = rs.getAnalysisEngineMetaData().getFlowConstraints();
+			if (FlowControllerType.FIXED.name().equals(fc.getFlowConstraintsType()) ) {
+				fcDescriptor = ("*importByName:org.apache.uima.flow.FixedFlowController");
+			}
+		}
+		((AggregateAnalysisEngineController_impl)aggregateController).setFlowControllerDescriptor(fcDescriptor);
+
+	}
 	@Override
 	public boolean isPrimitive() {
 		return false;

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AnalysisEngineComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AnalysisEngineComponent.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/component/AnalysisEngineComponent.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AnalysisEngineComponent.java Thu Nov 29 17:23:00 2018
@@ -3,12 +3,15 @@ package org.apache.uima.aae.component;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.uima.aae.AsynchAECasManager_impl;
+import org.apache.uima.aae.InProcessCache;
+import org.apache.uima.aae.controller.AnalysisEngineController;
 import org.apache.uima.aae.controller.DelegateEndpoint;
 import org.apache.uima.aae.controller.Endpoint;
 import org.apache.uima.aae.controller.DelegateEndpoint.Builder;
 import org.apache.uima.resource.ResourceSpecifier;
 
-public abstract class AnalysisEngineComponent  {
+public abstract class AnalysisEngineComponent { // implements ComponentVisitor  {
 
 	protected List<AnalysisEngineComponent> delegateList = new ArrayList<>();
 	private boolean isCasMultiplier = false;
@@ -21,17 +24,27 @@ public abstract class AnalysisEngineComp
 	private int requestThreadPoolSize=1;
 	private int responseThreadPoolSize=1;
 	private Endpoint endpoint = null;
-	
+	private boolean visited = false;
 	
 	public abstract Object getConnector();
 
+	public abstract AnalysisEngineController newAnalysisEngineController(AnalysisEngineController parentController,  
+			 AsynchAECasManager_impl casManager, InProcessCache cache ) throws Exception;
+//	public abstract AnalysisEngineController newAnalysisEngineController(AnalysisEngineController parentController,
+//			String delegateKey, String resourceSpecifier,  AsynchAECasManager_impl casManager,InProcessCache cache, int i, int scaleout ) throws Exception;
+
 	public AnalysisEngineComponent() {}
 	public AnalysisEngineComponent(String key, ResourceSpecifier rs) {
 		componentKey = key;
 		resourceSpecifier = rs;
 	}
 
-	
+	public void setVisited() {
+		visited = true;
+	}
+	public boolean visited() {
+		return visited;
+	}
 	public CasMultiplierNature getCasMultiplierNature() {
 		return casMultiplier;
 	}

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

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

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/PrimitiveAnalysisEngineComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/PrimitiveAnalysisEngineComponent.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/component/PrimitiveAnalysisEngineComponent.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/PrimitiveAnalysisEngineComponent.java Thu Nov 29 17:23:00 2018
@@ -1,5 +1,9 @@
 package org.apache.uima.aae.component;
 
+import org.apache.uima.aae.AsynchAECasManager_impl;
+import org.apache.uima.aae.InProcessCache;
+import org.apache.uima.aae.controller.AnalysisEngineController;
+import org.apache.uima.aae.controller.PrimitiveAnalysisEngineController_impl;
 import org.apache.uima.aae.definition.connectors.basic.BasicConnector;
 import org.apache.uima.resource.ResourceSpecifier;
 
@@ -38,5 +42,15 @@ public class PrimitiveAnalysisEngineComp
 	public Object getConnector() {
 		return new BasicConnector();
 	}
+//	@Override
+//	public AnalysisEngineController newAnalysisEngineController(AnalysisEngineController parentController,
+//			AsynchAECasManager_impl casManager, InProcessCache cache ) throws Exception {
+//		throw new UnsupportedOperationException("This method should only be called on AggregateAnalysisEngineComponent");
+//	}
+	@Override
+	public AnalysisEngineController newAnalysisEngineController(AnalysisEngineController parentController,
+			 AsynchAECasManager_impl casManager, InProcessCache cache ) throws Exception {
+		return new PrimitiveAnalysisEngineController_impl(parentController, getKey(), getResourceSpecifier().getSourceUrlString(),casManager, cache, 10, getScaleout());
+	}
 
 }

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TopLevelServiceComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TopLevelServiceComponent.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/component/TopLevelServiceComponent.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TopLevelServiceComponent.java Thu Nov 29 17:23:00 2018
@@ -5,6 +5,9 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
+import org.apache.uima.aae.AsynchAECasManager_impl;
+import org.apache.uima.aae.InProcessCache;
+import org.apache.uima.aae.controller.AnalysisEngineController;
 import org.apache.uima.aae.controller.DelegateEndpoint;
 import org.apache.uima.aae.controller.Endpoint;
 import org.apache.uima.resourceSpecifier.AnalysisEngineDeploymentDescriptionDocument;
@@ -202,7 +205,10 @@ public class TopLevelServiceComponent ex
 		}
 			
 	}
-	
+	@Override
+	public List<AnalysisEngineComponent> getChildren() {
+		return decoratedComponent.getChildren();
+	}
 	public String getName() {
 		return name;
 	}
@@ -245,4 +251,16 @@ public class TopLevelServiceComponent ex
 
 
 	}
+
+	@Override
+	public AnalysisEngineController newAnalysisEngineController(AnalysisEngineController parentController,
+			AsynchAECasManager_impl casManager, InProcessCache cache) throws Exception {
+		return decoratedComponent.newAnalysisEngineController(parentController, casManager, cache);
+	}
+//	@Override
+//	public AnalysisEngineController newAnalysisEngineController(AnalysisEngineController parentController,
+//			String delegateKey, String resourceSpecifier, AsynchAECasManager_impl casManager, InProcessCache cache,
+//			int i, int scaleout) throws Exception {
+//		return decoratedComponent.newAnalysisEngineController(parentController, delegateKey, resourceSpecifier, casManager, cache, i, scaleout);
+//	}
 }

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.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/controller/AggregateAnalysisEngineController_impl.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java Thu Nov 29 17:23:00 2018
@@ -29,6 +29,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CountDownLatch;
@@ -46,7 +47,11 @@ import org.apache.uima.aae.InProcessCach
 import org.apache.uima.aae.InputChannel;
 import org.apache.uima.aae.UIMAEE_Constants;
 import org.apache.uima.aae.UimaClassFactory;
+import org.apache.uima.aae.client.UimaAsynchronousEngine.Transport;
 import org.apache.uima.aae.controller.LocalCache.CasStateEntry;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint;
+import org.apache.uima.aae.definition.connectors.UimaAsConsumer.ConsumerType;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
 import org.apache.uima.aae.delegate.ControllerDelegate;
 import org.apache.uima.aae.delegate.Delegate;
 import org.apache.uima.aae.error.AsynchAEException;
@@ -62,6 +67,9 @@ import org.apache.uima.aae.jmx.ServiceEr
 import org.apache.uima.aae.jmx.ServiceInfo;
 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.UimaAsOrigin;
 import org.apache.uima.aae.monitor.Monitor;
 import org.apache.uima.aae.monitor.statistics.LongNumericStatistic;
 import org.apache.uima.aae.monitor.statistics.Statistic;
@@ -443,9 +451,11 @@ implements
           }
         }
       }
+      
       // Reply to a client once for each CPC request. doSendCpcReply is volatile thus
       // no need to synchronize it
       if (doSendCpcReply) {
+    	  System.out.println("All Delegates Processes CPC - Replying to Client");
         sendCpcReply(cEndpoint);
         doSendCpcReply = false; // reset for the next CPC
       }
@@ -485,8 +495,30 @@ implements
       getOutputChannel().sendReply(AsynchAEMessage.CollectionProcessComplete, aClientEndpoint, null, false);
     }
 */
-    getOutputChannel(aClientEndpoint).sendReply(AsynchAEMessage.CollectionProcessComplete, aClientEndpoint, null, false);
-    clearStats();
+    
+    if ( aClientEndpoint.getServerURI().equalsIgnoreCase(Transport.Java.name())) {
+ 		String serviceUri = 
+				new StringBuilder(EndpointType.Direct.getName())
+				.append(aClientEndpoint.getMessageOrigin().getName()) //getDelegateKey())
+				.append(":").append(ConsumerType.CpcResponse.name()).toString();
+       
+		try {
+	        UimaAsEndpoint e = getEndpoint(EndpointType.Direct);
+	        MessageContext cpcResponse = 
+	        		e.newMessageBuilder().
+	        		newCpCReplyMessage(e.getOrigin()).
+	        		withPayload(AsynchAEMessage.None).
+	        		build();
+	        e.dispatch(cpcResponse, serviceUri);
+			
+		} catch( Exception e) {
+			e.printStackTrace();
+		}
+     } else {
+    	   getOutputChannel(aClientEndpoint).sendReply(AsynchAEMessage.CollectionProcessComplete, aClientEndpoint, null, false);
+ 
+     }
+     clearStats();
   }
 
   
@@ -580,42 +612,58 @@ implements
         }
       }
     } else {
-      Set<?> set = destinationMap.entrySet();
-      for (Iterator<?> it = set.iterator(); it.hasNext();) {
-        Map.Entry<String, Endpoint> entry = (Map.Entry) it.next();
-        Endpoint endpoint = (Endpoint) entry.getValue();
-        /*
-        if (endpoint != null && endpoint.getStatus() == Endpoint.OK) {
-
-          if (!endpoint.isRemote()) {
-            try {
-              UimaTransport transport = getTransport(endpoint.getEndpoint());
-              UimaMessage message = transport
-                      .produceMessage(AsynchAEMessage.CollectionProcessComplete,
-                              AsynchAEMessage.Request, getName());
-              // Send reply back to the client. Use internal (non-jms) transport
-              transport.getUimaMessageDispatcher(endpoint.getEndpoint()).dispatch(message);
-            } catch (Exception e) {
-              if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.WARNING)) {
-                UIMAFramework.getLogger(CLASS_NAME).logrb(Level.WARNING, CLASS_NAME.getName(),
-                        "collectionProcessComplete", UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE,
-                        "UIMAEE_service_exception_WARNING", getComponentName());
-
-                UIMAFramework.getLogger(CLASS_NAME).logrb(Level.WARNING, getClass().getName(),
-                        "collectionProcessComplete", UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE,
-                        "UIMAEE_exception__WARNING", e);
+        Set<?> set = destinationMap.entrySet();
+        for (Iterator<?> it = set.iterator(); it.hasNext();) {
+          Map.Entry<String, Endpoint> entry = (Map.Entry) it.next();
+          Endpoint endpoint = (Endpoint) entry.getValue();
+          /*
+          if (endpoint != null && endpoint.getStatus() == Endpoint.OK) {
+
+            if (!endpoint.isRemote()) {
+              try {
+                UimaTransport transport = getTransport(endpoint.getEndpoint());
+                UimaMessage message = transport
+                        .produceMessage(AsynchAEMessage.CollectionProcessComplete,
+                                AsynchAEMessage.Request, getName());
+                // Send reply back to the client. Use internal (non-jms) transport
+                transport.getUimaMessageDispatcher(endpoint.getEndpoint()).dispatch(message);
+              } catch (Exception e) {
+                if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.WARNING)) {
+                  UIMAFramework.getLogger(CLASS_NAME).logrb(Level.WARNING, CLASS_NAME.getName(),
+                          "collectionProcessComplete", UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE,
+                          "UIMAEE_service_exception_WARNING", getComponentName());
+
+                  UIMAFramework.getLogger(CLASS_NAME).logrb(Level.WARNING, getClass().getName(),
+                          "collectionProcessComplete", UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE,
+                          "UIMAEE_exception__WARNING", e);
+                }
               }
+            } else {
+              getOutputChannel().sendRequest(AsynchAEMessage.CollectionProcessComplete, null, endpoint);
+              endpoint.startCollectionProcessCompleteTimer();
             }
+          }
+          */
+          if ( endpoint.getServerURI().equalsIgnoreCase(Transport.Java.name())) {
+      		String serviceUri = 
+    				new StringBuilder(EndpointType.Direct.getName())
+    				.append(endpoint.getDelegateKey())
+    				.append(":").append(ConsumerType.CpcRequest.name()).toString();
+            
+    		try {
+    	        UimaAsEndpoint e = getEndpoint(EndpointType.Direct);
+    	        MessageContext cpcRequest = 
+    	        		e.newMessageBuilder().newCpCRequestMessage(e.getOrigin()).build();
+    	        e.dispatch(cpcRequest, serviceUri);
+    			
+    		} catch( Exception e) {
+    			e.printStackTrace();
+    		}
           } else {
-            getOutputChannel().sendRequest(AsynchAEMessage.CollectionProcessComplete, null, endpoint);
-            endpoint.startCollectionProcessCompleteTimer();
+              getOutputChannel(endpoint).sendRequest(AsynchAEMessage.CollectionProcessComplete, null, endpoint);
+              endpoint.startCollectionProcessCompleteTimer();
           }
         }
-        */
-        getOutputChannel(endpoint).sendRequest(AsynchAEMessage.CollectionProcessComplete, null, endpoint);
-        endpoint.startCollectionProcessCompleteTimer();
-
-      }
     }
   }
 
@@ -1617,7 +1665,22 @@ implements
         delegateEndpoints[i].initialize();
         delegateEndpoints[i].setController(this);
         delegateEndpoints[i].setWaitingForResponse(true);
-        getOutputChannel(ENDPOINT_TYPE.DIRECT).sendRequest(AsynchAEMessage.GetMeta, null, delegateEndpoints[i]);
+		String serviceUri = 
+				new StringBuilder(EndpointType.Direct.getName())
+				.append(delegateEndpoints[i].getDelegateKey())
+				.append(":").append(ConsumerType.GetMetaRequest.name()).toString();
+        
+		try {
+	        UimaAsEndpoint e = getEndpoint(EndpointType.Direct);
+	        MessageContext getMetaRequest = 
+	        		e.newMessageBuilder().newGetMetaRequestMessage(e.getOrigin()).build();
+	        e.dispatch(getMetaRequest, serviceUri);
+			
+		} catch( Exception e) {
+			e.printStackTrace();
+		}
+        
+//        getOutputChannel(ENDPOINT_TYPE.DIRECT).sendRequest(AsynchAEMessage.GetMeta, null, delegateEndpoints[i]);
 /*
         try {
           UimaMessage message = getTransport(delegateEndpoints[i].getEndpoint()).produceMessage(
@@ -2317,7 +2380,33 @@ implements
       }
       // Send CAS to a given reply endpoint
 //      sendVMMessage(mType, replyEndpoint, cacheEntry);
-      getOutputChannel(replyEndpoint).sendReply(casStateEntry, replyEndpoint);
+      if ( replyEndpoint.getServerURI().equalsIgnoreCase(Transport.Java.name())) {
+		    StringBuilder sb = 
+  		    		new StringBuilder();
+  		    if ( replyEndpoint.getMessageOrigin().getName().startsWith(EndpointType.Direct.getName())) {
+  		    	sb.append( replyEndpoint.getMessageOrigin().getName());
+  		    } else {
+  		    	sb.append(EndpointType.Direct.getName()).append(replyEndpoint.getMessageOrigin().getName());
+  		    }
+  		    sb.append(":").append(ConsumerType.ProcessCASResponse.name());
+  		    
+           	UimaAsEndpoint serviceEndpoint = 
+            			getEndpoint(EndpointType.Direct);
+           	//			getEndpoint(anEndpoint.getMessageOrigin().getType());
+            	
+           	MessageContext reply = serviceEndpoint.newMessageBuilder()
+            			.newProcessCASReplyMessage(serviceEndpoint.getOrigin())
+            			.withSenderKey(replyEndpoint.getDelegateKey())
+            			.withReplyDestination(replyEndpoint.getReplyDestination())
+            			.withCasReferenceId(casStateEntry.getCasReferenceId())
+            			.withPayload(AsynchAEMessage.CASRefID)
+            			.build();
+            // dispatch() will create a Producer for a given reply destination
+           	// and cache it for future use. 
+           	serviceEndpoint.dispatch(reply, sb.toString());
+      } else {
+          getOutputChannel(replyEndpoint).sendReply(casStateEntry, replyEndpoint);
+      }
 
     }
   }
@@ -2572,8 +2661,34 @@ implements
 
   private void dispatch(CacheEntry entry, Endpoint anEndpoint) throws AsynchAEException {
     if (!anEndpoint.isRemote()) {
-        getOutputChannel(ENDPOINT_TYPE.DIRECT).sendRequest(AsynchAEMessage.Process, entry.getCasReferenceId(), anEndpoint);
-/*
+       // getOutputChannel(ENDPOINT_TYPE.DIRECT).sendRequest(AsynchAEMessage.Process, entry.getCasReferenceId(), anEndpoint);
+    	UimaAsEndpoint endpoint = getEndpoint(EndpointType.Direct);
+    	try {
+    		Origin orig = endpoint.getOrigin();
+    		Origin o = getOrigin();
+    		if ( Objects.isNull(o.getName()) || o.getName().isEmpty() ) {
+    			o = new UimaAsOrigin(getComponentName(), EndpointType.Direct);
+    		}
+        	MessageContext message = 
+        			endpoint.newMessageBuilder().newProcessCASRequestMessage(o)
+    				.withPayload(AsynchAEMessage.CASRefID)
+    				.withCasReferenceId(entry.getCasReferenceId())
+    				.build();
+        	
+    		StringBuilder serviceUri = 
+    				new StringBuilder(EndpointType.Direct.getName()).
+    					append(anEndpoint.getDelegateKey()).
+    					append(":").append(ConsumerType.ProcessCASRequest.name());
+
+    		endpoint.dispatch(message, serviceUri.toString());
+    		
+    		
+    	} catch( Exception ee) {
+    		throw new AsynchAEException(ee);
+    	}
+    	
+    	
+    	/*
       try {
         UimaTransport transport = getTransport(anEndpoint.getEndpoint());
         UimaMessage message = transport.produceMessage(AsynchAEMessage.Process,

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AnalysisEngineController.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AnalysisEngineController.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/controller/AnalysisEngineController.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AnalysisEngineController.java Thu Nov 29 17:23:00 2018
@@ -22,17 +22,17 @@ package org.apache.uima.aae.controller;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ThreadFactory;
 
 import org.apache.uima.UimaContext;
 import org.apache.uima.aae.AsynchAECasManager;
 import org.apache.uima.aae.InProcessCache;
 import org.apache.uima.aae.InputChannel;
 import org.apache.uima.aae.OutputChannel;
-import org.apache.uima.aae.UimaAsContext;
 import org.apache.uima.aae.UimaEEAdminContext;
 import org.apache.uima.aae.controller.BaseAnalysisEngineController.ENDPOINT_TYPE;
 import org.apache.uima.aae.controller.BaseAnalysisEngineController.ServiceState;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
 import org.apache.uima.aae.error.AsynchAEException;
 import org.apache.uima.aae.error.ErrorContext;
 import org.apache.uima.aae.error.ErrorHandlerChain;
@@ -43,8 +43,6 @@ import org.apache.uima.aae.jmx.ServicePe
 import org.apache.uima.aae.message.Origin;
 import org.apache.uima.aae.monitor.Monitor;
 import org.apache.uima.aae.spi.transport.UimaMessageListener;
-import org.apache.uima.aae.spi.transport.UimaTransport;
-import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
 import org.apache.uima.as.client.DirectInputChannel;
 import org.apache.uima.as.client.Listener;
 import org.apache.uima.cas.CAS;
@@ -58,6 +56,12 @@ public interface AnalysisEngineControlle
 
   public Origin getOrigin();
   
+  public void addEndpoint(UimaAsEndpoint endpoint);
+  
+  public UimaAsEndpoint getEndpoint(EndpointType type);
+  
+  public void start() throws Exception;
+  
   public void sendMetadata(Endpoint anEndpoint) throws AsynchAEException;
 
   public ControllerLatch getControllerLatch();

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.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/controller/BaseAnalysisEngineController.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java Thu Nov 29 17:23:00 2018
@@ -29,6 +29,7 @@ import java.net.URLClassLoader;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -63,6 +64,9 @@ import org.apache.uima.aae.UimaEEAdminCo
 import org.apache.uima.aae.VersionCompatibilityChecker;
 import org.apache.uima.aae.WarmUpDataProvider;
 import org.apache.uima.aae.controller.LocalCache.CasStateEntry;
+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.delegate.Delegate;
 import org.apache.uima.aae.error.AsynchAEException;
 import org.apache.uima.aae.error.ErrorContext;
@@ -78,6 +82,7 @@ import org.apache.uima.aae.jmx.ServiceEr
 import org.apache.uima.aae.jmx.ServiceInfo;
 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.UimaAsOrigin;
 import org.apache.uima.aae.monitor.Monitor;
@@ -286,6 +291,11 @@ public abstract class BaseAnalysisEngine
   
   protected abstract void doWarmUp(CAS cas, String casReferenceId) throws Exception;
 
+  private Map<EndpointType, UimaAsEndpoint> endpoints = 
+			new EnumMap<>(EndpointType.class);
+
+
+
   public BaseAnalysisEngineController() {
 	  origin = new UimaAsOrigin("");
   }
@@ -519,6 +529,10 @@ public abstract class BaseAnalysisEngine
         }
       }
     }
+    if (!registeredWithJMXServer) {
+        registeredWithJMXServer = true;
+        registerServiceWithJMX(jmxContext, false);
+      }
 
     // Create an instance of ControllerMBean and register it with JMX Server.
     // This bean exposes service lifecycle APIs to enable remote stop
@@ -528,6 +542,18 @@ public abstract class BaseAnalysisEngine
       registerWithAgent(controller, jmxName);
     }
   }
+  
+  public void addEndpoint(UimaAsEndpoint endpoint) {
+	  endpoints.putIfAbsent(endpoint.getType(), endpoint);
+  }
+  public UimaAsEndpoint getEndpoint(EndpointType type) {
+	  return endpoints.get(type);
+  }
+  public void start() throws Exception {
+	  for( Entry<EndpointType, UimaAsEndpoint> entry : endpoints.entrySet()) {
+		  entry.getValue().start();
+	  }
+  }
   public UimaContext getUimaContext() {
 	  return uimaContext;
   }
@@ -978,6 +1004,8 @@ public abstract class BaseAnalysisEngine
     name = jmxManagement.getJmxDomain() + key_value_list + ",name=" + thisComponentName + "_"
             + serviceErrors.getLabel();
     registerWithAgent(serviceErrors, name);
+    
+
   }
 
   protected void cleanUp() throws Exception {
@@ -3205,7 +3233,20 @@ public abstract class BaseAnalysisEngine
           getOutputChannel().sendReply(metadata, anEndpoint, true);
         }
         */
-          getOutputChannel(anEndpoint).sendReply(metadata, anEndpoint, true);
+    	  if ( anEndpoint.getServerURI().equals("java")) {
+    		  UimaAsEndpoint endpoint = getEndpoint(EndpointType.Direct);
+    		  
+    		  MessageContext getMetaResponseMessage = endpoint.newMessageBuilder()
+    		  	.newGetMetaReplyMessage(endpoint.getOrigin())
+    		  	.withPayload(AsynchAEMessage.Metadata)
+    		  	.withReplyDestination(anEndpoint.getReplyDestination())
+    		  	.withMetadata(metadata)
+    		  	.build();
+    		  StringBuilder sb = new StringBuilder(anEndpoint.getMessageOrigin().getName()).append(":").append(ConsumerType.GetMetaResponse.name());
+    		  endpoint.dispatch(getMetaResponseMessage, sb.toString() );
+    	  } else {
+              getOutputChannel(anEndpoint).sendReply(metadata, anEndpoint, true);
+    	  }
 
       }
     } catch (Exception e) {

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAeInitializer.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAeInitializer.java?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAeInitializer.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAeInitializer.java Thu Nov 29 17:23:00 2018
@@ -0,0 +1,56 @@
+package org.apache.uima.aae.controller;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.uima.aae.UimaAsThreadFactory;
+import org.apache.uima.aae.definition.connectors.Initializer;
+import org.apache.uima.aae.definition.connectors.ListenerCallback;
+import org.apache.uima.aae.spi.transport.vm.UimaVmQueue;
+
+public class PrimitiveAeInitializer implements Initializer {
+
+	private final PrimitiveAnalysisEngineController controller;
+	private final int scaleout;
+	private final CountDownLatch latchToCountNumberOfInitedThreads;
+	private final CountDownLatch latchToCountNumberOfTerminatedThreads;
+	private ExecutorService executor;
+	
+	public PrimitiveAeInitializer(PrimitiveAnalysisEngineController controller, int scaleout) {
+		this.controller = controller;
+		this.scaleout = scaleout;
+		latchToCountNumberOfInitedThreads = new CountDownLatch(scaleout);
+		latchToCountNumberOfTerminatedThreads = new CountDownLatch(scaleout);
+
+	}
+	
+	@Override
+	public ExecutorService initialize(ListenerCallback callback) throws Exception {
+		ThreadGroup threadGroup = new ThreadGroup("VmThreadGroup" + 1 + "_" + controller.getComponentName());
+		executor = new ThreadPoolExecutor(scaleout, scaleout, Long.MAX_VALUE, TimeUnit.DAYS, new UimaVmQueue());
+		UimaAsThreadFactory tf = null;
+		
+//		ListenerCallback callback = 
+//				new DirectListenerCallback(this);
+		
+		tf = new UimaAsThreadFactory().
+				withCallback(callback).
+				withThreadGroup(threadGroup).
+				withPrimitiveController(controller).
+				withTerminatedThreadsLatch(latchToCountNumberOfTerminatedThreads).
+				withInitedThreadsLatch(latchToCountNumberOfInitedThreads);
+		tf.setDaemon(true);
+		((ThreadPoolExecutor)executor).setThreadFactory(tf);
+		((ThreadPoolExecutor)executor).prestartAllCoreThreads();
+		latchToCountNumberOfInitedThreads.await();
+		if ( callback.failedInitialization() ) {
+			throw callback.getException();
+		}
+		System.out.println("Executor Started - All Process Threads Initialized");
+		
+		return executor;
+	}
+
+}

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

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAnalysisEngineController_impl.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAnalysisEngineController_impl.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/controller/PrimitiveAnalysisEngineController_impl.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAnalysisEngineController_impl.java Thu Nov 29 17:23:00 2018
@@ -31,6 +31,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.concurrent.CountDownLatch;
@@ -45,6 +46,9 @@ import org.apache.uima.aae.InProcessCach
 import org.apache.uima.aae.UIMAEE_Constants;
 import org.apache.uima.aae.UimaClassFactory;
 import org.apache.uima.aae.controller.LocalCache.CasStateEntry;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint;
+import org.apache.uima.aae.definition.connectors.UimaAsConsumer.ConsumerType;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
 import org.apache.uima.aae.delegate.Delegate;
 import org.apache.uima.aae.error.AsynchAEException;
 import org.apache.uima.aae.error.ErrorContext;
@@ -54,6 +58,7 @@ import org.apache.uima.aae.jmx.Primitive
 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.UimaAsMessage;
 import org.apache.uima.aae.monitor.Monitor;
 import org.apache.uima.aae.monitor.statistics.AnalysisEnginePerformanceMetrics;
 import org.apache.uima.aae.spi.transport.UimaMessage;
@@ -541,13 +546,9 @@ public class PrimitiveAnalysisEngineCont
     localCache.dumpContents();
     try {
     	String delegateKey = getKey();
-    	System.out.println("...... "+delegateKey+".collectionProcessComplete() - calling checkout instance");;
       ae = aeInstancePool.checkout();
-  	System.out.println("...... "+delegateKey+".collectionProcessComplete() - got instance");;
       if (ae != null) {
         ae.collectionProcessComplete();
-      	System.out.println("...... "+delegateKey+".collectionProcessComplete() - ae.CPC() returned");;
-
       }
       if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.FINEST)) {
         UIMAFramework.getLogger(CLASS_NAME).logrb(Level.FINEST, getClass().getName(),
@@ -567,10 +568,31 @@ public class PrimitiveAnalysisEngineCont
       }
 */
       
-    	System.out.println("...... "+delegateKey+".collectionProcessComplete() - trying to send CPC reply");;
+   	
+    	if ( "java".equals(anEndpoint.getServerURI()) ) {
+           	UimaAsEndpoint serviceEndpoint = 
+        			getEndpoint(anEndpoint.getMessageOrigin().getType());
+        	
+       	    MessageContext reply = serviceEndpoint.newMessageBuilder()
+        			.newCpCReplyMessage(serviceEndpoint.getOrigin())
+        			// add this service delegate key
+        			.withSenderKey(anEndpoint.getDelegateKey())
+        			// add destination for this reply
+        			.withReplyDestination(anEndpoint.getReplyDestination())
+        			.withPayload(AsynchAEMessage.None)
+        			.build();
+       	    // dispatch() will create a Producer for a given reply destination
+       	    // and cache it for future use. 
+       	    serviceEndpoint.dispatch(reply, anEndpoint.getMessageOrigin().getName());
+    	} else {
+    	      getOutputChannel(anEndpoint).sendReply(AsynchAEMessage.CollectionProcessComplete, anEndpoint, null, false);
+    	}
+    	
+    	
 
-      getOutputChannel(anEndpoint).sendReply(AsynchAEMessage.CollectionProcessComplete, anEndpoint, null, false);
-    	System.out.println("...... "+delegateKey+".collectionProcessComplete() - sent CPC reply");;
+      
+      
+      System.out.println("...... "+delegateKey+".collectionProcessComplete() - sent CPC reply");;
 
       if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.FINE)) {
         UIMAFramework.getLogger(CLASS_NAME).logrb(Level.FINE, getClass().getName(),
@@ -1031,8 +1053,35 @@ public class PrimitiveAnalysisEngineCont
 
         // Send generated CAS to the client
         if (!stopped) {
-            getOutputChannel(anEndpoint).sendReply(childCasStateEntry, anEndpoint);
-          
+            //getOutputChannel(anEndpoint).sendReply(childCasStateEntry, anEndpoint);
+  		    StringBuilder sb = 
+  		    		new StringBuilder();
+  		    if ( anEndpoint.getMessageOrigin().getName().startsWith(EndpointType.Direct.getName())) {
+  		    	sb.append( anEndpoint.getMessageOrigin().getName());
+  		    } else {
+  		    	sb.append("direct:").append(anEndpoint.getMessageOrigin().getName());
+  		    }
+  		    sb.append(":").append(ConsumerType.ProcessCASRequest.name());
+  		    
+          	UimaAsEndpoint serviceEndpoint = 
+        			getEndpoint(anEndpoint.getMessageOrigin().getType());
+        	
+          	MessageContext reply = serviceEndpoint.newMessageBuilder()
+        			.newProcessCASRequestMessage(serviceEndpoint.getOrigin())
+        			.withSenderKey(anEndpoint.getDelegateKey())
+        			.withReplyDestination(anEndpoint.getReplyDestination())
+        			.withCasReferenceId(childCasStateEntry.getCasReferenceId())
+        			.withParentCasReferenceId(aCasReferenceId)
+        			.withSequenceNo(childCasStateEntry.getSequenceNumber())
+        			.withPayload(AsynchAEMessage.CASRefID)
+        			.build();
+          	// dispatch() will create a Producer for a given reply destination
+          	// and cache it for future use. 
+          	serviceEndpoint.dispatch(reply, sb.toString());
+
+            
+            
+            
             //	Check for delivery failure. The client may have terminated while an input CAS was being processed
           if ( childCasStateEntry.deliveryToClientFailed() ) {
             if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.INFO)) {
@@ -1177,7 +1226,36 @@ public class PrimitiveAnalysisEngineCont
 
         if (!stopped && !clientUnreachable ) {
 //            getOutputChannel(anEndpoint).sendReply(getInProcessCache().getCacheEntryForCAS(aCasReferenceId), anEndpoint);
-            getOutputChannel(anEndpoint).sendReply(getLocalCache().lookupEntry(aCasReferenceId), anEndpoint);
+ 
+        	
+/* JC 10/24/18        	
+        	getOutputChannel(anEndpoint).
+            sendReply(getLocalCache().lookupEntry(aCasReferenceId), anEndpoint);
+            */	
+        	
+  		    StringBuilder sb = 
+  		    		new StringBuilder();
+  		    if ( anEndpoint.getMessageOrigin().getName().startsWith(EndpointType.Direct.getName())) {
+  		    	sb.append( anEndpoint.getMessageOrigin().getName());
+  		    } else {
+  		    	sb.append(EndpointType.Direct.getName()).append(anEndpoint.getMessageOrigin().getName());
+  		    }
+  		    sb.append(":").append(ConsumerType.ProcessCASResponse.name());
+  		    
+           	UimaAsEndpoint serviceEndpoint = 
+            			getEndpoint(EndpointType.Direct);
+           	//			getEndpoint(anEndpoint.getMessageOrigin().getType());
+            	
+           	MessageContext reply = serviceEndpoint.newMessageBuilder()
+            			.newProcessCASReplyMessage(serviceEndpoint.getOrigin())
+            			.withSenderKey(anEndpoint.getDelegateKey())
+            			.withReplyDestination(anEndpoint.getReplyDestination())
+            			.withCasReferenceId(aCasReferenceId)
+            			.withPayload(AsynchAEMessage.CASRefID)
+            			.build();
+            // dispatch() will create a Producer for a given reply destination
+           	// and cache it for future use. 
+           	serviceEndpoint.dispatch(reply, sb.toString());
         }
 
         inputCASReturned = true;

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/Endpoints.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/Endpoints.java?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/Endpoints.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/Endpoints.java Thu Nov 29 17:23:00 2018
@@ -0,0 +1,35 @@
+package org.apache.uima.aae.definition.connectors;
+
+import java.lang.reflect.Constructor;
+
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
+import org.apache.uima.aae.message.MessageProcessor;
+import org.apache.uima.aae.service.command.UimaAsMessageProcessor;
+
+public class Endpoints {
+
+	public static UimaAsEndpoint newEndpoint(EndpointType type, String name) throws Exception {
+		return newEndpoint(type, name, null);
+	}
+
+	public static UimaAsEndpoint newEndpoint(EndpointType type, String name, MessageProcessor processor) throws Exception {
+		UimaAsEndpoint endpoint=null;
+		Class<?> clz ;
+		switch(type) {
+			case Direct:
+				clz = Class.forName("org.apache.uima.as.connectors.direct.DirectUimaAsEndpoint");
+				Constructor<?> ctor = clz.getConstructor(new Class[] {MessageProcessor.class, String.class});
+				endpoint = (UimaAsEndpoint)ctor.newInstance(new Object[] {processor,name});
+			break;
+			
+			case JMS:
+			
+			break;
+			
+			default:
+				
+		}
+		
+		return endpoint;
+	}
+}

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/Endpoints.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/Initializer.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/Initializer.java?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/Initializer.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/Initializer.java Thu Nov 29 17:23:00 2018
@@ -0,0 +1,7 @@
+package org.apache.uima.aae.definition.connectors;
+
+import java.util.concurrent.ExecutorService;
+
+public interface Initializer {
+	public ExecutorService initialize(ListenerCallback callback) throws Exception;
+}

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/Initializer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsConsumer.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsConsumer.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/definition/connectors/UimaAsConsumer.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsConsumer.java Thu Nov 29 17:23:00 2018
@@ -2,16 +2,21 @@ package org.apache.uima.aae.definition.c
 
 import org.apache.uima.aae.Lifecycle;
 import org.apache.uima.aae.controller.AnalysisEngineController;
+import org.apache.uima.aae.message.Target;
 import org.apache.uima.as.client.DirectMessage;
 
 public interface UimaAsConsumer extends Lifecycle {
-	public enum ConsumerType {GetMeta,ProcessCAS,Cpc,FreeCAS,Reply,Info};
+	public enum ConsumerType {GetMetaRequest,GetMetaResponse,ProcessCASRequest,ProcessCASResponse, CpcRequest, CpcResponse, FreeCASRequest, Reply, Info};
 	
 	public void initialize() throws Exception;
 	public void initialize(AnalysisEngineController controller) throws Exception;
-	
+	public void setInitializer(Initializer initializer);
+	public int getConsumerCount();
 	public void consume(DirectMessage message) throws Exception;
 	
 	public ConsumerType getType();
 	
+	public void delegateTo(UimaAsConsumer delegate);
+	public Target getTarget();
+	
 }

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsEndpoint.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsEndpoint.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/definition/connectors/UimaAsEndpoint.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsEndpoint.java Thu Nov 29 17:23:00 2018
@@ -1,15 +1,41 @@
 package org.apache.uima.aae.definition.connectors;
 
+import java.util.Map;
+
 import org.apache.uima.aae.Lifecycle;
 import org.apache.uima.aae.controller.Endpoint;
 import org.apache.uima.aae.definition.connectors.UimaAsConsumer.ConsumerType;
+import org.apache.uima.aae.message.MessageBuilder;
 import org.apache.uima.aae.message.MessageContext;
+import org.apache.uima.aae.message.Origin;
+import org.apache.uima.aae.message.Target;
 
 public interface UimaAsEndpoint extends Lifecycle {
-	public UimaAsProducer createProducer(String targetUri) throws Exception;
-	public UimaAsProducer createProducer(UimaAsConsumer consumer, String delegateKey)  throws Exception;
-	public UimaAsConsumer createConsumer(String targetUri, ConsumerType type, int consumerThreadCount) throws Exception;
-	public void dispatch(MessageContext messageContext) throws Exception;
+	public enum EndpointType {
+	  Direct("direct:"),
+      JMS("jms:"), 
+      NA("na:");
+		
+		private String name;
+		
+		private EndpointType(String aName) {
+			name = aName;
+		}
+		
+		public String getName() {
+			return name;
+		}
+	};
+	public MessageBuilder newMessageBuilder();
+	public UimaAsProducer createProducer(Origin origin) throws Exception;
+	//public UimaAsProducer createProducer(UimaAsConsumer consumer, Origin origin)  throws Exception;
+	public UimaAsProducer createProducer(UimaAsConsumer consumer, String serviceUri) throws Exception; 
+//	public UimaAsConsumer createConsumer(String targetUri, ConsumerType type, int consumerThreadCount) throws Exception;
+	public UimaAsConsumer createConsumer(ConsumerType type, int consumerThreadCount) throws Exception;
+	//public void dispatch(MessageContext messageContext) throws Exception;
+	public void dispatch(MessageContext messageContext, String serviceUri) throws Exception;
 	public UimaAsConsumer getConsumer(String targetUri, ConsumerType type);
-	public MessageContext createMessage(int command, int messageType, Endpoint endpoint);
+	public EndpointType getType();
+	public Origin getOrigin();
+	public Map<Target,UimaAsConsumer> getConsumers();
 }

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsProducer.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsProducer.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/definition/connectors/UimaAsProducer.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsProducer.java Thu Nov 29 17:23:00 2018
@@ -1,8 +1,8 @@
 package org.apache.uima.aae.definition.connectors;
 
 import org.apache.uima.aae.Lifecycle;
-import org.apache.uima.aae.message.MessageContext;
-import org.apache.uima.aae.message.UimaAsMessage;
+import org.apache.uima.aae.definition.connectors.UimaAsConsumer.ConsumerType;
+import org.apache.uima.aae.message.Target;
 import org.apache.uima.as.client.DirectMessage;
 
 public interface UimaAsProducer extends Lifecycle {
@@ -10,4 +10,9 @@ public interface UimaAsProducer extends
 	public void dispatch(DirectMessage message) throws Exception;
 	public void dispatch(DirectMessage message, UimaAsConsumer target) throws Exception;
 
+	public ConsumerType getType();
+	public boolean requestProducer();
+	public boolean responseProducer();
+	
+	public Target getTarget();
 }

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/AsynchAEMessage.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/AsynchAEMessage.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/message/AsynchAEMessage.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/AsynchAEMessage.java Thu Nov 29 17:23:00 2018
@@ -102,6 +102,24 @@ public interface AsynchAEMessage {
   // 5/2013 xcas not used as a serialization form
 //  public static final int XCASPayload = 1004;
 
+  
+	public enum Commands {
+		ProcessInputCASRequest(2000),
+		ProcessChildCASRequest(1002),
+		ProcessInputCASResponse(2001),
+		GetMetaRequest(2001),
+		GetMetaResponse(3001),
+		CollectionProcessCompleteRequest(2002),
+		CollectionProcessCompleteResponse(4001),
+		NoOp(10000);
+		
+		private int value;
+		private Commands(int ordinal) {
+			this.value = ordinal;
+		}
+	}
+  
+  
   public static final int None = 1005;
 
   public static final int BinaryPayload = 1006;

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/MessageBuilder.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/MessageBuilder.java?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/MessageBuilder.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/MessageBuilder.java Thu Nov 29 17:23:00 2018
@@ -0,0 +1,24 @@
+package org.apache.uima.aae.message;
+
+import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData;
+
+public interface MessageBuilder {
+	public MessageBuilder newGetMetaReplyMessage(Origin origin);
+	public MessageBuilder newGetMetaRequestMessage(Origin origin);
+	public MessageBuilder newProcessCASReplyMessage(Origin origin);
+	public MessageBuilder newProcessCASRequestMessage(Origin origin);
+	public MessageBuilder newCpCReplyMessage(Origin origin);
+	public MessageBuilder newCpCRequestMessage(Origin origin);
+	public MessageBuilder newReleaseCASRequestMessage(Origin origin);
+
+	public MessageContext build() throws Exception;
+	public MessageBuilder withSenderKey(String senderKey);
+	public MessageBuilder withReplyDestination(Object replyToDestination);
+	public MessageBuilder withPayload(int payload);
+	public MessageBuilder withId(String id);
+	public MessageBuilder withCasReferenceId(String id);
+	public MessageBuilder withSequenceNo(long sequence);
+	public MessageBuilder withParentCasReferenceId(String id);
+	public MessageBuilder withMetadata(AnalysisEngineMetaData meta);
+	
+}

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

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/MessageProcessor.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/MessageProcessor.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/message/MessageProcessor.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/MessageProcessor.java Thu Nov 29 17:23:00 2018
@@ -1,9 +1,6 @@
 package org.apache.uima.aae.message;
 
-import org.apache.uima.aae.controller.AnalysisEngineController;
-
 public interface MessageProcessor {
 
 	public void process(MessageContext message) throws Exception;
-	public AnalysisEngineController getController();
 }

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/Origin.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/Origin.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/message/Origin.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/Origin.java Thu Nov 29 17:23:00 2018
@@ -1,6 +1,9 @@
 package org.apache.uima.aae.message;
 
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
+
 public interface Origin {
 	public String getUniqueId();
 	public String getName();
+	public EndpointType getType();
 }

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/ServiceMessageProcessor.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/ServiceMessageProcessor.java?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/ServiceMessageProcessor.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/ServiceMessageProcessor.java Thu Nov 29 17:23:00 2018
@@ -0,0 +1,8 @@
+package org.apache.uima.aae.message;
+
+import org.apache.uima.aae.controller.AnalysisEngineController;
+
+public interface ServiceMessageProcessor extends MessageProcessor {
+	public AnalysisEngineController getController();
+
+}

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

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/Target.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/Target.java?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/Target.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/Target.java Thu Nov 29 17:23:00 2018
@@ -0,0 +1,9 @@
+package org.apache.uima.aae.message;
+
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
+
+public interface Target {
+	public String getUniqueId();
+	public String getName();
+	public EndpointType getType();
+}

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

Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/UimaAsOrigin.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/UimaAsOrigin.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/message/UimaAsOrigin.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/UimaAsOrigin.java Thu Nov 29 17:23:00 2018
@@ -2,14 +2,22 @@ package org.apache.uima.aae.message;
 
 import java.util.UUID;
 
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
+
 public class UimaAsOrigin implements Origin {
 
 	private final String uniqueId = UUID.randomUUID().toString();
 	private final String name;
+	private final EndpointType type;
 	
-	public UimaAsOrigin(String name) {
+	public UimaAsOrigin(String name, EndpointType type) {
 		this.name = name;
+		this.type = type;
+	}
+	public UimaAsOrigin(String name) {
+		this(name,EndpointType.NA);
 	}
+
 	@Override
 	public String getUniqueId() {
 		return uniqueId;
@@ -52,4 +60,9 @@ public class UimaAsOrigin implements Ori
     public String toString() {
         return "Origin[name: " + name + "] [id:"+uniqueId+"]";
     }
+
+	@Override
+	public EndpointType getType() {
+		return type;
+	}
 }

Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/UimaAsTarget.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/UimaAsTarget.java?rev=1847732&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/UimaAsTarget.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/UimaAsTarget.java Thu Nov 29 17:23:00 2018
@@ -0,0 +1,65 @@
+package org.apache.uima.aae.message;
+
+import java.util.UUID;
+
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
+
+public class UimaAsTarget implements Target {
+	private final String uniqueId = UUID.randomUUID().toString();
+	private final String name;
+	private final EndpointType type;
+
+
+
+	public UimaAsTarget(String name, EndpointType type) {
+		this.name = name;
+		this.type = type;
+	}
+	@Override
+	public String getUniqueId() {
+		return uniqueId;
+	}
+
+	@Override
+	public String getName() {
+		return name;
+	}
+
+	@Override
+	public EndpointType getType() {
+		return type;
+	}
+	
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((name == null) ? 0 : name.hashCode());
+		result = prime * result + ((type == null) ? 0 : type.hashCode());
+		result = prime * result + ((uniqueId == null) ? 0 : uniqueId.hashCode());
+		return result;
+	}
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		UimaAsTarget other = (UimaAsTarget) obj;
+		if (name == null) {
+			if (other.name != null)
+				return false;
+		} else if (!name.equals(other.name))
+			return false;
+		if (type != other.type)
+			return false;
+		if (uniqueId == null) {
+			if (other.uniqueId != null)
+				return false;
+		} else if (!uniqueId.equals(other.uniqueId))
+			return false;
+		return true;
+	}
+}

Propchange: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/UimaAsTarget.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/AbstractUimaASService.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/AbstractUimaASService.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/AbstractUimaASService.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/AbstractUimaASService.java Thu Nov 29 17:23:00 2018
@@ -27,6 +27,8 @@ import org.apache.uima.aae.InProcessCach
 import org.apache.uima.aae.controller.AggregateAnalysisEngineController;
 import org.apache.uima.aae.controller.AnalysisEngineController;
 import org.apache.uima.aae.controller.ControllerStatusListener;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint;
+import org.apache.uima.aae.definition.connectors.UimaAsEndpoint.EndpointType;
 import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData;
 import org.apache.uima.as.client.DirectMessage;
 import org.apache.uima.as.client.Listener;
@@ -36,12 +38,18 @@ import org.apache.uima.resource.Resource
 
 public abstract class AbstractUimaASService {
 	public final String id = UUID.randomUUID().toString();
-
+	protected UimaAsEndpoint endpoint;
 	protected AnalysisEngineController controller;
 	protected ResourceSpecifier resourceSpecifier = null;
 	protected InProcessCache inProcessCache;
 	protected String name;
 
+	public AbstractUimaASService() {
+		
+	}
+	public AbstractUimaASService(UimaAsEndpoint endpoint) {
+	this.endpoint = endpoint;	
+	}
 	private void startListener(Listener listener, AnalysisEngineController ctrl) {
 		listener.start();
 		if (!ctrl.isPrimitive()) {
@@ -67,7 +75,8 @@ public abstract class AbstractUimaASServ
 
 	}
 
-	protected void startListeners(AnalysisEngineController ctrl) {
+	protected void startListeners(AnalysisEngineController ctrl) throws Exception {
+		/*
 		if (ctrl instanceof AggregateAnalysisEngineController) {
 			for (AnalysisEngineController c : ((AggregateAnalysisEngineController) ctrl).getChildControllerList()) {
 				if (c instanceof AggregateAnalysisEngineController) {
@@ -80,11 +89,21 @@ public abstract class AbstractUimaASServ
 			}
 		}
 		startListenersFromList(ctrl.getAllListeners(), ctrl);
+		*/
+		ctrl.start();
 	}
-
+    protected UimaAsEndpoint getDirectEndpoint() {
+    	return controller.getEndpoint(EndpointType.Direct);
+    }
 	public void start() throws Exception {
 
-		startListeners(controller);
+		//startListeners(controller);
+		endpoint = controller.getEndpoint(EndpointType.Direct);
+		
+		if ( endpoint != null ) {
+			// start consumers
+			endpoint.start();
+		}
 
 //		controller.getControllerLatch().release();
 //		controller.initializeVMTransport(1);
@@ -95,7 +114,6 @@ public abstract class AbstractUimaASServ
 		controller.addControllerCallbackListener(l);
 		System.out.println(
 				".........." + controller.getName() + " AbstractUimaASService.start() ............ 2");
-
 		if (controller instanceof AggregateAnalysisEngineController) {
 			System.out
 					.println("..........." + controller.getName() + " Aggregate sending GetMeta to delegates");