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