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());
+       }
+
+}


Reply via email to