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

svn commit: r1836115 [2/4] - in /uima/uima-ducc/trunk: src/main/assembly/ uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/ uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/ uima-ducc-container/src/main/java/org/...

Modified: uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler.java Tue Jul 17 13:49:47 2018
@@ -22,18 +22,19 @@ import static org.junit.Assert.assertTru
 
 import org.apache.uima.ducc.container.jd.mh.MessageHandler;
 import org.apache.uima.ducc.container.jd.test.TestBase;
-import org.apache.uima.ducc.container.net.iface.IMetaCas;
-import org.apache.uima.ducc.container.net.iface.IMetaCasTransaction.Type;
-import org.apache.uima.ducc.container.net.impl.MetaCasTransaction;
-import org.apache.uima.ducc.container.net.impl.TransactionId;
+import org.apache.uima.ducc.ps.net.iface.IMetaTask;
+import org.apache.uima.ducc.ps.net.iface.IMetaTaskTransaction.Type;
+import org.apache.uima.ducc.ps.net.impl.MetaTaskTransaction;
+import org.apache.uima.ducc.ps.net.impl.TransactionId;
+
 
 public class TestMessageHandler extends TestBase {
 	
 	protected boolean enforce = true;
 	protected boolean skipAll = true;
 	
-	private MetaCasTransaction create(String node, int pid, int tid, Type type) {
-		MetaCasTransaction mct = new MetaCasTransaction();
+	private MetaTaskTransaction create(String node, int pid, int tid, Type type) {
+		MetaTaskTransaction mct = new MetaTaskTransaction();
 		mct.setRequesterNodeName(node);
 		mct.setRequesterProcessName(pid+"");
 		mct.setRequesterProcessId(pid);
@@ -42,9 +43,9 @@ public class TestMessageHandler extends
 		return mct;
 	}
 	
-	private IMetaCas transCommon(MessageHandler messageHandler, MetaCasTransaction trans, int reqNo) {
+	private IMetaTask transCommon(MessageHandler messageHandler, MetaTaskTransaction trans, int reqNo) {
 		messageHandler.handleMetaCasTransation(trans);
-		IMetaCas metaCas = trans.getMetaCas();
+		IMetaTask metaCas = trans.getMetaTask();
 		if(metaCas != null) {
 			if(reqNo > 0) {
 				String seqNo = ""+reqNo;
@@ -66,22 +67,22 @@ public class TestMessageHandler extends
 		return metaCas;
 	}
 	
-	protected MetaCasTransaction transGet(MessageHandler messageHandler, String node, int pid, int tid, int reqNo) {
+	protected MetaTaskTransaction transGet(MessageHandler messageHandler, String node, int pid, int tid, int reqNo) {
 		debug("Get");
-		MetaCasTransaction trans = create(node, pid, tid, Type.Get);
+		MetaTaskTransaction trans = create(node, pid, tid, Type.Get);
 		trans.setTransactionId(new TransactionId(reqNo,0));
 		transCommon(messageHandler, trans, reqNo);
 		return trans;
 	}
 	
-	protected void transAck(MessageHandler messageHandler, MetaCasTransaction trans, int reqNo) {
+	protected void transAck(MessageHandler messageHandler, MetaTaskTransaction trans, int reqNo) {
 		debug("Ack");
 		trans.setType(Type.Ack);
 		trans.setTransactionId(new TransactionId(reqNo,1));
 		transCommon(messageHandler, trans, reqNo);
 	}
 	
-	protected void transEnd(MessageHandler messageHandler, MetaCasTransaction trans, int reqNo) {
+	protected void transEnd(MessageHandler messageHandler, MetaTaskTransaction trans, int reqNo) {
 		debug("End");
 		trans.setType(Type.End);
 		trans.setTransactionId(new TransactionId(reqNo,2));

Modified: uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler01.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler01.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler01.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler01.java Tue Jul 17 13:49:47 2018
@@ -33,8 +33,8 @@ import org.apache.uima.ducc.container.jd
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfo;
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfoFactory;
 import org.apache.uima.ducc.container.jd.test.helper.Utilities;
-import org.apache.uima.ducc.container.net.iface.IMetaCas;
-import org.apache.uima.ducc.container.net.impl.MetaCasTransaction;
+import org.apache.uima.ducc.ps.net.iface.IMetaTask;
+import org.apache.uima.ducc.ps.net.impl.MetaTaskTransaction;
 import org.junit.Test;
 
 public class TestMessageHandler01 extends TestMessageHandler {
@@ -83,16 +83,16 @@ public class TestMessageHandler01 extend
 			int pid = ti.getPid();
 			int tid = ti.getTid();
 			int casNo = 1;
-			IMetaCas metaCasPrevious = null;
-			MetaCasTransaction trans = transGet(messageHandler,node,pid,tid,casNo);
-			IMetaCas metaCas = trans.getMetaCas();
+			IMetaTask metaCasPrevious = null;
+			MetaTaskTransaction trans = transGet(messageHandler,node,pid,tid,casNo);
+			IMetaTask metaCas = trans.getMetaTask();
 			while(metaCas != null) {
 				transAck(messageHandler,trans,casNo);
 				transEnd(messageHandler,trans,casNo);
 				casNo++;
 				metaCasPrevious = metaCas;
 				trans = transGet(messageHandler,node,pid,tid,casNo);
-				metaCas = trans.getMetaCas();
+				metaCas = trans.getMetaTask();
 			}
 			assertTrue(metaCasPrevious.getSystemKey().equals("100"));
 			asExpected("CASes processed count == 100");

Modified: uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler02a.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler02a.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler02a.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler02a.java Tue Jul 17 13:49:47 2018
@@ -33,8 +33,8 @@ import org.apache.uima.ducc.container.jd
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfo;
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfoFactory;
 import org.apache.uima.ducc.container.jd.test.helper.Utilities;
-import org.apache.uima.ducc.container.net.iface.IMetaCas;
-import org.apache.uima.ducc.container.net.impl.MetaCasTransaction;
+import org.apache.uima.ducc.ps.net.iface.IMetaTask;
+import org.apache.uima.ducc.ps.net.impl.MetaTaskTransaction;
 import org.junit.Test;
 
 public class TestMessageHandler02a extends TestMessageHandler {
@@ -85,9 +85,9 @@ public class TestMessageHandler02a exten
 			ThreadInfo ti = tif.getRandom();
 			debug("random:"+ti.toKey());
 			int casNo = 1;
-			IMetaCas metaCasPrevious = null;
-			MetaCasTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-			IMetaCas metaCas = trans.getMetaCas();
+			IMetaTask metaCasPrevious = null;
+			MetaTaskTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
+			IMetaTask metaCas = trans.getMetaTask();
 			assertTrue(metaCas != null);
 			while(metaCas != null) {
 				IOperatingInfo oi = messageHandler.handleGetOperatingInfo();
@@ -105,7 +105,7 @@ public class TestMessageHandler02a exten
 				ti = tif.getRandom();
 				debug("random:"+ti.toKey());
 				trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-				metaCas = trans.getMetaCas();
+				metaCas = trans.getMetaTask();
 			}
 			assertTrue(metaCasPrevious.getSystemKey().equals("100"));
 			asExpected("CASes processed count == 100");

Modified: uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler02b.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler02b.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler02b.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler02b.java Tue Jul 17 13:49:47 2018
@@ -35,8 +35,8 @@ import org.apache.uima.ducc.container.jd
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfo;
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfoFactory;
 import org.apache.uima.ducc.container.jd.test.helper.Utilities;
-import org.apache.uima.ducc.container.net.iface.IMetaCas;
-import org.apache.uima.ducc.container.net.impl.MetaCasTransaction;
+import org.apache.uima.ducc.ps.net.iface.IMetaTask;
+import org.apache.uima.ducc.ps.net.impl.MetaTaskTransaction;
 import org.junit.Test;
 
 public class TestMessageHandler02b extends TestMessageHandler {
@@ -88,9 +88,9 @@ public class TestMessageHandler02b exten
 			ThreadInfo ti = tif.getUnique();
 			debug("random:"+ti.toKey());
 			int casNo = 1;
-			IMetaCas metaCasPrevious = null;
-			MetaCasTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-			IMetaCas metaCas = trans.getMetaCas();
+			IMetaTask metaCasPrevious = null;
+			MetaTaskTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
+			IMetaTask metaCas = trans.getMetaTask();
 			assertTrue(metaCas != null);
 			IOperatingInfo oi = messageHandler.handleGetOperatingInfo();
 			while(oi.getWorkItemCrFetches() < 100) {
@@ -104,7 +104,7 @@ public class TestMessageHandler02b exten
 				ti = tif.getUnique();
 				debug("random:"+ti.toKey());
 				trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-				metaCas = trans.getMetaCas();
+				metaCas = trans.getMetaTask();
 				oi = messageHandler.handleGetOperatingInfo();
 				ArrayList<IWorkItemInfo> list = oi.getActiveWorkItemInfo();
 				debug("list:"+list.size());

Modified: uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler03.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler03.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler03.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler03.java Tue Jul 17 13:49:47 2018
@@ -36,8 +36,8 @@ import org.apache.uima.ducc.container.jd
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfo;
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfoFactory;
 import org.apache.uima.ducc.container.jd.test.helper.Utilities;
-import org.apache.uima.ducc.container.net.iface.IMetaCas;
-import org.apache.uima.ducc.container.net.impl.MetaCasTransaction;
+import org.apache.uima.ducc.ps.net.iface.IMetaTask;
+import org.apache.uima.ducc.ps.net.impl.MetaTaskTransaction;
 import org.junit.Test;
 
 public class TestMessageHandler03 extends TestMessageHandler {
@@ -88,9 +88,9 @@ public class TestMessageHandler03 extend
 			ThreadInfo ti = tif.getRandom();
 			debug("random:"+ti.toKey());
 			int casNo = -1;
-			IMetaCas metaCasPrevious = null;
-			MetaCasTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-			IMetaCas metaCas = trans.getMetaCas();
+			IMetaTask metaCasPrevious = null;
+			MetaTaskTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
+			IMetaTask metaCas = trans.getMetaTask();
 			assertTrue(metaCas != null);
 			while(metaCas != null) {
 				randomPreemptTest03(messageHandler,ti);
@@ -110,7 +110,7 @@ public class TestMessageHandler03 extend
 				ti = tif.getRandom();
 				debug("random:"+ti.toKey());
 				trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-				metaCas = trans.getMetaCas();
+				metaCas = trans.getMetaTask();
 			}
 			assertTrue(metaCasPrevious.getSystemKey().equals("100"));
 			asExpected("CASes processed count == 100");

Modified: uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler04.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler04.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler04.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler04.java Tue Jul 17 13:49:47 2018
@@ -34,8 +34,8 @@ import org.apache.uima.ducc.container.jd
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfo;
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfoFactory;
 import org.apache.uima.ducc.container.jd.test.helper.Utilities;
-import org.apache.uima.ducc.container.net.iface.IMetaCas;
-import org.apache.uima.ducc.container.net.impl.MetaCasTransaction;
+import org.apache.uima.ducc.ps.net.iface.IMetaTask;
+import org.apache.uima.ducc.ps.net.impl.MetaTaskTransaction;
 import org.apache.uima.ducc.user.error.iface.Transformer;
 import org.junit.Test;
 
@@ -93,9 +93,9 @@ public class TestMessageHandler04 extend
 			ThreadInfo ti = tif.getRandom();
 			debug("random:"+ti.toKey());
 			int casNo = -1;
-			IMetaCas metaCasPrevious = null;
-			MetaCasTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-			IMetaCas metaCas = trans.getMetaCas();
+			IMetaTask metaCasPrevious = null;
+			MetaTaskTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
+			IMetaTask metaCas = trans.getMetaTask();
 			assertTrue(metaCas != null);
 			int inject = 0;
 			int index = 0;
@@ -121,7 +121,7 @@ public class TestMessageHandler04 extend
 				ti = tif.getRandom();
 				debug("random:"+ti.toKey());
 				trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-				metaCas = trans.getMetaCas();
+				metaCas = trans.getMetaTask();
 			}
 			//assertTrue(metaCasPrevious.getSystemKey().equals("100"));
 			//asExpected("CASes processed count == 100");

Modified: uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler05a.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler05a.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler05a.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler05a.java Tue Jul 17 13:49:47 2018
@@ -34,8 +34,8 @@ import org.apache.uima.ducc.container.jd
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfo;
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfoFactory;
 import org.apache.uima.ducc.container.jd.test.helper.Utilities;
-import org.apache.uima.ducc.container.net.iface.IMetaCas;
-import org.apache.uima.ducc.container.net.impl.MetaCasTransaction;
+import org.apache.uima.ducc.ps.net.iface.IMetaTask;
+import org.apache.uima.ducc.ps.net.impl.MetaTaskTransaction;
 import org.apache.uima.ducc.user.error.iface.Transformer;
 import org.junit.Test;
 
@@ -91,9 +91,9 @@ public class TestMessageHandler05a exten
 			ThreadInfo ti = tif.getRandom();
 			debug("random:"+ti.toKey());
 			int casNo = -1;
-			IMetaCas metaCasPrevious = null;
-			MetaCasTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-			IMetaCas metaCas = trans.getMetaCas();
+			IMetaTask metaCasPrevious = null;
+			MetaTaskTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
+			IMetaTask metaCas = trans.getMetaTask();
 			assertTrue(metaCas != null);
 			int inject = 0;
 			while(metaCas != null) {
@@ -111,7 +111,7 @@ public class TestMessageHandler05a exten
 				ti = tif.getRandom();
 				debug("random:"+ti.toKey());
 				trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-				metaCas = trans.getMetaCas();
+				metaCas = trans.getMetaTask();
 			}
 			assertTrue(metaCasPrevious.getSystemKey().equals("100"));
 			asExpected("CASes processed count == 100");

Modified: uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler05b.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler05b.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler05b.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler05b.java Tue Jul 17 13:49:47 2018
@@ -34,8 +34,8 @@ import org.apache.uima.ducc.container.jd
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfo;
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfoFactory;
 import org.apache.uima.ducc.container.jd.test.helper.Utilities;
-import org.apache.uima.ducc.container.net.iface.IMetaCas;
-import org.apache.uima.ducc.container.net.impl.MetaCasTransaction;
+import org.apache.uima.ducc.ps.net.iface.IMetaTask;
+import org.apache.uima.ducc.ps.net.impl.MetaTaskTransaction;
 import org.apache.uima.ducc.user.error.iface.Transformer;
 import org.junit.Test;
 
@@ -93,9 +93,9 @@ public class TestMessageHandler05b exten
 			ThreadInfo ti = tif.getRandom();
 			debug("random:"+ti.toKey());
 			int casNo = -1;
-			IMetaCas metaCasPrevious = null;
-			MetaCasTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-			IMetaCas metaCas = trans.getMetaCas();
+			IMetaTask metaCasPrevious = null;
+			MetaTaskTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
+			IMetaTask metaCas = trans.getMetaTask();
 			assertTrue(metaCas != null);
 			int inject = 0;
 			while(metaCas != null) {
@@ -113,7 +113,7 @@ public class TestMessageHandler05b exten
 				ti = tif.getRandom();
 				debug("random:"+ti.toKey());
 				trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-				metaCas = trans.getMetaCas();
+				metaCas = trans.getMetaTask();
 			}
 			IOperatingInfo oi = messageHandler.handleGetOperatingInfo();
 			long endSuccess = oi.getWorkItemEndSuccesses();

Modified: uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler06.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler06.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler06.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/messagehandler/TestMessageHandler06.java Tue Jul 17 13:49:47 2018
@@ -34,8 +34,8 @@ import org.apache.uima.ducc.container.jd
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfo;
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfoFactory;
 import org.apache.uima.ducc.container.jd.test.helper.Utilities;
-import org.apache.uima.ducc.container.net.iface.IMetaCas;
-import org.apache.uima.ducc.container.net.impl.MetaCasTransaction;
+import org.apache.uima.ducc.ps.net.iface.IMetaTask;
+import org.apache.uima.ducc.ps.net.impl.MetaTaskTransaction;
 import org.apache.uima.ducc.user.error.iface.Transformer;
 import org.junit.Test;
 
@@ -95,9 +95,9 @@ public class TestMessageHandler06 extend
 			ThreadInfo ti = tif.getRandom();
 			debug("random:"+ti.toKey());
 			int casNo = -1;
-			IMetaCas metaCasPrevious = null;
-			MetaCasTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-			IMetaCas metaCas = trans.getMetaCas();
+			IMetaTask metaCasPrevious = null;
+			MetaTaskTransaction trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
+			IMetaTask metaCas = trans.getMetaTask();
 			assertTrue(metaCas != null);
 			int inject = 0;
 			int index = 0;
@@ -119,7 +119,7 @@ public class TestMessageHandler06 extend
 				ti = tif.getRandom();
 				debug("random:"+ti.toKey());
 				trans = transGet(messageHandler,ti.getNodeName(),ti.getPid(),ti.getTid(),casNo);
-				metaCas = trans.getMetaCas();
+				metaCas = trans.getMetaTask();
 			}
 			assertTrue(metaCasPrevious.getSystemKey().equals("100"));
 			asExpected("CASes processed count == 100");

Modified: uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/wi/tracker/TestWiTracker.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/wi/tracker/TestWiTracker.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/wi/tracker/TestWiTracker.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/wi/tracker/TestWiTracker.java Tue Jul 17 13:49:47 2018
@@ -31,8 +31,8 @@ import org.apache.uima.ducc.container.jd
 import org.apache.uima.ducc.container.jd.wi.IWorkItem;
 import org.apache.uima.ducc.container.jd.wi.WiTracker;
 import org.apache.uima.ducc.container.jd.wi.WorkItem;
-import org.apache.uima.ducc.container.net.iface.IMetaCas;
-import org.apache.uima.ducc.container.net.impl.MetaCas;
+import org.apache.uima.ducc.ps.net.iface.IMetaTask;
+import org.apache.uima.ducc.ps.net.impl.MetaTask;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -53,17 +53,17 @@ public class TestWiTracker extends TestB
 		return fsm;
 	}
 	
-	private IMetaCas getMetaCas(int seqNo) {
-		IMetaCas metaCas = null;
+	private IMetaTask getMetaCas(int seqNo) {
+		IMetaTask metaCas = null;
 		String text = ""+seqNo;
 		Object cas = null;
-		metaCas = new MetaCas(seqNo, text, cas);
+		metaCas = new MetaTask(seqNo, text, cas);
 		return metaCas;
 	}
 	
 	private IWorkItem getWi(int seqNo) {
 		IWorkItem wi = null;
-		IMetaCas metaCas = getMetaCas(seqNo);
+		IMetaTask metaCas = getMetaCas(seqNo);
 		IFsm fsm = getFsm();
 		wi = new WorkItem(metaCas, fsm);
 		return wi;
@@ -90,7 +90,7 @@ public class TestWiTracker extends TestB
 		IRemoteWorkerThread rwt01A = getRemoteWorkerThread();
 		IWorkItem wi01A = tracker.link(rwt01A);
 		tracker.assign(rwt01A);
-		IMetaCas metaCas = getMetaCas(1);
+		IMetaTask metaCas = getMetaCas(1);
 		wi01A.setMetaCas(metaCas);
 		//
 		assertTrue(tracker.getSize() == 1);

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/ServiceConfiguration.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/ServiceConfiguration.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/ServiceConfiguration.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/ServiceConfiguration.java Tue Jul 17 13:49:47 2018
@@ -36,7 +36,100 @@ public class ServiceConfiguration {
 	private String customRegistryClass;
 	private String customProcessorClass;
 	private String serviceJmxConnectURL;
-	
+	private String jobDirectory;
+	private String aeDescriptor;
+	private String ccDescriptor;
+	private String cmDescriptor;
+	private String jpFlowController;
+	private String ccOverrides;
+	private String cmOverrides;
+	private String aeOverrides;
+	private ClassLoader sysCL=null;
+
+	public ClassLoader getSysCL() {
+		return sysCL;
+	}
+	public void setSysCL(ClassLoader sysCL) {
+		this.sysCL = sysCL;
+	}
+	public String getJobDirectory() {
+		return jobDirectory;
+	}
+	public void setJobDirectory(String jobDirectory) {
+		this.jobDirectory = jobDirectory;
+	}
+	public String getAeDescriptor() {
+		return aeDescriptor;
+	}
+	public void setAeDescriptor(String aeDescriptor) {
+		this.aeDescriptor = aeDescriptor;
+	}
+	public String getCcDescriptor() {
+		return ccDescriptor;
+	}
+	public void setCcDescriptor(String ccDescriptor) {
+		this.ccDescriptor = ccDescriptor;
+	}
+	public String getCmDescriptor() {
+		return cmDescriptor;
+	}
+	public void setCmDescriptor(String cmDescriptor) {
+		this.cmDescriptor = cmDescriptor;
+	}
+	public String getJpFlowController() {
+		return jpFlowController;
+	}
+	public void setJpFlowController(String jpFlowController) {
+		this.jpFlowController = jpFlowController;
+	}
+	public String getCcOverrides() {
+		return ccOverrides;
+	}
+	public void setCcOverrides(String ccOverrides) {
+		this.ccOverrides = ccOverrides;
+	}
+	public String getCmOverrides() {
+		return cmOverrides;
+	}
+	public void setCmOverrides(String cmOverrides) {
+		this.cmOverrides = cmOverrides;
+	}
+	public String getAeOverrides() {
+		return aeOverrides;
+	}
+	public void setAeOverrides(String aeOverrides) {
+		this.aeOverrides = aeOverrides;
+	}
+	public void setClientURL(String clientURL) {
+		this.clientURL = clientURL;
+	}
+	public void setDuccHome(String duccHome) {
+		this.duccHome = duccHome;
+	}
+	public void setJobId(String jobId) {
+		this.jobId = jobId;
+	}
+	public void setDuccProcessId(String duccProcessId) {
+		this.duccProcessId = duccProcessId;
+	}
+	public void setDuccProcessUniqueId(String duccProcessUniqueId) {
+		this.duccProcessUniqueId = duccProcessUniqueId;
+	}
+	public void setMonitorPort(String monitorPort) {
+		this.monitorPort = monitorPort;
+	}
+	public void setAnalysisEngineDescriptorPath(String analysisEngineDescriptorPath) {
+		this.analysisEngineDescriptorPath = analysisEngineDescriptorPath;
+	}
+	public void setAssignedJmxPort(String assignedJmxPort) {
+		this.assignedJmxPort = assignedJmxPort;
+	}
+	public void setCustomRegistryClass(String customRegistryClass) {
+		this.customRegistryClass = customRegistryClass;
+	}
+	public void setCustomProcessorClass(String customProcessorClass) {
+		this.customProcessorClass = customProcessorClass;
+	}
 	public String getJpType() {
 		return jpType;
 	}
@@ -138,3 +231,4 @@ public class ServiceConfiguration {
 		analysisEngineDescriptorPath = args[0];
 	}
 }
+

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DeployableGeneration.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DeployableGeneration.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DeployableGeneration.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DeployableGeneration.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+package org.apache.uima.ducc.ps.service.dgen;
+
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.uima.ducc.ps.service.ServiceConfiguration;
+import org.apache.uima.ducc.ps.service.dgen.iface.IDeployableGeneration;
+import org.apache.uima.ducc.ps.service.dgen.iface.IDuccGeneratorUimaAggregateComponent;
+import org.apache.uima.ducc.ps.service.utils.Utils;
+
+public class DeployableGeneration implements IDeployableGeneration {
+
+	private ServiceConfiguration serviceConfiguration;
+	
+	public DeployableGeneration(ServiceConfiguration serviceConfiguration) {	
+		this.serviceConfiguration = serviceConfiguration;
+	}
+	
+	private void conditionalAddComponent(ArrayList<IDuccGeneratorUimaAggregateComponent> dgenComponents, String descriptor, List<String> overrides) {
+		if(descriptor != null) {
+			DuccUimaAggregateComponent dgenComponent = new DuccUimaAggregateComponent(descriptor, overrides);
+			dgenComponents.add(dgenComponent);
+		}
+	}
+	
+	private void show(String text) {
+		System.out.println(text);
+	}
+	
+	private void show(String name, String value) {
+		show(name+"="+value);
+	}
+	
+	private void show(String name, List<String> value) {
+		if(value == null) {
+			show(name+"="+value);
+		}
+		else {
+			show(name+"="+value.toString());
+		}
+	}
+	
+	private String fabricateTargetDirectoryName(String baseDir, String jobId) {
+		StringBuffer sb = new StringBuffer();
+		if(baseDir != null) {
+			sb.append(baseDir);
+			if(!baseDir.endsWith(File.separator)) {
+				sb.append(File.separator);
+			}
+			if(jobId != null) {
+				sb.append(jobId);
+			}
+		}
+		return sb.toString();
+	}
+	
+	@Override
+	public String generate(Boolean createUniqueFilename	) throws Exception
+//			String directory, 
+//			String id,
+//			Integer dgenThreadCount,
+//			String dgenFlowController,
+//			String cmDescriptor,
+//			List<String> cmOverrides, 
+//			String aeDescriptor, 
+//			List<String> aeOverrides, 
+//			String ccDescriptor,
+//			List<String> ccOverrides,
+			
+	{
+		String retVal = null;
+		try {
+			show("directory", serviceConfiguration.getJobDirectory());//directory);
+			show("id", serviceConfiguration.getJobId());//id);
+			show("dgenThreadCount", serviceConfiguration.getThreadCount());//dgenThreadCount.toString());
+			show("dgenFlowController", serviceConfiguration.getJpFlowController());//dgenFlowController);
+			show("cmDescriptor", serviceConfiguration.getCmDescriptor());//cmDescriptor);
+			show("cmOverrides", serviceConfiguration.getCmOverrides());//cmOverrides);
+			show("aeDescriptor", serviceConfiguration.getAeDescriptor()); //aeDescriptor);
+			show("aeOverrides", serviceConfiguration.getAeOverrides()); //aeOverrides);
+			show("ccDescriptor", serviceConfiguration.getCcDescriptor());//ccDescriptor);
+			show("ccOverrides", serviceConfiguration.getCcOverrides()); //ccOverrides);
+			show("createUniqueFilename", createUniqueFilename?"true":"false");
+			String targetDirectory = 
+					fabricateTargetDirectoryName(serviceConfiguration.getJobDirectory(), serviceConfiguration.getJobId());
+			DeployableGenerator deployableGenerator = 
+					new DeployableGenerator(targetDirectory);
+			ArrayList<IDuccGeneratorUimaAggregateComponent> dgenComponents = new ArrayList<IDuccGeneratorUimaAggregateComponent>();
+//			conditionalAddComponent(dgenComponents, cmDescriptor, cmOverrides);
+//			conditionalAddComponent(dgenComponents, aeDescriptor, aeOverrides);
+//			conditionalAddComponent(dgenComponents, ccDescriptor, ccOverrides);
+//			DuccUimaAggregate configuration = new DuccUimaAggregate(dgenThreadCount, dgenFlowController, dgenComponents);
+//			retVal = deployableGenerator.generateAe(configuration, id, createUniqueFilename);
+
+			List<String> cmOverrides = Utils.tokenizeList(serviceConfiguration.getCmOverrides(), true);
+			List<String> ccOverrides = Utils.tokenizeList(serviceConfiguration.getCcOverrides(), true);
+			List<String> aeOverrides = Utils.tokenizeList(serviceConfiguration.getAeOverrides(), true);
+			
+			conditionalAddComponent(dgenComponents, serviceConfiguration.getCmDescriptor(), cmOverrides);
+			conditionalAddComponent(dgenComponents, serviceConfiguration.getAeDescriptor(), aeOverrides);
+			conditionalAddComponent(dgenComponents, serviceConfiguration.getCcDescriptor(), ccOverrides);
+			DuccUimaAggregate configuration = 
+					new DuccUimaAggregate(serviceConfiguration, dgenComponents);
+			retVal = deployableGenerator.generateAe(configuration, serviceConfiguration.getJobId(), createUniqueFilename);
+
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+			throw new Exception(e.toString());
+		}
+		return retVal;
+	}
+	
+	@Override
+	public String generate(
+			String directory, 
+			String id,
+			Integer dgenThreadCount,
+			String ddName,
+			Boolean createUniqueFilename
+			) throws Exception
+	{
+		String retVal = null;
+		try {
+			show("directory", directory);
+			show("id", id);
+			show("dgenThreadCount", dgenThreadCount.toString());
+			show("ddName", ddName);
+			show("createUniqueFilename", createUniqueFilename?"true":"false");
+			String targetDirectory = fabricateTargetDirectoryName(directory, id);
+			DeployableGenerator deployableGenerator = new DeployableGenerator(targetDirectory);
+			DuccUimaReferenceByName configuration = new DuccUimaReferenceByName(dgenThreadCount, ddName);
+			retVal = deployableGenerator.generateDd(configuration, id, createUniqueFilename);
+		}
+		catch(Exception e) {
+			e.printStackTrace();
+			throw new Exception(e.toString());
+		}
+		return retVal;
+	}
+}
\ No newline at end of file

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DeployableGenerator.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DeployableGenerator.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DeployableGenerator.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DeployableGenerator.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,310 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.ps.service.dgen;
+
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.StringWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.uima.UIMAFramework;
+import org.apache.uima.analysis_engine.AnalysisEngineDescription;
+import org.apache.uima.ducc.ps.service.dgen.iface.IDuccGeneratorUimaAggregate;
+import org.apache.uima.ducc.ps.service.dgen.iface.IDuccGeneratorUimaAggregateComponent;
+import org.apache.uima.ducc.ps.service.dgen.iface.IDuccGeneratorUimaReferenceByName;
+import org.apache.uima.ducc.ps.service.processor.uima.UimaAsServiceProcessor;
+import org.apache.uima.ducc.ps.service.utils.UimaUtils;
+import org.apache.uima.util.Level;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+public class DeployableGenerator {
+	  private static final String ACCESS_EXTERNAL_STYLESHEET = "http://javax.xml.XMLConstants/property/accessExternalStylesheet";
+	  private static final String ACCESS_EXTERNAL_DTD = "http://javax.xml.XMLConstants/property/accessExternalDTD";
+	  private static final String DISALLOW_DOCTYPE_DECL = "http://apache.org/xml/features/disallow-doctype-decl";
+	  private static final String LOAD_EXTERNAL_DTD = "http://apache.org/xml/features/nonvalidating/load-external-dtd";
+	  private String userLogDir = null;
+	  private Document doc;
+	  private String registryURL;
+	  
+		public DeployableGenerator(String userLogDir) {
+			setUserLogDir(userLogDir);
+		}
+		
+		private void setUserLogDir(String value) {
+			userLogDir = value;
+		}
+		
+		public String generateAe(IDuccGeneratorUimaAggregate aggregateConfiguration, String jobId, boolean createUniqueFilename) throws Exception {
+			List<String> descriptorPaths = new ArrayList<String>();
+			List<List<String>> overrides = new ArrayList<List<String>>();
+			for( IDuccGeneratorUimaAggregateComponent component: aggregateConfiguration.getComponents()) {
+				descriptorPaths.add(component.getDescriptor());
+				overrides.add(component.getOverrides());
+			}
+			String aed = createAED(
+			    aggregateConfiguration.getFlowController(),
+			    aggregateConfiguration.getThreadCount(), 
+			    userLogDir,
+			    createUniqueFilename ? null : jobId+"-"+"uima-ae-descriptor"+".xml",
+			    overrides, 
+			    descriptorPaths.toArray(new String[descriptorPaths.size()])
+				);
+			return aed;
+		}
+
+		private static String createAED (
+				String flowController,
+				int scaleup, 
+				String directory, 
+				String fname, 
+				List<List<String>> overrides,
+				String... aeDescriptors) throws Exception {
+			
+			AnalysisEngineDescription aed = UimaUtils.createAggregateDescription(flowController, (scaleup > 1), overrides, aeDescriptors);
+			aed.getMetaData().setName("DUCC.job");
+			File dir = new File(directory);
+			if (!dir.exists()) {
+				dir.mkdir();
+			}
+			FileOutputStream fos = null;
+			try {
+			  File file = File.createTempFile("uima-ae-", ".xml", dir);
+				fos = new FileOutputStream(file);
+				aed.toXML(fos);
+				if (fname == null) {     // Use the unique name
+				  deleteOnExitCheck(file);
+				  return file.getAbsolutePath();
+				}
+				// Use the atomic Files.move method (reportedly better than File:renameTo)
+				Path source = file.toPath();
+				Path target = source.resolveSibling(fname);
+				Files.move(source,  target, StandardCopyOption.ATOMIC_MOVE);
+				return target.toString();
+			} 
+			catch(Exception e) {
+				throw e;
+			} 
+			finally {
+				if( fos != null ) {
+					fos.close();
+				}
+			}
+		}
+		private void secureDocumentBuilderFactory(DocumentBuilderFactory documentBuilderFactory) {
+			try {
+				documentBuilderFactory.setFeature(DISALLOW_DOCTYPE_DECL, true);
+			} catch (ParserConfigurationException e1) {
+				UIMAFramework.getLogger().log(Level.WARNING, 
+						"DocumentBuilderFactory didn't recognize setting feature " + DISALLOW_DOCTYPE_DECL);
+			}
+
+			try {
+				documentBuilderFactory.setFeature(LOAD_EXTERNAL_DTD, false);
+			} catch (ParserConfigurationException e) {
+				UIMAFramework.getLogger().log(Level.WARNING, 
+						"DocumentBuilderFactory doesn't support feature " + LOAD_EXTERNAL_DTD);
+			}
+
+			documentBuilderFactory.setXIncludeAware(false);
+			documentBuilderFactory.setExpandEntityReferences(false);
+		}
+		/*
+		 * This method is used by the JD to convert a deployment descriptor's inputQueue element
+		 * to make it suitable for the JP's internal broker.
+		 * It is also used by the JP code since when running as a "pull" service it will be given an unconverted DD 
+		 */
+		public String generateDd(IDuccGeneratorUimaReferenceByName configuration, String jobId, Boolean createUniqueFilename) throws Exception {
+			//  Create DOM from the DD ... file or class-like name
+			String location = configuration.getReferenceByName();
+	    org.apache.uima.util.XMLInputSource xmlin = UimaUtils.getXMLInputSource(location);  // Reads from FS or classpath
+	    
+	    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+	    secureDocumentBuilderFactory(dbFactory);
+	    DocumentBuilder db = dbFactory.newDocumentBuilder();
+	    
+	    doc = db.parse(xmlin.getInputStream());
+			
+	    // Create converted descriptor if input is not a file or if endpoint or broker wrong
+	    boolean createDescriptor = ! location.endsWith(".xml");
+	    
+			//  locate the <inputQueue node within the xml ... should be only one
+			NodeList nodes = doc.getElementsByTagName("inputQueue");
+			Element element;
+	    if (nodes.getLength() > 0) {
+	      element = (Element) nodes.item(0);
+	      // Check if the attributes are correct
+	      String expected = "${" + UimaAsServiceProcessor.queuePropertyName + "}";
+	      if ( ! element.getAttribute("endpoint").equals(expected)) {
+	        element.setAttribute("endpoint", expected);
+	        createDescriptor = true;
+	      }
+	      expected = "${" + UimaAsServiceProcessor.brokerPropertyName + "}";
+	      if ( ! element.getAttribute("brokerURL").equals(expected)) {
+	        element.setAttribute("brokerURL", expected);
+	        createDescriptor = true;
+	      }
+	      // May specify the registry via an unsupported attribute
+	      registryURL = element.getAttribute("registryURL");  // Defaults to an empty string
+	      element.removeAttribute("registryURL");
+	    } else {
+	      throw new Exception("Invalid DD-" + configuration.getReferenceByName()
+	              + ". Missing required element <inputQueue ...");
+	    }
+	    
+	    //	Return the original descriptor or the converted one if necessary
+			return createDescriptor ? writeDDFile(xml2String(doc), jobId, createUniqueFilename) : location;
+		}
+
+	  /* 
+	   *  Deduce the scaleout for a deployment descriptor.
+	   *  If a top-level non-AS deployment check for a scaleout setting.
+	   *  Otherwise use the caspool size, with a default of 1
+	   */
+		public int getScaleout() {
+		  if (doc == null) {  // Not a DD ?
+		    return 1;
+		  }
+
+	    String soValue = "";
+	    NodeList nodes = doc.getElementsByTagName("analysisEngine");
+	    if (nodes.getLength() > 0) {
+	      Element aeElement = (Element) nodes.item(0);
+	      String async = aeElement.getAttribute("async");
+	      // If async is omitted the default is false if there are no delegates
+	      if (async.isEmpty()) {
+	        if (aeElement.getElementsByTagName("delegates").getLength() == 0) {
+	          async = "false";
+	        } 
+	      }
+	      // If async is false a scaleout setting can override the caspool size
+	      if (async.equals("false")) {
+	        nodes = aeElement.getElementsByTagName("scaleout");
+	        if (nodes.getLength() > 0) {
+	          Element soElement = (Element) nodes.item(0);
+	          soValue = soElement.getAttribute("numberOfInstances");
+	        }
+	      }
+	    }
+	    
+	    if (soValue.isEmpty()) {
+	      nodes = doc.getElementsByTagName("casPool");
+	      if (nodes.getLength() > 0) {
+	        Element cpElement = (Element) nodes.item(0);
+	        soValue = cpElement.getAttribute("numberOfCASes");
+	      }
+	    }
+	    
+	    return soValue.isEmpty() ? 1 : Integer.parseInt(soValue);
+		}
+		
+		public String getRegistryUrl() {
+		  return registryURL;
+		}
+		private void secureTransformerFactory(TransformerFactory transformerFactory) {
+		    try {
+		        transformerFactory.setAttribute(ACCESS_EXTERNAL_DTD, "");
+		      } catch (IllegalArgumentException e) {
+		        UIMAFramework.getLogger().log(Level.WARNING, 
+		            "TransformerFactory didn't recognize setting attribute " + ACCESS_EXTERNAL_DTD);
+		      }
+		      
+		      try {
+		        transformerFactory.setAttribute(ACCESS_EXTERNAL_STYLESHEET, "");
+		      } catch (IllegalArgumentException e) {
+		        UIMAFramework.getLogger().log(Level.WARNING, 
+		            "TransformerFactory didn't recognize setting attribute " + ACCESS_EXTERNAL_STYLESHEET);
+		      }
+
+		}
+		private String xml2String(Document xmlDoc) throws Exception {
+			StringWriter writer = null;
+			
+			DOMSource domSource = new DOMSource(xmlDoc.getDocumentElement());
+			
+			writer = new StringWriter();
+
+			StreamResult streamResult = new StreamResult(writer);
+			
+			TransformerFactory factory = TransformerFactory.newInstance();
+	    	secureTransformerFactory(factory);
+
+			Transformer transformer = factory.newTransformer();
+			transformer.transform(domSource, streamResult);
+
+			StringBuffer serializedDD = writer.getBuffer();
+			return serializedDD.toString();
+		}
+		
+		private String writeDDFile(String content, String jobId, boolean createUniqueFilename) throws Exception {
+			File dir = new File(userLogDir);
+			if ( !dir.exists()) {
+				dir.mkdir();
+			}
+			//	compose the file name from a basename (from ducc.properties), constant (-uima-as.dd-) and PID
+			// Create as a temp file then rename atomically (unless the JP wants a unique temporary file)
+			BufferedWriter out = null;
+			try {
+				File file = File.createTempFile("uima-as-dd-", ".xml", dir);
+				out = new BufferedWriter(new FileWriter(file));
+				out.write(content);
+				if (createUniqueFilename) {
+				  deleteOnExitCheck(file);
+				  return file.getAbsolutePath();
+				}
+				Path source = file.toPath();
+				Path target = source.resolveSibling(jobId+"-uima-as-dd.xml");
+				Files.move(source,  target, StandardCopyOption.ATOMIC_MOVE);
+				return target.toString();
+			} catch( Exception e) {
+				throw e;
+			} finally {
+				if ( out != null ) {
+					out.close();
+				}
+			}
+		}
+		
+		// Don't delete descriptors if this environment variable is set
+		// (Can't put the key in IDuccUser as that is in the common project)
+		private static void deleteOnExitCheck(File f) {
+	    if (System.getenv("DUCC_KEEP_TEMPORARY_DESCRIPTORS") == null) {
+	      f.deleteOnExit();
+	    }
+		}
+	}
\ No newline at end of file

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaAggregate.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaAggregate.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaAggregate.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaAggregate.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.ps.service.dgen;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.uima.ducc.ps.service.ServiceConfiguration;
+import org.apache.uima.ducc.ps.service.dgen.iface.IDuccGeneratorUimaAggregate;
+import org.apache.uima.ducc.ps.service.dgen.iface.IDuccGeneratorUimaAggregateComponent;
+
+public class DuccUimaAggregate implements IDuccGeneratorUimaAggregate {
+
+	/**
+	 * please increment this sUID when removing or modifying a field 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private List<IDuccGeneratorUimaAggregateComponent> components = new ArrayList<IDuccGeneratorUimaAggregateComponent>();
+	
+	private int threadCount = 1;
+	private String flowController;
+	
+	public DuccUimaAggregate(ServiceConfiguration serviceConfiguration, List<IDuccGeneratorUimaAggregateComponent> components) {
+		if ( serviceConfiguration.getThreadCount() == null || serviceConfiguration.getThreadCount().trim().isEmpty()) {
+			setThreadCount(1);
+		} else {
+			setThreadCount(Integer.valueOf(serviceConfiguration.getThreadCount()));
+		}
+		setFlowController(serviceConfiguration.getJpFlowController());
+		setComponents(components);
+	}
+	
+	
+	public List<IDuccGeneratorUimaAggregateComponent> getComponents() {
+		return components;
+	}
+	
+	
+	public void setComponents(List<IDuccGeneratorUimaAggregateComponent> components) {
+		this.components = components;
+	}
+	
+	public int getThreadCount() {
+		return threadCount;
+	}
+
+	
+	public void setThreadCount(int threadCount) {
+		this.threadCount = threadCount;
+	}
+
+	public String getFlowController() {
+		return flowController;
+	}
+
+	
+	public void setFlowController(String flowController) {
+		this.flowController = flowController;
+	}
+}
\ No newline at end of file

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaAggregateComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaAggregateComponent.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaAggregateComponent.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaAggregateComponent.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+package org.apache.uima.ducc.ps.service.dgen;
+
+
+import java.util.List;
+
+import org.apache.uima.ducc.ps.service.dgen.iface.IDuccGeneratorUimaAggregateComponent;
+
+public class DuccUimaAggregateComponent implements IDuccGeneratorUimaAggregateComponent {
+
+	/**
+	 * please increment this sUID when removing or modifying a field 
+	 */
+	private static final long serialVersionUID = 1L;
+	private String descriptor;
+	private List<String> overrides;
+	
+	public DuccUimaAggregateComponent(String descriptor, List<String> overrides) {
+		setDescriptor(descriptor);
+		setOverrides(overrides);
+	}
+	
+	
+	public String getDescriptor() {
+		return this.descriptor;
+	}
+
+	
+	public void setDescriptor(String descriptor) {
+		this.descriptor = descriptor;
+	}
+
+	
+	public List<String> getOverrides() {
+		return this.overrides;
+	}
+
+	
+	public void setOverrides(List<String> overrides) {
+		this.overrides = overrides;
+	}
+
+}
\ No newline at end of file

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaReferenceByName.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaReferenceByName.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaReferenceByName.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/DuccUimaReferenceByName.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.ps.service.dgen;
+
+
+import org.apache.uima.ducc.ps.service.dgen.iface.IDuccGeneratorUimaReferenceByName;
+
+public class DuccUimaReferenceByName implements IDuccGeneratorUimaReferenceByName {
+
+	/**
+	 * please increment this sUID when removing or modifying a field 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private String referenceByName;
+	
+	private int threadCount = 1;
+	
+	public DuccUimaReferenceByName(int threadCount,String ddName) {
+		setThreadCount(threadCount);
+		setReferenceByName(ddName);
+	}
+	
+	public String getReferenceByName() {
+		return referenceByName;
+	}
+	
+	public void setReferenceByName(String referenceByName) {
+		this.referenceByName = referenceByName;
+	}
+	
+	public int getThreadCount() {
+		return threadCount;
+	}
+
+	
+	public void setThreadCount(int threadCount) {
+		this.threadCount = threadCount;
+	}
+
+}
\ No newline at end of file

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/InvalidOverrideParameterException.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/InvalidOverrideParameterException.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/InvalidOverrideParameterException.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/InvalidOverrideParameterException.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.ps.service.dgen;
+
+public class InvalidOverrideParameterException extends Exception {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -4948849140814646049L;
+
+	public InvalidOverrideParameterException(String msg) {
+		super(msg);
+	}
+}
\ No newline at end of file

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDeployableGeneration.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDeployableGeneration.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDeployableGeneration.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDeployableGeneration.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.ps.service.dgen.iface;
+
+public interface IDeployableGeneration {
+
+	public String generate(Boolean createUniqueFilename	) throws Exception;
+	
+	public String generate(
+			String directory,
+			String id,
+			Integer dgenThreadCount,
+			String ddName,
+			Boolean createUniqueFilename
+			) throws Exception;
+}

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaAggregate.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaAggregate.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaAggregate.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaAggregate.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.ps.service.dgen.iface;
+
+
+import java.util.List;
+
+public interface IDuccGeneratorUimaAggregate extends IDuccGeneratorUimaDeployableConfiguration {
+
+	public List<IDuccGeneratorUimaAggregateComponent> getComponents();
+	public void setComponents(List<IDuccGeneratorUimaAggregateComponent> components);
+	
+	public int getThreadCount();
+	public void setThreadCount(int threadCount);
+	
+	public String getFlowController();
+	public void setFlowController(String flowController);
+}

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaAggregateComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaAggregateComponent.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaAggregateComponent.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaAggregateComponent.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.ps.service.dgen.iface;
+
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface IDuccGeneratorUimaAggregateComponent extends Serializable {
+
+	public String getDescriptor();
+	public void setDescriptor(String descriptor);
+	
+	public List<String> getOverrides();
+	public void setOverrides(List<String> overrides);
+}
\ No newline at end of file

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaDeployableConfiguration.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaDeployableConfiguration.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaDeployableConfiguration.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaDeployableConfiguration.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.ps.service.dgen.iface;
+
+import java.io.Serializable;
+
+public interface IDuccGeneratorUimaDeployableConfiguration extends Serializable {
+}

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaReferenceByName.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaReferenceByName.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaReferenceByName.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/dgen/iface/IDuccGeneratorUimaReferenceByName.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.ps.service.dgen.iface;
+
+public interface IDuccGeneratorUimaReferenceByName extends IDuccGeneratorUimaDeployableConfiguration {
+
+	public String getReferenceByName();
+	public void setReferenceByName(String referenceByName);
+	
+	public int getThreadCount();
+	public void setThreadCount(int threadCount);
+
+}

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/ServiceWrapper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/ServiceWrapper.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/ServiceWrapper.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/main/ServiceWrapper.java Tue Jul 17 13:49:47 2018
@@ -18,18 +18,22 @@
 */
 package org.apache.uima.ducc.ps.service.main;
 
+
 import java.io.IOException;
 import java.lang.reflect.Constructor;
+import java.util.Objects;
 import java.util.concurrent.ExecutionException;
 
 import org.apache.uima.UIMAFramework;
 import org.apache.uima.ducc.ps.service.IService;
 import org.apache.uima.ducc.ps.service.ServiceConfiguration;
 import org.apache.uima.ducc.ps.service.builders.PullServiceStepBuilder;
+import org.apache.uima.ducc.ps.service.dgen.DeployableGeneration;
 import org.apache.uima.ducc.ps.service.errors.ServiceException;
 import org.apache.uima.ducc.ps.service.errors.ServiceInitializationException;
 import org.apache.uima.ducc.ps.service.jmx.JMXAgent;
 import org.apache.uima.ducc.ps.service.processor.IServiceProcessor;
+import org.apache.uima.ducc.ps.service.processor.uima.UimaAsServiceProcessor;
 import org.apache.uima.ducc.ps.service.processor.uima.UimaServiceProcessor;
 import org.apache.uima.ducc.ps.service.registry.IRegistryClient;
 import org.apache.uima.util.Level;
@@ -43,7 +47,7 @@ public class ServiceWrapper {
 			new ServiceConfiguration();
 	// jmx agent to configure rmi registry so that jconsole clients can connect
 	private JMXAgent jmxAgent;
-	
+
 	private void addShutdownHook() {
 		ServiceShutdownHook shutdownHook = new ServiceShutdownHook(this, logger);
 	    Runtime.getRuntime().addShutdownHook(shutdownHook);
@@ -54,15 +58,19 @@ public class ServiceWrapper {
 		return jmxAgent.start(rmiRegistryPort);
 		
 	}
+
 	/**
-	 * Creates instance of IServiceProcessor. By default it creates built-in UimaServiceProcessor
-	 * but a custom processor is also supported via -Dducc.deploy.custom.processor.class=XX
+	 * Creates instance of IServiceProcessor. It checks -Dducc.deploy.JpType to determine which
+	 * service type is being deployed. For 'uima' type, the method instantiates and returns
+	 * UimaServiceProcessor and for 'uima-as' it returns UimaAsServiceProcessor. If none of
+	 * the above is specified and -Dducc.deploy.custom.processor.class=XX is defined, the code
+	 * instatiates user provided ServiceProcessor.
 	 * 
 	 * @param analysisEngineDescriptorPath path to the AE descriptor
 	 * @return IServiceProcessor instance
 	 * @throws ServiceInitializationException
 	 */
-	private IServiceProcessor createProcessor(String analysisEngineDescriptorPath) 
+	private IServiceProcessor createProcessor(String analysisEngineDescriptorPath, String[] args) 
 	throws ServiceInitializationException{
 		if ( serviceConfiguration.getCustomProcessorClass() != null ) {
 			try {
@@ -77,27 +85,79 @@ public class ServiceWrapper {
 				throw new ServiceInitializationException("Unable to instantiate Custom Processor from class:"+serviceConfiguration.getCustomProcessorClass());
 			}
 		} else {
-			return new UimaServiceProcessor(analysisEngineDescriptorPath, serviceConfiguration);
-		}
+			if  ( "uima".equals(serviceConfiguration.getJpType() ) ){
+				return new UimaServiceProcessor(analysisEngineDescriptorPath, serviceConfiguration);
+			} else if ( "uima-as".equals(serviceConfiguration.getJpType()) ) {
+				return new UimaAsServiceProcessor(args, serviceConfiguration);
+			} else {
+				throw new RuntimeException("Invalid deployment. Set either -Dducc.deploy.JpType=[uima,uima-as] or provide -Dducc.deploy.custom.processor.class=XX where XX implements IServiceProcessor ");
+			}
+		} 
+	}
+	/**
+	 * Check if AE descriptor is provided or we need to create it from parts
+	 * 
+	 * @param serviceConfiguration
+	 * @return
+	 */
+	private boolean isPiecesParts(ServiceConfiguration serviceConfiguration ) {
+		return ( "uima".equals(serviceConfiguration.getJpType()) && serviceConfiguration.getAnalysisEngineDescriptorPath() == null);
 	}
-	public void initialize(String[] args) throws ServiceInitializationException, ServiceException {
+	public void initialize(String[] args ) throws ServiceInitializationException, ServiceException {
 		// collect -Ds and env vars
 		serviceConfiguration.collectProperties(args);
 		serviceConfiguration.validateProperties();
 		addShutdownHook();
 		// validateProperties() call above checked if a user provided AE descriptor path
-		String analysisEngineDescriptorPath = 
-				serviceConfiguration.getAnalysisEngineDescriptorPath();
+		String analysisEngineDescriptorPath; 
 
 		// create JMX agent
 		String serviceJmxConnectString = startJmxAgent();
 		
 		serviceConfiguration.setServiceJmxConnectURL(serviceJmxConnectString);
+		IServiceProcessor processor;
+		if ( isPiecesParts(serviceConfiguration)) {
+			DeployableGeneration dg = new DeployableGeneration(serviceConfiguration);
+			try {
+				analysisEngineDescriptorPath = dg.generate(true);
+				logger.log(Level.INFO, "Deploying UIMA based service using generated (pieces-parts) AE descriptor "+analysisEngineDescriptorPath);
+			} catch( Exception e) {
+				throw new ServiceException("Unable to generate AE descriptor from parts");
+			}
+		} else {
+			analysisEngineDescriptorPath = serviceConfiguration.getAnalysisEngineDescriptorPath();
+			if ( analysisEngineDescriptorPath != null ) {
+				logger.log(Level.INFO, "Deploying UIMA based service using provided descriptor "+analysisEngineDescriptorPath);
+			}
+		}
+		processor = createProcessor(analysisEngineDescriptorPath, args);
+
+		Objects.requireNonNull(processor, "Unable to instantiate IServiceProcessor");
 		
-		IServiceProcessor processor = 
-				createProcessor(analysisEngineDescriptorPath);
-		IRegistryClient registryClient= null;
+		if ( serviceConfiguration.getCustomRegistryClass() != null ) {
+			service = PullServiceStepBuilder.newBuilder()
+					.withProcessor(processor)
+					.withRegistry(getRegistryClient())
+					.withType(serviceConfiguration.getServiceType())
+					.withScaleout(Integer.valueOf(serviceConfiguration.getThreadCount()))
+					.withOptionalsDone().build();
+
+		} else {
+			service = PullServiceStepBuilder.newBuilder()
+					.withProcessor(processor)
+					.withClientURL(serviceConfiguration.getClientURL())
+					.withType(serviceConfiguration.getServiceType())
+					.withScaleout(Integer.valueOf(serviceConfiguration.getThreadCount()))
+					.withOptionalsDone().build();
+
+		}
 		
+
+		service.initialize();
+
+	}
+	private IRegistryClient getRegistryClient() throws ServiceInitializationException {
+		IRegistryClient registryClient= null;
 		if ( serviceConfiguration.getCustomRegistryClass() != null ) {
 			try {
 				Class<?> clz = Class.forName(serviceConfiguration.getCustomRegistryClass()) ;
@@ -117,30 +177,10 @@ public class ServiceWrapper {
 			} catch( Exception e) {
 				logger.log(Level.WARNING,"",e);
 				throw new ServiceInitializationException("Unable to instantiate Custom Registry Client from class:"+serviceConfiguration.getCustomRegistryClass());
-				
 			}
-			service = PullServiceStepBuilder.newBuilder()
-					.withProcessor(processor)
-					.withRegistry(registryClient)
-					.withType(serviceConfiguration.getServiceType())
-					.withScaleout(Integer.valueOf(serviceConfiguration.getThreadCount()))
-					.withOptionalsDone().build();
-
-		} else {
-			service = PullServiceStepBuilder.newBuilder()
-					.withProcessor(processor)
-					.withClientURL(serviceConfiguration.getClientURL())
-					.withType(serviceConfiguration.getServiceType())
-					.withScaleout(Integer.valueOf(serviceConfiguration.getThreadCount()))
-					.withOptionalsDone().build();
-
 		}
-		
-
-		service.initialize();
-
+		return registryClient;
 	}
-
 	public void start() throws ServiceException, ExecutionException {
 		service.start();
 	}
@@ -156,14 +196,16 @@ public class ServiceWrapper {
 	}
 
 	public static void main(String[] args) {
-		ServiceWrapper wrapper = new ServiceWrapper();
+		ServiceWrapper wrapper = null;
 		try {
-			
+			wrapper = new ServiceWrapper();
 			wrapper.initialize(args);
 			wrapper.start();
 		} catch( Exception e) {
 			UIMAFramework.getLogger().log(Level.WARNING, "", e);
-			wrapper.stop();
+			if ( wrapper != null ) {
+				wrapper.stop();
+			}
 		}
 	}
 	 static class ServiceShutdownHook extends Thread {
@@ -174,7 +216,7 @@ public class ServiceWrapper {
 		      this.serviceWrapper = serviceWrapper;
 		      this.logger = logger;
 		    }
-
+		    @Override
 		    public void run() {
 		      try {
 		          logger.log(Level.INFO, "Pull Service Caught SIGTERM Signal - Stopping ...");
@@ -187,3 +229,4 @@ public class ServiceWrapper {
 		    }
 		  }
 }
+

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/monitor/builtin/RemoteStateObserver.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/monitor/builtin/RemoteStateObserver.java?rev=1836115&r1=1836114&r2=1836115&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/monitor/builtin/RemoteStateObserver.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/monitor/builtin/RemoteStateObserver.java Tue Jul 17 13:49:47 2018
@@ -76,7 +76,6 @@ public class RemoteStateObserver impleme
 			if ( socket == null ) {
 				return;
 			}
-			//String serviceData = "";
 			if ( additionalData == null ) {
 				additionalData = new Properties();
 			} 
@@ -84,7 +83,6 @@ public class RemoteStateObserver impleme
 					!serviceConfiguration.getAssignedJmxPort().trim().isEmpty()) {
 				additionalData.setProperty(SERVICE_JMS_PORT, serviceConfiguration.getAssignedJmxPort().trim());
 			}
-			//serviceData = XStreamUtils.marshall(additionalData);
 			// Agent needs process unique ID to identify it within inventory.
 			// The unique id was added as an env var by an agent before this
 			// process was launched.
@@ -94,15 +92,9 @@ public class RemoteStateObserver impleme
 			   .append(SEPARATOR)
 			   .append(SERVICE_STATE)
 			   .append(state);
-//			   .append(SEPARATOR)
-//			   .append(SERVICE_DATA)
-//			   .append(serviceData);
 			out = new DataOutputStream(socket.getOutputStream());
 			out.writeUTF(sb.toString());
 			out.flush();
-//			if (logger.isLoggable(Level.FINE)) {
-//				logger.log(Level.FINE, "Sent new State:" + state);
-//			}
 		} catch (Exception e) {
 			
 		} finally {

Added: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/processor/uima/AbstractServiceProcessor.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/processor/uima/AbstractServiceProcessor.java?rev=1836115&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/processor/uima/AbstractServiceProcessor.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/processor/uima/AbstractServiceProcessor.java Tue Jul 17 13:49:47 2018
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+package org.apache.uima.ducc.ps.service.processor.uima;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.uima.ducc.ps.service.utils.UimaSerializer;
+import org.apache.uima.util.Level;
+import org.apache.uima.util.Logger;
+
+public class AbstractServiceProcessor {
+	// Map to store DuccUimaSerializer instances. Each has affinity to a thread
+	protected Map<Long, UimaSerializer> serializerMap = new HashMap<>();
+
+	protected void delay(Logger logger, long howLong) {
+		logger.log(Level.INFO, "Wait for the initialized state to propagate to the SM " +
+		          "so any processing errors are not treates as initialization failures");
+		try {
+			Thread.sleep(30000);
+		} catch (InterruptedException e1) {
+		}
+
+	}
+	protected UimaSerializer getUimaSerializer() {
+		
+	   	return serializerMap.get(Thread.currentThread().getId());
+	}
+
+}