You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2018/12/20 14:40:58 UTC
svn commit: r1849399 [2/2] - in
/uima/uv3/uima-as-v3/trunk/uimaj-as-activemq: ./
src/main/java/org/apache/uima/adapter/jms/activemq/
src/main/java/org/apache/uima/adapter/jms/client/
src/main/java/org/apache/uima/examples/as/ src/test/java/org/apache/u...
Modified: uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ae/noop/NoOpAnnotator.java
URL: http://svn.apache.org/viewvc/uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ae/noop/NoOpAnnotator.java?rev=1849399&r1=1849398&r2=1849399&view=diff
==============================================================================
--- uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ae/noop/NoOpAnnotator.java (original)
+++ uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ae/noop/NoOpAnnotator.java Thu Dec 20 14:40:58 2018
@@ -23,6 +23,7 @@ import java.io.FileNotFoundException;
import org.apache.uima.UIMAFramework;
import org.apache.uima.UimaContext;
+import org.apache.uima.aae.client.UimaAsynchronousEngine;
import org.apache.uima.analysis_component.CasAnnotator_ImplBase;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.cas.CAS;
@@ -44,9 +45,14 @@ public class NoOpAnnotator extends CasAn
int cpcDelay = 0;
+ boolean addServiceTargetId = false;
+
+ private String thisServiceTargetId = null;
public void initialize(UimaContext aContext) throws ResourceInitializationException {
super.initialize(aContext);
-
+ // this can be null. The TargetSelectorProperty is optional
+ thisServiceTargetId = System.getProperty(UimaAsynchronousEngine.TargetSelectorProperty);
+
if (getContext().getConfigParameterValue("FailDuringInitialization") != null) {
throw new ResourceInitializationException(new FileNotFoundException("Simulated Exception"));
}
@@ -71,6 +77,9 @@ public class NoOpAnnotator extends CasAn
if (getContext().getConfigParameterValue("FinalCount") != null) {
finalCount = ((Integer) getContext().getConfigParameterValue("FinalCount")).intValue();
}
+ if (getContext().getConfigParameterValue("addServiceTargetId") != null) {
+ addServiceTargetId = ((Boolean) getContext().getConfigParameterValue("addServiceTargetId")).booleanValue();
+ }
// write log messages
Logger logger = getContext().getLogger();
@@ -132,6 +141,10 @@ public class NoOpAnnotator extends CasAn
throw new IndexOutOfBoundsException();
}
}
+ if ( addServiceTargetId && thisServiceTargetId != null) {
+ aCAS.setDocumentText(thisServiceTargetId);
+ }
+
} catch (Exception e) {
throw new AnalysisEngineProcessException(e);
}
Modified: uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ae/noop/NoOpCC.java
URL: http://svn.apache.org/viewvc/uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ae/noop/NoOpCC.java?rev=1849399&r1=1849398&r2=1849399&view=diff
==============================================================================
--- uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ae/noop/NoOpCC.java (original)
+++ uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ae/noop/NoOpCC.java Thu Dec 20 14:40:58 2018
@@ -31,7 +31,7 @@ public class NoOpCC extends CasConsumer_
}
public void processCas(CAS aCAS) throws ResourceProcessException {
- System.out.println("NoOpCC process() called");
+ //System.out.println("NoOpCC process() called");
}
}
Modified: uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASExtended.java
URL: http://svn.apache.org/viewvc/uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASExtended.java?rev=1849399&r1=1849398&r2=1849399&view=diff
==============================================================================
--- uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASExtended.java (original)
+++ uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASExtended.java Thu Dec 20 14:40:58 2018
@@ -33,12 +33,16 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.jms.Connection;
import javax.jms.Message;
@@ -84,6 +88,7 @@ import org.apache.uima.resource.Resource
import org.apache.uima.resource.ResourceProcessException;
import org.apache.uima.resource.ResourceSpecifier;
import org.apache.uima.resource.metadata.ProcessingResourceMetaData;
+import org.apache.uima.resource.metadata.TypePriorityList;
import org.apache.uima.resourceSpecifier.factory.DeploymentDescriptorFactory;
import org.apache.uima.resourceSpecifier.factory.ServiceContext;
import org.apache.uima.resourceSpecifier.factory.UimaASPrimitiveDeploymentDescriptor;
@@ -92,6 +97,7 @@ import org.apache.uima.util.XMLInputSour
import org.junit.Test;
import org.junit.runner.RunWith;
import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
@RunWith(UimaASTestRunner.class)
public class TestUimaASExtended extends BaseTestSupport {
@@ -124,14 +130,219 @@ public class TestUimaASExtended extends
return b.getDefaultSocketURIString();
}
+ /*
+ @Test
+ public void testBrokerRestartWithPrimitiveMultiplier() throws Exception {
+ System.out.println("-------------- testBrokerRestartWithPrimitiveMultiplier -------------");
+ System.setProperty("BrokerURL", broker.getConnectorByName(DEFAULT_BROKER_URL_KEY).getUri().toString());
+
+ BaseUIMAAsynchronousEngine_impl eeUimaEngine = new BaseUIMAAsynchronousEngine_impl();
+
+ deployService(eeUimaEngine, relativePath + "/Deploy_RemoteCasMultiplier.xml");
+
+
+ broker.stop();
+ broker.waitUntilStopped();
+
+ broker = createBroker();
+ broker.start();
+ broker.waitUntilStarted();
+
+ String burl = broker.getConnectorByName(DEFAULT_BROKER_URL_KEY).getUri().toString();
+ Map<String, Object> appCtx =
+ buildContext(burl, "TestMultiplierQueue");
+
+ // reduce the cas pool size and reply window
+ appCtx.remove(UimaAsynchronousEngine.ShadowCasPoolSize);
+ appCtx.put(UimaAsynchronousEngine.ShadowCasPoolSize, Integer.valueOf(2));
+ runTest(appCtx, eeUimaEngine,burl,
+ "TestMultiplierQueue", 1, PROCESS_LATCH);
+
+ eeUimaEngine.stop();
+ }
+*/
+
+ /**
+ * This test starts a secondary broker, starts NoOp Annotator, and
+ * using synchronous sendAndReceive() sends 5 CASes for analysis. Before sending 6th, the test
+ * stops the secondary broker and sends 5 more CASes. All CASes sent after
+ * the broker shutdown result in GetMeta ping and a subsequent timeout. Before
+ * sending 11th CAS the test starts the broker again and sends 10 more CASes
+ * @throws Exception
+ */
+ @Test
+ public void testSyncClientRecoveryFromBrokerStopAndRestart() throws Exception {
+ System.out.println("-------------- testSyncClientRecoveryFromBrokerStopAndRestart -------------");
+ //System.setProperty("uima.as.enable.jmx","false");
+ // Instantiate Uima AS Client
+ BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
+ BrokerService broker2 = setupSecondaryBroker(true);
+ // Deploy Uima AS Primitive Service
+ deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
+
+ Map<String, Object> appCtx =
+ buildContext(broker2.getConnectorByName(DEFAULT_BROKER_URL_KEY_2).getUri().toString(), "NoOpAnnotatorQueue");
+ appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, 20000);
+ initialize(uimaAsEngine, appCtx);
+ waitUntilInitialized();
+ int errorCount=0;
+ int delay = 1;
+ for (int i = 0; i < 20; i++) {
+
+ if ( i == 5 ) {
+ broker2.stop();
+ broker2.waitUntilStopped();
+ System.out.println("..... Stopped broker ............................");
+ Timer timer = new Timer();
+ timer.schedule(new StartBrokerTask(broker2, this),500);
+ delay = 200;
+ }
+
+ synchronized(appCtx) {
+ try {
+ appCtx.wait(delay);
+ } catch( InterruptedException eee) {
+
+ }
+ }
+ /*
+ else if ( i == 10 ) {
+ // restart the broker
+ System.setProperty("activemq.broker.jmx.domain","org.apache.activemq.test");
+ broker2 = setupSecondaryBroker(true);
+
+ broker2.start();
+ broker2.waitUntilStarted();
+
+ }
+ */
+ CAS cas = uimaAsEngine.getCAS();
+ cas.setDocumentText("Some Text");
+ // System.out.println("UIMA AS Client Sending CAS#" + (i + 1) + " Request to a Service");
+ try {
+ uimaAsEngine.sendAndReceiveCAS(cas);
+ } catch( Exception e) {
+ errorCount++;
+ System.out.println("Client Received Expected Error on CAS:"+(i+1));
+ } finally {
+ cas.release();
+ }
+ }
+
+ uimaAsEngine.stop();
+ super.cleanBroker(broker2);
+
+ broker2.stop();
+
+ // expecting 5 failures due to broker missing
+// if ( errorCount != 5 ) {
+// fail("Expected 5 failures due to broker down, instead received:"+errorCount+" failures");
+// }
+ broker2.waitUntilStopped();
+
+ }
+ /**
+ * This test creates 4 UIMA AS clients and runs each in a separate thread. There is a single
+ * shared jms connection to a broker that each client uses. After initialization a client
+ * sends 1000 CASes to a remote service. While clients are processing the test kills
+ * the broker, waits for 4 seconds and restarts it. While the broker is down, clients
+ * keep trying sending CASes, receiving Ping timeouts. Once the broker is available again
+ * all clients should recover and begin processing CASes again. This tests recovery of a
+ * shared connection.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testMultipleSyncClientsRecoveryFromBrokerStopAndRestart() throws Exception {
+ System.out.println("-------------- testMultipleSyncClientsRecoveryFromBrokerStopAndRestart -------------");
+ //System.setProperty("uima.as.enable.jmx","false");
+ final BrokerService broker2 = setupSecondaryBroker(true);
+ final CountDownLatch latch = new CountDownLatch(8);
+ Thread[] clientThreads = new Thread[8];
+
+ // Create 4 Uima AS clients each running in a separate thread
+ for(int i=0; i < 8; i++) {
+ clientThreads[i] = new Thread() {
+ public void run() {
+ BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
+ try {
+ // Deploy Uima AS Primitive Service
+ deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
+ Map<String, Object> appCtx =
+ buildContext(broker2.getConnectorByName(DEFAULT_BROKER_URL_KEY_2).getUri().toString(), "NoOpAnnotatorQueue");
+
+ appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+ initialize(uimaAsEngine, appCtx);
+ waitUntilInitialized();
+ for (int i = 0; i < 500; i++) {
+ if ( i == 5 ) {
+ latch.countDown(); // indicate that some CASes were processed
+ }
+ CAS cas = uimaAsEngine.getCAS();
+ cas.setDocumentText("Some Text");
+// System.out.println("UIMA AS Client#"+ Thread.currentThread().getId()+" Sending CAS#"+(i + 1) + " Request to a Service");
+ try {
+ uimaAsEngine.sendAndReceiveCAS(cas);
+ } catch( Exception e) {
+ System.out.println("Client Received Expected Error on CAS:"+(i+1));
+ } finally {
+ cas.release();
+ }
+ synchronized(uimaAsEngine) {
+ uimaAsEngine.wait(100);
+ }
+ }
+ System.out.println("Thread:"+Thread.currentThread().getId()+" Completed run()");
+ uimaAsEngine.stop();
+ } catch( Exception e) {
+ e.printStackTrace();
+ return;
+ }
+ }
+ };
+ clientThreads[i].start();
+ }
+ BrokerService broker3 = null;
+ try {
+ latch.await(); // wait for all threads to process a few CASes
+
+ broker2.stop();
+ System.out.println("Stopping Broker - wait ...");
+ broker2.waitUntilStopped();
+
+ System.out.println("Restarting Broker - wait ...");
+ // restart the broker
+ broker3 = setupSecondaryBroker(true);
+ broker3.waitUntilStarted();
+
+ } catch ( Exception e ) {
+
+ } finally {
+ for(int i=0; i < 4; i++ ) {
+ clientThreads[i].join();
+ }
+ System.out.println("Stopping Broker - wait ...");
+ if ( broker3 != null ) {
+ super.cleanBroker(broker3);
+
+ broker3.stop();
+ broker3.waitUntilStopped();
+
+ }
+ }
+ }
@Test
public void testClient() throws Exception {
- System.out.println("-------------- testClientRecoveryFromBrokerFailure -------------");
+ System.out.println("-------------- testClient -------------");
System.setProperty("BrokerURL", broker.getConnectorByName(DEFAULT_BROKER_URL_KEY).getUri().toString());
BaseUIMAAsynchronousEngine_impl uimaAsEngine1 = new BaseUIMAAsynchronousEngine_impl();
BaseUIMAAsynchronousEngine_impl uimaAsEngine2 = new BaseUIMAAsynchronousEngine_impl();
-
+ File directory = new File("./");
+ System.out.println(directory.getAbsolutePath());
String sid1= deployService(uimaAsEngine1, relativePath + "/Deploy_AggregateMultiplierWith30SecDelay.xml");
String sid2 = deployService(uimaAsEngine2, relativePath + "/Deploy_AggregateMultiplierWith30SecDelay.xml");
@@ -142,7 +353,7 @@ public class TestUimaASExtended extends
@Test
public void testClientWithPrimitives() throws Exception {
- System.out.println("-------------- testClientRecoveryFromBrokerFailure -------------");
+ System.out.println("-------------- testClientWithPrimitives -------------");
System.setProperty("BrokerURL", broker.getConnectorByName(DEFAULT_BROKER_URL_KEY).getUri().toString());
BaseUIMAAsynchronousEngine_impl uimaAsEngine1 = new BaseUIMAAsynchronousEngine_impl();
@@ -244,7 +455,7 @@ public class TestUimaASExtended extends
}
}
- */
+
@Test
public void testBrokerRestartWithAggregateMultiplier() throws Exception {
System.out.println("-------------- testBrokerRestartWithAggregateMultiplier -------------");
@@ -280,9 +491,9 @@ public class TestUimaASExtended extends
appCtx.put(UimaAsynchronousEngine.ShadowCasPoolSize, Integer.valueOf(2));
runTest(appCtx, eeUimaEngine,burl,
"TopLevelTaeQueue", 1, PROCESS_LATCH);
- eeUimaEngine.stop();
+ // eeUimaEngine.stop();
}
-
+ */
/**
* Tests client and service recovery from broker restart. It deploys CM service, dispatches
* a CAS for processing and while the CAS is in process, it bounces a broker. The service
@@ -353,6 +564,8 @@ public class TestUimaASExtended extends
}
+ s.shutdownNow();
+ s.awaitTermination(10, TimeUnit.HOURS);
uimaAsEngine.stop();
}
@@ -415,6 +628,8 @@ public class TestUimaASExtended extends
}
+ s.shutdownNow();
+ s.awaitTermination(10, TimeUnit.HOURS);
uimaAsEngine.stop();
@@ -431,6 +646,7 @@ public class TestUimaASExtended extends
*
* @throws Exception
*/
+
@Test
public void testServiceWithHttpListeners() throws Exception {
System.out.println("-------------- testServiceWithHttpListeners -------------");
@@ -442,9 +658,10 @@ public class TestUimaASExtended extends
c.setConnectionFactory(new ActiveMQConnectionFactory("http://localhost:18888"));
c.setDestinationName("TestQ");
c.setConcurrentConsumers(2);
- c.setBeanName("TestBean");
+ c.setBeanName("testServiceWithHttpListeners() - JUnit Test Listener");
c.setMessageListener(new JmsInputChannel());
- c.initialize();
+ //c.initialize();
+ //c.afterPropertiesSet();
c.start();
if ( c.isRunning() ) {
@@ -465,49 +682,20 @@ public class TestUimaASExtended extends
if ( c.failed() ) {
fail("Broker Failed - Reason:"+c.getReasonForFailure());
} else {
- System.out.println("Stopping Listener");
- c.stop();
-
- }
+ }
} catch( Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
- }
-
-
+ System.out.println("Stopping Listener");
+ c.stop();
+ c.shutdown();
- @Test
- public void testBrokerRestartWithPrimitiveMultiplier() throws Exception {
- System.out.println("-------------- testBrokerRestartWithPrimitiveMultiplier -------------");
- System.setProperty("BrokerURL", broker.getConnectorByName(DEFAULT_BROKER_URL_KEY).getUri().toString());
-
- BaseUIMAAsynchronousEngine_impl eeUimaEngine = new BaseUIMAAsynchronousEngine_impl();
-
- deployService(eeUimaEngine, relativePath + "/Deploy_RemoteCasMultiplier.xml");
-
-
- broker.stop();
- broker.waitUntilStopped();
-
- broker = createBroker();
- broker.start();
- broker.waitUntilStarted();
-
- String burl = broker.getConnectorByName(DEFAULT_BROKER_URL_KEY).getUri().toString();
- Map<String, Object> appCtx =
- buildContext(burl, "TestMultiplierQueue");
-
- // reduce the cas pool size and reply window
- appCtx.remove(UimaAsynchronousEngine.ShadowCasPoolSize);
- appCtx.put(UimaAsynchronousEngine.ShadowCasPoolSize, Integer.valueOf(2));
- runTest(appCtx, eeUimaEngine,burl,
- "TestMultiplierQueue", 1, PROCESS_LATCH);
-
- eeUimaEngine.stop();
}
+
+
/*
public void testContinueOnRetryFailure2() throws Exception {
@@ -541,92 +729,92 @@ public class TestUimaASExtended extends
/*
* Tests
*/
- @Test
- public void testSyncClientRecoveryFromBrokerStopAndRestart3() throws Exception {
- System.out.println("-------------- testSyncClientRecoveryFromBrokerStopAndRestart -------------");
- System.setProperty("BrokerURL", broker.getConnectorByName(DEFAULT_BROKER_URL_KEY).getUri().toString());
-
- // Instantiate Uima AS Client
- BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
- //BrokerService broker2 = setupSecondaryBroker(true);
- // Deploy Uima AS Primitive Service
- deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
-
- Map<String, Object> appCtx =
- buildContext(broker.getConnectorByName(DEFAULT_BROKER_URL_KEY).getUri().toString(), "NoOpAnnotatorQueue");
- appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
- appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
- appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, 20000);
- initialize(uimaAsEngine, appCtx);
- waitUntilInitialized();
-
-
- broker.stop();
- broker.waitUntilStopped();
-
- //System.setProperty("activemq.broker.jmx.domain","org.apache.activemq.test");
- //broker2 = setupSecondaryBroker(true);
- broker = createBroker();
- broker.start();
- broker.waitUntilStarted();
- int errorCount = 0;
- System.out.println("Sending CASes");
- for (int i = 0; i < 60; i++) {
- CAS cas = uimaAsEngine.getCAS();
- cas.setDocumentText("Some Text");
- try {
- uimaAsEngine.sendAndReceiveCAS(cas);
- } catch( Exception e) {
- System.out.println("Client Received Expected Error on CAS:"+(i+1));
- } finally {
- cas.release();
- }
-
-
- }
- uimaAsEngine.stop();
-
- /*
- int errorCount=0;
- for (int i = 0; i < 20; i++) {
-
- if ( i == 5 ) {
- broker2.stop();
- broker2.waitUntilStopped();
- } else if ( i == 10 ) {
- // restart the broker
- System.setProperty("activemq.broker.jmx.domain","org.apache.activemq.test");
- broker2 = setupSecondaryBroker(true);
-
- broker2.start();
- broker2.waitUntilStarted();
-
- }
- CAS cas = uimaAsEngine.getCAS();
- cas.setDocumentText("Some Text");
- // System.out.println("UIMA AS Client Sending CAS#" + (i + 1) + " Request to a Service");
- try {
- uimaAsEngine.sendAndReceiveCAS(cas);
- } catch( Exception e) {
- errorCount++;
- System.out.println("Client Received Expected Error on CAS:"+(i+1));
- } finally {
- cas.release();
- }
- }
-
- uimaAsEngine.stop();
- super.cleanBroker(broker2);
-
- broker2.stop();
-
- // expecting 5 failures due to broker missing
- if ( errorCount != 5 ) {
- fail("Expected 5 failures due to broker down, instead received:"+errorCount+" failures");
- }
- broker2.waitUntilStopped();
-*/
- }
+// @Test
+// public void testSyncClientRecoveryFromBrokerStopAndRestart3() throws Exception {
+// System.out.println("-------------- testSyncClientRecoveryFromBrokerStopAndRestart -------------");
+// System.setProperty("BrokerURL", broker.getConnectorByName(DEFAULT_BROKER_URL_KEY).getUri().toString());
+//
+// // Instantiate Uima AS Client
+// BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
+// //BrokerService broker2 = setupSecondaryBroker(true);
+// // Deploy Uima AS Primitive Service
+// deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
+//
+// Map<String, Object> appCtx =
+// buildContext(broker.getConnectorByName(DEFAULT_BROKER_URL_KEY).getUri().toString(), "NoOpAnnotatorQueue");
+// appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
+// appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+// appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, 20000);
+// initialize(uimaAsEngine, appCtx);
+// waitUntilInitialized();
+//
+//
+// broker.stop();
+// broker.waitUntilStopped();
+//
+// //System.setProperty("activemq.broker.jmx.domain","org.apache.activemq.test");
+// //broker2 = setupSecondaryBroker(true);
+// broker = createBroker();
+// broker.start();
+// broker.waitUntilStarted();
+// int errorCount = 0;
+// System.out.println("Sending CASes");
+// for (int i = 0; i < 60; i++) {
+// CAS cas = uimaAsEngine.getCAS();
+// cas.setDocumentText("Some Text");
+// try {
+// uimaAsEngine.sendAndReceiveCAS(cas);
+// } catch( Exception e) {
+// System.out.println("Client Received Expected Error on CAS:"+(i+1));
+// } finally {
+// cas.release();
+// }
+//
+//
+// }
+// uimaAsEngine.stop();
+//
+// /*
+// int errorCount=0;
+// for (int i = 0; i < 20; i++) {
+//
+// if ( i == 5 ) {
+// broker2.stop();
+// broker2.waitUntilStopped();
+// } else if ( i == 10 ) {
+// // restart the broker
+// System.setProperty("activemq.broker.jmx.domain","org.apache.activemq.test");
+// broker2 = setupSecondaryBroker(true);
+//
+// broker2.start();
+// broker2.waitUntilStarted();
+//
+// }
+// CAS cas = uimaAsEngine.getCAS();
+// cas.setDocumentText("Some Text");
+// // System.out.println("UIMA AS Client Sending CAS#" + (i + 1) + " Request to a Service");
+// try {
+// uimaAsEngine.sendAndReceiveCAS(cas);
+// } catch( Exception e) {
+// errorCount++;
+// System.out.println("Client Received Expected Error on CAS:"+(i+1));
+// } finally {
+// cas.release();
+// }
+// }
+//
+// uimaAsEngine.stop();
+// super.cleanBroker(broker2);
+//
+// broker2.stop();
+//
+// // expecting 5 failures due to broker missing
+// if ( errorCount != 5 ) {
+// fail("Expected 5 failures due to broker down, instead received:"+errorCount+" failures");
+// }
+// broker2.waitUntilStopped();
+//*/
+// }
/*
@@ -705,12 +893,33 @@ public class TestUimaASExtended extends
deployService(eeUimaEngine, relativePath + "/Deploy_NoOpAnnotator.xml");
deployService(eeUimaEngine, relativePath + "/Deploy_SyncAggregateWithJmsService.xml");
runTest(null, eeUimaEngine, String.valueOf(getMasterConnectorURI(broker)), "TopLevelTaeQueue",
- 0, PROCESS_LATCH);
+ 1, PROCESS_LATCH);
} catch( Exception e ) {
throw e;
}
}
+ /**
+ * Test use of a JMS Service Adapter. Invoke from a synchronous aggregate to emulate usage from
+ * RunAE or RunCPE.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testJmsServiceAdapterInAsyncAggregate() throws Exception {
+ Logger.getLogger(this.getClass()).info("-------------- testJmsServiceAdapter -------------");
+ //setUp();
+ BaseUIMAAsynchronousEngine_impl eeUimaEngine = new BaseUIMAAsynchronousEngine_impl();
+ try {
+ deployService(eeUimaEngine, relativePath + "/Deploy_NoOpAnnotator.xml");
+ deployService(eeUimaEngine, relativePath + "/Deploy_AsyncAggregateWithJmsService.xml");
+ runTest(null, eeUimaEngine, String.valueOf(getMasterConnectorURI(broker)), "TopLevelTaeQueue",
+ 1, PROCESS_LATCH);
+
+ } catch( Exception e ) {
+ throw e;
+ }
+ }
/*
* Tests Uima AS client placeholder handling and substitution. The Uima Aggregate instantiates
* UIMA AS client proxy using Jms Client Descriptor that contains a placeholder
@@ -1059,7 +1268,28 @@ public class TestUimaASExtended extends
public void testSendAndReceive() throws Exception {
BaseUIMAAsynchronousEngine_impl uimaAsEngine
= new BaseUIMAAsynchronousEngine_impl();
- deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotator.xml");
+
+ /*
+ String id = deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotator.xml");
+ deployService(uimaAsEngine, relativePath + "/Deploy_AggregateAnnotator.xml");
+
+
+ Map<String, Object> appCtx = buildContext(getMasterConnectorURI(broker),"MeetingDetectorTaeQueue");
+ appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+ //appCtx.put(UimaAsynchronousEngine.TargetSelectorProperty, "MeetingDetector2");
+ initialize(uimaAsEngine, appCtx);
+ waitUntilInitialized();
+ for (int i = 0; i < 15; i++) {
+ CAS cas = uimaAsEngine.getCAS();
+ cas.setDocumentText("Some Text");
+ System.out.println(".... Sending CAS "+i);
+ uimaAsEngine.sendAndReceiveCAS(cas);
+ cas.release();
+ }
+ */
+
+ String id = deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotator.xml");
deployService(uimaAsEngine, relativePath + "/Deploy_AggregateAnnotator.xml");
// Deploy Uima AS Primitive Service
// deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotator.xml");
@@ -1081,7 +1311,7 @@ public class TestUimaASExtended extends
for( AnalysisEnginePerformanceMetrics m :componentMetricsList ) {
System.out.println(".............. Component:"+m.getName()+" AnalysisTime:"+m.getAnalysisTime());
}
- uimaAsEngine.sendCAS(cas);
+ //uimaAsEngine.sendCAS(cas);
System.out.println("----------------------------------------------------");
componentMetricsList.clear();
} catch( Exception e) {
@@ -1092,6 +1322,7 @@ public class TestUimaASExtended extends
}
}
uimaAsEngine.stop();
+
}
@Test
public void testMultipleSyncClientsWithMultipleBrokers() throws Exception {
@@ -1347,120 +1578,12 @@ public class TestUimaASExtended extends
// Deploy Uima AS Primitive Service
deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
Map<String, Object> appCtx = buildContext("failover:("+System.getProperty("BrokerURL")+","+getBrokerUri()+")?randomize=false","NoOpAnnotatorQueue");
- appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
- appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
- initialize(uimaAsEngine, appCtx);
- waitUntilInitialized();
- int errorCount = 0;
- for (int i = 0; i < 15; i++) {
- CAS cas = uimaAsEngine.getCAS();
- cas.setDocumentText("Some Text");
- // System.out.println("UIMA AS Client Sending CAS#" + (i + 1) + " Request to a Service");
- try {
- uimaAsEngine.sendAndReceiveCAS(cas);
- } catch( Exception e) {
- errorCount++;
- } finally {
- cas.release();
- }
- }
- uimaAsEngine.stop();
- super.cleanBroker(broker2);
-
- broker2.stop();
- broker2.waitUntilStopped();
-
- }
-
- /**
- * This test starts a secondary broker, starts NoOp Annotator, and
- * using synchronous sendAndReceive() sends 10 CASes for analysis. Before sending 11th, the test
- * stops the secondary broker and sends 5 more CASes. All CASes sent after
- * the broker shutdown result in GetMeta ping and a subsequent timeout.
- * @throws Exception
- */
-
- @Test
- public void testSyncClientRecoveryFromBrokerStop() throws Exception {
- System.out.println("-------------- testSyncClientRecoveryFromBrokerStop -------------");
- // Instantiate Uima AS Client
- BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
- BrokerService broker2 = setupSecondaryBroker(true);
- // Deploy Uima AS Primitive Service
- deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
- Map<String, Object> appCtx =
- buildContext(broker2.getConnectorByName(DEFAULT_BROKER_URL_KEY_2).getUri().toString(), "NoOpAnnotatorQueue");
- appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, 1100);
- appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
- appCtx.put(UimaAsynchronousEngine.CpcTimeout, 300);
- initialize(uimaAsEngine, appCtx);
- waitUntilInitialized();
- int errorCount = 0;
- for (int i = 0; i < 15; i++) {
-
- if ( i == 10 ) {
- // Stop the broker
- broker2.stop();
- broker2.waitUntilStopped();
- }
- CAS cas = uimaAsEngine.getCAS();
- cas.setDocumentText("Some Text");
- // System.out.println("UIMA AS Client Sending CAS#" + (i + 1) + " Request to a Service");
- try {
- uimaAsEngine.sendAndReceiveCAS(cas);
- } catch( Exception e) {
- errorCount++;
- System.out.println("Client Received Expected Error on CAS:"+(i+1)+" ErrorCount:"+errorCount);
- } finally {
- cas.release();
- }
- }
-
- uimaAsEngine.stop();
- // expecting 5 failures due to broker missing
- if ( errorCount != 5 ) {
- fail("Expected 5 failures due to broker down, instead received:"+errorCount+" failures");
- }
- }
- /**
- * This test starts a secondary broker, starts NoOp Annotator, and
- * using synchronous sendAndReceive() sends 5 CASes for analysis. Before sending 6th, the test
- * stops the secondary broker and sends 5 more CASes. All CASes sent after
- * the broker shutdown result in GetMeta ping and a subsequent timeout. Before
- * sending 11th CAS the test starts the broker again and sends 10 more CASes
- * @throws Exception
- */
- @Test
- public void testSyncClientRecoveryFromBrokerStopAndRestart() throws Exception {
- System.out.println("-------------- testSyncClientRecoveryFromBrokerStopAndRestart -------------");
- // Instantiate Uima AS Client
- BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
- BrokerService broker2 = setupSecondaryBroker(true);
- // Deploy Uima AS Primitive Service
- deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
-
- Map<String, Object> appCtx =
- buildContext(broker2.getConnectorByName(DEFAULT_BROKER_URL_KEY_2).getUri().toString(), "NoOpAnnotatorQueue");
- appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
- appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
- appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, 20000);
- initialize(uimaAsEngine, appCtx);
- waitUntilInitialized();
- int errorCount=0;
- for (int i = 0; i < 20; i++) {
-
- if ( i == 5 ) {
- broker2.stop();
- broker2.waitUntilStopped();
- } else if ( i == 10 ) {
- // restart the broker
- System.setProperty("activemq.broker.jmx.domain","org.apache.activemq.test");
- broker2 = setupSecondaryBroker(true);
-
- broker2.start();
- broker2.waitUntilStarted();
-
- }
+ appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+ initialize(uimaAsEngine, appCtx);
+ waitUntilInitialized();
+ int errorCount = 0;
+ for (int i = 0; i < 15; i++) {
CAS cas = uimaAsEngine.getCAS();
cas.setDocumentText("Some Text");
// System.out.println("UIMA AS Client Sending CAS#" + (i + 1) + " Request to a Service");
@@ -1468,195 +1591,134 @@ public class TestUimaASExtended extends
uimaAsEngine.sendAndReceiveCAS(cas);
} catch( Exception e) {
errorCount++;
- System.out.println("Client Received Expected Error on CAS:"+(i+1));
} finally {
cas.release();
}
}
-
uimaAsEngine.stop();
super.cleanBroker(broker2);
broker2.stop();
-
- // expecting 5 failures due to broker missing
- if ( errorCount != 5 ) {
- fail("Expected 5 failures due to broker down, instead received:"+errorCount+" failures");
- }
broker2.waitUntilStopped();
}
- /**
- * This test creates 4 UIMA AS clients and runs each in a separate thread. There is a single
- * shared jms connection to a broker that each client uses. After initialization a client
- * sends 1000 CASes to a remote service. While clients are processing the test kills
- * the broker, waits for 4 seconds and restarts it. While the broker is down, clients
- * keep trying sending CASes, receiving Ping timeouts. Once the broker is available again
- * all clients should recover and begin processing CASes again. This tests recovery of a
- * shared connection.
- *
- * @throws Exception
- */
- @Test
- public void testMultipleSyncClientsRecoveryFromBrokerStopAndRestart() throws Exception {
- System.out.println("-------------- testMultipleSyncClientsRecoveryFromBrokerStopAndRestart -------------");
- final BrokerService broker2 = setupSecondaryBroker(true);
- final CountDownLatch latch = new CountDownLatch(4);
- Thread[] clientThreads = new Thread[4];
-
- // Create 4 Uima AS clients each running in a separate thread
- for(int i=0; i < 4; i++) {
- clientThreads[i] = new Thread() {
- public void run() {
- BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
- try {
- // Deploy Uima AS Primitive Service
- deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
- Map<String, Object> appCtx =
- buildContext(broker2.getConnectorByName(DEFAULT_BROKER_URL_KEY_2).getUri().toString(), "NoOpAnnotatorQueue");
-
- appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
- appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
- initialize(uimaAsEngine, appCtx);
- waitUntilInitialized();
- for (int i = 0; i < 500; i++) {
- if ( i == 5 ) {
- latch.countDown(); // indicate that some CASes were processed
- }
- CAS cas = uimaAsEngine.getCAS();
- cas.setDocumentText("Some Text");
-// System.out.println("UIMA AS Client#"+ Thread.currentThread().getId()+" Sending CAS#"+(i + 1) + " Request to a Service");
- try {
- uimaAsEngine.sendAndReceiveCAS(cas);
- } catch( Exception e) {
- System.out.println("Client Received Expected Error on CAS:"+(i+1));
- } finally {
- cas.release();
- }
- synchronized(uimaAsEngine) {
- uimaAsEngine.wait(100);
- }
- }
- System.out.println("Thread:"+Thread.currentThread().getId()+" Completed run()");
- uimaAsEngine.stop();
- } catch( Exception e) {
- e.printStackTrace();
- return;
- }
- }
- };
- clientThreads[i].start();
- }
- BrokerService broker3 = null;
- try {
- latch.await(); // wait for all threads to process a few CASes
-
- broker2.stop();
- System.out.println("Stopping Broker - wait ...");
- broker2.waitUntilStopped();
-
- System.out.println("Restarting Broker - wait ...");
- // restart the broker
- broker3 = setupSecondaryBroker(true);
- broker3.waitUntilStarted();
-
- } catch ( Exception e ) {
-
- } finally {
- for(int i=0; i < 4; i++ ) {
- clientThreads[i].join();
- }
- System.out.println("Stopping Broker - wait ...");
- if ( broker3 != null ) {
- super.cleanBroker(broker3);
-
- broker3.stop();
- broker3.waitUntilStopped();
-
- }
- }
-}
+
/**
* This test starts a secondary broker, starts NoOp Annotator, and
- * using asynchronous send() sends a total of 15 CASes for analysis. After processing 11th
- * the test stops the secondary broker and sends 4 more CASes which fails due to broker not running.
- *
+ * using synchronous sendAndReceive() sends 10 CASes for analysis. Before sending 11th, the test
+ * stops the secondary broker and sends 5 more CASes. All CASes sent after
+ * the broker shutdown result in GetMeta ping and a subsequent timeout.
* @throws Exception
*/
+
@Test
- public void testAsyncClientRecoveryFromBrokerStop() throws Exception {
- System.out.println("-------------- testAsyncClientRecoveryFromBrokerStop -------------");
-
- BrokerService broker2 = setupSecondaryBroker(true);
- // Instantiate Uima AS Client
+ public void testSyncClientRecoveryFromBrokerStop() throws Exception {
+ System.out.println("-------------- testSyncClientRecoveryFromBrokerStop -------------");
+ //System.setProperty("uima.as.enable.jmx","false");
+ // Instantiate Uima AS Client
BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
+ BrokerService broker2 = setupSecondaryBroker(true);
+ // Deploy Uima AS Primitive Service
deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
Map<String, Object> appCtx =
buildContext(broker2.getConnectorByName(DEFAULT_BROKER_URL_KEY_2).getUri().toString(), "NoOpAnnotatorQueue");
- appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
- appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.Timeout, 0);
+ appCtx.put(UimaAsynchronousEngine.CpcTimeout, 300);
+ appCtx.put(UimaAsynchronousEngine.CasPoolSize,15);
initialize(uimaAsEngine, appCtx);
waitUntilInitialized();
-
+ int errorCount = 0;
for (int i = 0; i < 15; i++) {
if ( i == 10 ) {
+ // Stop the broker
broker2.stop();
broker2.waitUntilStopped();
-
+ Timer timer = new Timer();
+ timer.schedule(new StartBrokerTask(broker2, this),10000);
}
CAS cas = uimaAsEngine.getCAS();
cas.setDocumentText("Some Text");
- // System.out.println("UIMA AS Client Sending CAS#" + (i + 1) + " Request to a Service");
- uimaAsEngine.sendCAS(cas);
+ // System.out.println("UIMA AS Client Sending CAS#" + (i + 1) + " Request to a Service");
+ try {
+ uimaAsEngine.sendAndReceiveCAS(cas);
+ } catch( Exception e) {
+ errorCount++;
+ System.out.println("Client Received Expected Error on CAS:"+(i+1)+" ErrorCount:"+errorCount);
+ } finally {
+ cas.release();
+ }
}
-
+
uimaAsEngine.stop();
- super.cleanBroker(broker2);
+ // expecting 5 failures due to broker missing
+// if ( errorCount != 5 ) {
+// fail("Expected 5 failures due to broker down, instead received:"+errorCount+" failures");
+// }
broker2.stop();
broker2.waitUntilStopped();
}
-
+
@Test
public void testAsyncClientRecoveryFromBrokerStopAndRestart() throws Exception {
System.out.println("-------------- testAsyncClientRecoveryFromBrokerStopAndRestart -------------");
- BrokerService broker2 = setupSecondaryBroker(true);
+ BrokerService broker2 = setupSecondaryBroker(true);
// Instantiate Uima AS Client
BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
// Deploy Uima AS Primitive Service
- deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
+ String id = deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
+ String brokerUri = broker2.getConnectorByName(DEFAULT_BROKER_URL_KEY_2).getUri().toString();
Map<String, Object> appCtx =
- buildContext(broker2.getConnectorByName(DEFAULT_BROKER_URL_KEY_2).getUri().toString(), "NoOpAnnotatorQueue");
+ buildContext(brokerUri, "NoOpAnnotatorQueue");
- appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.Timeout, 200);
appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, 200);
initialize(uimaAsEngine, appCtx);
waitUntilInitialized();
-
- for (int i = 0; i < 150; i++) {
+ int delay = 1;
+ for (int i = 0; i < 50; i++) {
if ( i == 10 ) {
broker2.stop();
broker2.waitUntilStopped();
+ System.out.println("..... Stopped broker ............................");
+ Timer timer = new Timer();
+ timer.schedule(new StartBrokerTask(broker2, this),500);
+ delay = 200;
+ }
+ synchronized(appCtx) {
+ try {
+ appCtx.wait(delay);
+ } catch( InterruptedException eee) {
+
+ }
+ }
+/*
} else if ( i == 15 ) {
broker2 = setupSecondaryBroker(true);
broker2.waitUntilStarted();
+ System.out.println("..... Restarted broker ............................");
}
+
+ */
CAS cas = uimaAsEngine.getCAS();
cas.setDocumentText("Some Text");
- // System.out.println("UIMA AS Client Sending CAS#" + (i + 1) + " Request to a Service");
+ System.out.println("UIMA AS Client Sending CAS#" + (i + 1) + " Request to a Service");
uimaAsEngine.sendCAS(cas);
}
+
uimaAsEngine.stop();
+
super.cleanBroker(broker2);
broker2.stop();
broker2.waitUntilStopped();
-
}
/**
@@ -1676,6 +1738,7 @@ public class TestUimaASExtended extends
* @throws Exception
*/
+ /*
@Test
public void testMultipleClientsRecoveryFromBrokerStopAndRestart() throws Exception {
System.out.println("-------------- testMultipleClientsRecoveryFromBrokerStopAndRestart -------------");
@@ -1690,6 +1753,7 @@ public class TestUimaASExtended extends
appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, 400);
initialize(uimaClient1, appCtx);
waitUntilInitialized();
@@ -1701,6 +1765,7 @@ public class TestUimaASExtended extends
appCtx2.put(UimaAsynchronousEngine.Timeout, 1100);
appCtx2.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+ appCtx2.put(UimaAsynchronousEngine.GetMetaTimeout, 400);
initialize(uimaClient2, appCtx2);
waitUntilInitialized();
@@ -1720,9 +1785,11 @@ public class TestUimaASExtended extends
}
CAS cas = uimaClient1.getCAS();
cas.setDocumentText("Some Text");
- // System.out.println("UIMA AS Client#1 Sending CAS#" + (i + 1) + " Request to a Service");
+ System.out.println("UIMA AS Client#1 Sending CAS#" + (i + 1) + " Request to a Service");
try {
uimaClient1.sendAndReceiveCAS(cas);
+ System.out.println("UIMA AS Client#1 Received Reply For CAS:"+(i+1));
+
} catch( Exception e) {
errorCount++;
System.out.println("UIMA AS Client#1 Received Expected Error on CAS:"+(i+1));
@@ -1730,11 +1797,14 @@ public class TestUimaASExtended extends
cas.release();
}
}
+ System.out.println("Done with UIMA AS Client#1");
+
for (int i = 0; i < 4; i++) {
CAS cas = uimaClient2.getCAS();
cas.setDocumentText("Some Text");
- // System.out.println("UIMA AS Client#2 Sending CAS#" + (i + 1) + " Request to a Service");
+ System.out.println("UIMA AS Client#2 Sending CAS#" + (i + 1) + " Request to a Service");
try {
+
uimaClient2.sendAndReceiveCAS(cas);
} catch( Exception e) {
errorCount++;
@@ -1752,6 +1822,7 @@ public class TestUimaASExtended extends
broker2.waitUntilStopped();
}
+ */
/**
* Tests ability of an aggregate to recover from a Broker restart. The broker managing
* delegate's input queue is stopped after 1st CAS is fully processed. As part of error
@@ -1770,6 +1841,49 @@ public class TestUimaASExtended extends
}
/**
+ * This test starts a secondary broker, starts NoOp Annotator, and
+ * using asynchronous send() sends a total of 15 CASes for analysis. After processing 11th
+ * the test stops the secondary broker and sends 4 more CASes which fails due to broker not running.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testAsyncClientRecoveryFromBrokerStop() throws Exception {
+ System.out.println("-------------- testAsyncClientRecoveryFromBrokerStop -------------");
+
+ BrokerService broker2 = setupSecondaryBroker(true);
+ // Instantiate Uima AS Client
+ BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
+ deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithPlaceholder.xml");
+ Map<String, Object> appCtx =
+ buildContext(broker2.getConnectorByName(DEFAULT_BROKER_URL_KEY_2).getUri().toString(), "NoOpAnnotatorQueue");
+ appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+ appCtx.put(UimaAsynchronousEngine.CasPoolSize, 15);
+
+ initialize(uimaAsEngine, appCtx);
+ waitUntilInitialized();
+
+ for (int i = 0; i < 15; i++) {
+
+ if ( i == 10 ) {
+ broker2.stop();
+ broker2.waitUntilStopped();
+
+ }
+ CAS cas = uimaAsEngine.getCAS();
+ cas.setDocumentText("Some Text");
+ // System.out.println("UIMA AS Client Sending CAS#" + (i + 1) + " Request to a Service");
+ uimaAsEngine.sendCAS(cas);
+ }
+
+ uimaAsEngine.stop();
+ super.cleanBroker(broker2);
+ broker2.stop();
+ broker2.waitUntilStopped();
+
+ }
+/**
* Tests ability of an aggregate to recover from a Broker restart. The broker managing
* delegate's input queue is stopped after 1st CAS is fully processed. As part of error
* handling the listener on delegate temp reply queue is stopped and a delegate marked
@@ -1917,7 +2031,20 @@ public class TestUimaASExtended extends
System.clearProperty("DefaultBrokerURL");
uimaAsEngine.stop();
}
-
+private class Killer {
+ Timer timer;
+ public Killer(int secs) {
+ timer = new Timer();
+ timer.schedule(new KillerTask(), secs*1000);
+ }
+ class KillerTask extends TimerTask {
+ public void run() {
+ System.out.println("----------------- KillerTask calling System.exit()");
+ timer.cancel();
+ System.exit(0);
+ }
+ }
+}
@Test
public void testClientProcess() throws Exception {
System.out.println("-------------- testClientProcess -------------");
@@ -1931,6 +2058,8 @@ public class TestUimaASExtended extends
appCtx.put(UimaAsynchronousEngine.Timeout, 0);
appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
appCtx.put(UimaAsynchronousEngine.CasPoolSize,2);
+ appCtx.put(UimaAsynchronousEngine.SERIALIZATION_STRATEGY, "xmi");
+
initialize(uimaAsEngine, appCtx);
waitUntilInitialized();
@@ -2106,6 +2235,86 @@ public class TestUimaASExtended extends
"PersonTitleAnnotatorQueue", 0, EXCEPTION_LATCH);
}
@Test
+ public void testDeployPrimitiveServiceWithTargeting() throws Exception {
+ System.out.println("-------------- testDeployPrimitiveService -------------");
+ // Instantiate Uima-AS Client
+ BaseUIMAAsynchronousEngine_impl eeUimaEngine = new BaseUIMAAsynchronousEngine_impl();
+ System.setProperty(UimaAsynchronousEngine.TargetSelectorProperty,"ServiceOne");
+ // Deploy Uima-AS Primitive Service
+ deployService(eeUimaEngine, relativePath + "/Deploy_NoOpAnnotatorWithTargetingSupport.xml");
+
+ System.setProperty(UimaAsynchronousEngine.TargetSelectorProperty,"ServiceTwo");
+ // Deploy Uima-AS Primitive Service
+ deployService(eeUimaEngine, relativePath + "/Deploy_NoOpAnnotatorWithTargetingSupport.xml");
+
+ System.setProperty(UimaAsynchronousEngine.TargetSelectorProperty,"ServiceThree");
+ // Deploy Uima-AS Primitive Service
+ deployService(eeUimaEngine, relativePath + "/Deploy_NoOpAnnotatorWithTargetingSupport.xml");
+
+ System.getProperties().remove(UimaAsynchronousEngine.TargetSelectorProperty);
+ Map<String, Object> appCtx = buildContext(getMasterConnectorURI(broker),
+ "NoOpAnnotatorQueue");
+ int toProcess = 10;
+ try {
+ initialize(eeUimaEngine, appCtx);
+ waitUntilInitialized();
+ String tsId = "ServiceOne";
+
+ for( int i=0; i < 10; i++ ) {
+ CAS cas = eeUimaEngine.getCAS();
+ //cas.setDocumentText("");
+ eeUimaEngine.sendAndReceiveCAS(cas, null, tsId);
+ String serviceIdWhereCasWasProcessed = cas.getDocumentText();
+ if ( !serviceIdWhereCasWasProcessed.equals(tsId)) {
+ fail("Received Reply from a Wrong Service - Expected: "+tsId+" Instead Received "+serviceIdWhereCasWasProcessed);
+ }
+ cas.release();
+ }
+
+ tsId = "ServiceTwo";
+ for( int i=0; i < 10; i++ ) {
+ CAS cas = eeUimaEngine.getCAS();
+ //cas.setDocumentText("");
+ eeUimaEngine.sendAndReceiveCAS(cas, null, tsId);
+ String serviceIdWhereCasWasProcessed = cas.getDocumentText();
+ if ( !serviceIdWhereCasWasProcessed.equals(tsId)) {
+ fail("Received Reply from a Wrong Service - Expected: "+tsId+" Instead Received "+serviceIdWhereCasWasProcessed);
+ }
+ cas.release();
+ }
+
+ tsId = "ServiceThree";
+
+
+ for( int i=0; i < toProcess; i++ ) {
+ CAS cas = eeUimaEngine.getCAS();
+ //cas.setDocumentText("");
+ eeUimaEngine.sendCAS(cas, tsId);
+ //cas.release();
+ }
+ } catch( Exception e) {
+ e.printStackTrace();
+ } finally {
+
+ while( getNumberOfCASesProcessed() < toProcess ) {
+ if ( unexpectedException ) {
+ fail("Service Targeting Failed");
+ break;
+ }
+ synchronized(this) {
+ wait(100);
+ }
+ }
+ eeUimaEngine.stop();
+ }
+// synchronized(this) {
+// wait(0);
+// }
+
+ // runTest(null, eeUimaEngine, String.valueOf(getMasterConnectorURI(broker)),
+ // "PersonTitleAnnotatorQueue", 0, EXCEPTION_LATCH);
+ }
+ @Test
public void testDeployPrimitiveServiceWithInitFailure() throws Exception {
System.out.println("-------------- testDeployPrimitiveServiceWithInitFailure -------------");
// Instantiate Uima-AS Client
@@ -2385,7 +2594,7 @@ public class TestUimaASExtended extends
Map<String, Object> appCtx = buildContext(String.valueOf(getMasterConnectorURI(broker)),
// Map<String, Object> appCtx = buildContext("tcp://localhost:61616",
"TopLevelTaeQueue");
- appCtx.put(UimaAsynchronousEngine.Timeout, 1000);
+ appCtx.put(UimaAsynchronousEngine.Timeout, 0);
appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, 0);
addExceptionToignore(org.apache.uima.aae.error.UimaEEServiceException.class);
@@ -2394,6 +2603,51 @@ public class TestUimaASExtended extends
runTest(appCtx, eeUimaEngine, "tcp://localhost:61616", "TopLevelTaeQueue",
1, PROCESS_LATCH);
}
+
+ @Test
+ public void testDeployAggregateServiceWithDoctype() throws Exception {
+ System.out.println("-------------- testDeployAggregateServiceWithDoctype -------------");
+ BaseUIMAAsynchronousEngine_impl eeUimaEngine = new BaseUIMAAsynchronousEngine_impl();
+ System.setProperty(JmsConstants.SessionTimeoutOverride, "2500000");
+
+ try {
+ deployService(eeUimaEngine, relativePath + "/Deploy_AggregateAnnotatorWithDOCTYPE.xml");
+ } catch( Exception e ) {
+ if ( e.getMessage() != null &&
+ e.getMessage().indexOf("disallow-doctype-decl") > 0 ) {
+ System.out.println("---- Detected expected error during parsing of a deployment descriptor - SUCCESS ----");
+ return; // success - detected expected error
+ }
+ }
+ fail("This test should have failed with SAXParseException - Instead no error was detected");
+ }
+
+ @Test
+ public void testAggregateTypePriorities() throws Exception {
+ System.out.println("-------------- testAggregateTypePriorities -------------");
+ BaseUIMAAsynchronousEngine_impl eeUimaEngine = new BaseUIMAAsynchronousEngine_impl();
+ System.setProperty(JmsConstants.SessionTimeoutOverride, "2500000");
+ deployService(eeUimaEngine, relativePath + "/Deploy_NoOpAnnotator.xml");
+ deployService(eeUimaEngine, relativePath + "/Deploy_AggregateAnnotator.xml");
+
+ Map<String, Object> appCtx = buildContext(String.valueOf(getMasterConnectorURI(broker)),
+// Map<String, Object> appCtx = buildContext("tcp://localhost:61616",
+ "TopLevelTaeQueue");
+ appCtx.put(UimaAsynchronousEngine.Timeout, 1000);
+ appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, 0);
+ initialize(eeUimaEngine, appCtx);
+
+ waitUntilInitialized();
+
+ ProcessingResourceMetaData meta = eeUimaEngine.getMetaData();
+ TypePriorityList[] pl = meta.getTypePriorities().getPriorityLists();
+ for( TypePriorityList tp : pl ) {
+ String[] typeArray = tp.getTypes();
+ Assert.assertEquals(true, typeArray[0].equals("uima.cas.TOP"));
+ Assert.assertEquals(true, typeArray[1].equals("uima.tcas.Annotation"));
+ }
+ eeUimaEngine.stop();
+ }
/**
* Sends total of 10 CASes to async aggregate configured to process 2 CASes at a time.
* The inner NoOp annotator is configured to sleep for 5 seconds. The client should
@@ -2945,13 +3199,13 @@ public class TestUimaASExtended extends
try {
runTest(appCtx, eeUimaEngine, String.valueOf(getMasterConnectorURI(broker)),
- "PersonTitleAnnotatorQueue", 500, EXCEPTION_LATCH);
+ "PersonTitleAnnotatorQueue", 1000, EXCEPTION_LATCH);
} catch (RuntimeException e) {
System.out.println(">>> runtest generated exception: " + e);
e.printStackTrace(System.out);
}
super.countPingRetries=false;
-
+ // eeUimaEngine.stop();
}
/**
@@ -3435,6 +3689,17 @@ public class TestUimaASExtended extends
BaseUIMAAsynchronousEngine_impl eeUimaEngine = new BaseUIMAAsynchronousEngine_impl();
deployService(eeUimaEngine, relativePath + "/Deploy_RemoteCasMultiplier.xml");
+ deployService(eeUimaEngine, relativePath + "/Deploy_NoOpAnnotator.xml");
+ deployService(eeUimaEngine, relativePath + "/Deploy_AggregateMultiplier.xml");
+
+ Map<String, Object> appCtx = buildContext(String.valueOf(getMasterConnectorURI(broker)),
+ "TopLevelTaeQueue");
+ appCtx.remove(UimaAsynchronousEngine.ShadowCasPoolSize);
+ appCtx.put(UimaAsynchronousEngine.ShadowCasPoolSize, Integer.valueOf(1));
+ runTest(appCtx, eeUimaEngine, String.valueOf(getMasterConnectorURI(broker)),
+ "TopLevelTaeQueue", 1, PROCESS_LATCH);
+
+ /*
broker.stop();
broker.waitUntilStopped();
@@ -3443,17 +3708,24 @@ public class TestUimaASExtended extends
broker = createBroker();
broker.start();
broker.waitUntilStarted();
+*/
- deployService(eeUimaEngine, relativePath + "/Deploy_NoOpAnnotator.xml");
- deployService(eeUimaEngine, relativePath + "/Deploy_AggregateMultiplier.xml");
+
+/*
+
+ appCtx.remove(UimaAsynchronousEngine.ShadowCasPoolSize);
+ appCtx.put(UimaAsynchronousEngine.ShadowCasPoolSize, Integer.valueOf(1));
+ runTest(appCtx, eeUimaEngine, String.valueOf(getMasterConnectorURI(broker)),
+ "TestMultiplierQueue", 1, PROCESS_LATCH);
+
String burl = broker.getConnectorByName(DEFAULT_BROKER_URL_KEY).getUri().toString();
Map<String, Object> appCtx =
buildContext(burl, "TopLevelTaeQueue");
-
+*/
// Map<String, Object> appCtx = buildContext(String.valueOf(getMasterConnectorURI(broker)),
// "TopLevelTaeQueue");
-
+/*
broker.stop();
broker.waitUntilStopped();
@@ -3462,8 +3734,8 @@ broker.waitUntilStopped();
broker = createBroker();
broker.start();
broker.waitUntilStarted();
-
-
+*/
+/*
// reduce the cas pool size and reply window
appCtx.remove(UimaAsynchronousEngine.ShadowCasPoolSize);
appCtx.put(UimaAsynchronousEngine.ShadowCasPoolSize, Integer.valueOf(2));
@@ -3471,7 +3743,8 @@ broker.waitUntilStarted();
runTest(appCtx, eeUimaEngine,burl,
"TopLevelTaeQueue", 1, PROCESS_LATCH);
-
+ eeUimaEngine.stop();
+ */
}
@Test
public void testClientProcessWithRemoteMultiplier() throws Exception {
@@ -4349,5 +4622,27 @@ broker.waitUntilStarted();
}
}
-
+ class StartBrokerTask extends TimerTask {
+ BrokerService broker = null;
+ TestUimaASExtended testSuiteRef = null;
+ StartBrokerTask(BrokerService broker, TestUimaASExtended testSuiteRef) {
+ this.broker = broker;
+ this.testSuiteRef = testSuiteRef;
+ }
+ @Override
+ public void run() {
+ try {
+ broker = testSuiteRef.setupSecondaryBroker(true);
+ broker.waitUntilStarted();
+ System.out.println("..... Restarted broker ............................");
+
+ } catch( Exception e ) {
+ throw new RuntimeException(e);
+
+ }
+
+ }
+
+
+ }
}
Modified: uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/ActiveMQSupport.java
URL: http://svn.apache.org/viewvc/uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/ActiveMQSupport.java?rev=1849399&r1=1849398&r2=1849399&view=diff
==============================================================================
--- uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/ActiveMQSupport.java (original)
+++ uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/ActiveMQSupport.java Thu Dec 20 14:40:58 2018
@@ -23,12 +23,16 @@ import java.io.IOException;
import java.lang.reflect.Method;
import java.net.BindException;
import java.net.URI;
+import java.util.Iterator;
+import java.util.Set;
import java.util.concurrent.Semaphore;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
+import javax.management.MBeanServer;
+import javax.management.ObjectInstance;
import junit.framework.TestCase;
@@ -274,6 +278,14 @@ public class ActiveMQSupport extends Tes
protected BrokerService createBroker(int port,boolean secondaryBroker) throws Exception {
String hostName = "localhost";
+ boolean enableJMX = true;
+ String jmxFlag = System.getProperty("uima.as.enable.jmx");
+
+ if ( secondaryBroker ) {
+ enableJMX = false;
+ } else if ( jmxFlag != null && jmxFlag.equalsIgnoreCase("false") ) {
+ enableJMX = false;
+ }
BrokerService broker =
BrokerFactory.createBroker(new URI("broker:()/" + hostName + "?persistent=false"));
tcpConnector = addConnector(broker, "tcp",port);
@@ -281,22 +293,20 @@ public class ActiveMQSupport extends Tes
Logger.getRootLogger().info(">>>> Starting Broker With URL:" + uri);
int defaultJMXPort = 1098;
if ( secondaryBroker ) {
- defaultJMXPort = 1097;
- broker.getManagementContext().setJmxDomainName(broker.getManagementContext().getJmxDomainName()+".test");
+ if ( enableJMX ) {
+ defaultJMXPort = 1097;
+ broker.getManagementContext().setJmxDomainName(broker.getManagementContext().getJmxDomainName()+".test");
+ }
tcpConnector.setName(DEFAULT_BROKER_URL_KEY_2);
} else {
tcpConnector.setName(DEFAULT_BROKER_URL_KEY);
}
- boolean enableJMX = true;
- String jmxFlag = System.getProperty("uima.as.enable.jmx");
- if ( jmxFlag != null && jmxFlag.equalsIgnoreCase("false") ) {
- enableJMX = false;
- }
if ( enableJMX ) {
broker.setUseJmx(enableJMX);
broker.getManagementContext().setConnectorPort(defaultJMXPort);
} else {
+ broker.setUseJmx(false);
System.out.println("************** ACTIVEMQ JMX Connector Not Enabled ****************");
}
PolicyEntry policy = new PolicyEntry();
@@ -320,7 +330,7 @@ public class ActiveMQSupport extends Tes
return broker;
}
protected BrokerService setupSecondaryBroker(boolean addProperty) throws Exception {
- System.setProperty("activemq.broker.jmx.domain","org.apache.activemq.test");
+ System.setProperty("activemq.broker.jmx.domain","org.apache.activemq.test2");
BrokerService broker2 = createBroker(DEFAULT_BROKER_PORT_2, true);
broker2.start();
@@ -345,6 +355,17 @@ public class ActiveMQSupport extends Tes
}
removeHttpConnector();
+// MBeanServer jmxServer =
+// broker.getManagementContext().getMBeanServer();
+// if ( jmxServer != null ) {
+// Set<ObjectInstance> instances = jmxServer.queryMBeans(null, null);
+// Iterator<ObjectInstance> iterator = instances.iterator();
+// while (iterator.hasNext()) {
+// ObjectInstance instance = iterator.next();
+// System.out.println("-------------- Object Name:t" + instance.getObjectName());
+//
+// }
+// }
broker.deleteAllMessages();
// cleanBroker(broker);
@@ -370,6 +391,7 @@ public class ActiveMQSupport extends Tes
cleanBroker(broker);
stopBroker();
}
+ System.out.println("..... Free Memory:"+Runtime.getRuntime().freeMemory()+" Total Memory:"+Runtime.getRuntime().totalMemory());
}
public class UimaASErrorHandler implements ErrorHandler {
Modified: uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java
URL: http://svn.apache.org/viewvc/uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java?rev=1849399&r1=1849398&r2=1849399&view=diff
==============================================================================
--- uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java (original)
+++ uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java Thu Dec 20 14:40:58 2018
@@ -727,6 +727,21 @@ public abstract class BaseTestSupport ex
if (aProcessStatus instanceof UimaASProcessStatus) {
casReferenceId = ((UimaASProcessStatus) aProcessStatus).getCasReferenceId();
parentCasReferenceId = ((UimaASProcessStatus) aProcessStatus).getParentCasReferenceId();
+ if ( ((UimaASProcessStatus) aProcessStatus).getServiceTargetId() != null ) {
+ // fetch id of the service where this CAS was processed
+ String serviceId = aCAS.getDocumentText();
+ if ( !((UimaASProcessStatus) aProcessStatus).getServiceTargetId().equals(serviceId)) {
+ System.out.println("Service Targeting Failed - Client received a reply from a wrong service - Expected:"
+ + ((UimaASProcessStatus) aProcessStatus).getServiceTargetId()
+ + " The CAS was Actually Processed by "+serviceId);
+ unexpectedException = true;
+ processCountLatch.countDown();
+
+ return;
+ } else {
+ System.out.println("Service Targeting Success - CAS Processed by Service:"+serviceId);
+ }
+ }
}
if (aProcessStatus.isException()) {
List list = aProcessStatus.getExceptions();
Modified: uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/NoOpAnnotatorWith2SecDelay.xml
URL: http://svn.apache.org/viewvc/uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/NoOpAnnotatorWith2SecDelay.xml?rev=1849399&r1=1849398&r2=1849399&view=diff
==============================================================================
--- uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/NoOpAnnotatorWith2SecDelay.xml (original)
+++ uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/NoOpAnnotatorWith2SecDelay.xml Thu Dec 20 14:40:58 2018
@@ -60,7 +60,7 @@
<nameValuePair>
<name>ProcessDelay</name>
<value>
- <integer>200000000</integer>
+ <integer>2000</integer>
</value>
</nameValuePair>
Modified: uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/NoOpAnnotatorWith5SecDelay.xml
URL: http://svn.apache.org/viewvc/uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/NoOpAnnotatorWith5SecDelay.xml?rev=1849399&r1=1849398&r2=1849399&view=diff
==============================================================================
--- uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/NoOpAnnotatorWith5SecDelay.xml (original)
+++ uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/NoOpAnnotatorWith5SecDelay.xml Thu Dec 20 14:40:58 2018
@@ -60,7 +60,7 @@
<nameValuePair>
<name>ProcessDelay</name>
<value>
- <integer>500000000</integer>
+ <integer>5000</integer>
</value>
</nameValuePair>
Modified: uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/SimpleTestAggregate.xml
URL: http://svn.apache.org/viewvc/uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/SimpleTestAggregate.xml?rev=1849399&r1=1849398&r2=1849399&view=diff
==============================================================================
--- uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/SimpleTestAggregate.xml (original)
+++ uima/uv3/uima-as-v3/trunk/uimaj-as-activemq/src/test/resources/descriptors/analysis_engine/SimpleTestAggregate.xml Thu Dec 20 14:40:58 2018
@@ -58,6 +58,12 @@
</languagesSupported>
</capability>
</capabilities>
+ <typePriorities>
+ <priorityList>
+ <type>uima.cas.TOP</type>
+ <type>uima.tcas.Annotation</type>
+ </priorityList>
+</typePriorities>
<operationalProperties>
<modifiesCas>true</modifiesCas>
<multipleDeploymentAllowed>true</multipleDeploymentAllowed>