You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2018/10/18 14:12:01 UTC
svn commit: r1844241 [1/4] - in /uima/uima-as/branches/uima-as-3:
aggregate-uima-as/ uima-as-parent/
uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/client/
uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/service/
uimaj-as-activ...
Author: cwiklik
Date: Thu Oct 18 14:12:00 2018
New Revision: 1844241
URL: http://svn.apache.org/viewvc?rev=1844241&view=rev
Log:
uima-5501
Added:
uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/resources/deployment/Deploy_AsyncAggregate.xml
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/Lifecycle.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AggregateAnalysisEngineComponent.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AnalysisEngineComponent.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/CasMultiplierComponent.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/CasMultiplierNature.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/ComponentCasPool.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/PrimitiveAnalysisEngineComponent.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/RemoteAnalysisEngineComponent.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TestGenerator.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TopLevelServiceComponent.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/dd/
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/dd/DeploymentDescriptorProcessor.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/factory/
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/factory/AnalysisEngineComponentFactory.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/AbstractUimaAsConsumer.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/ComponentConnector.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/ConnectorFactory.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/ListenerCallback.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsConnector.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsConsumer.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsEndpoint.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/UimaAsProducer.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/basic/
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/basic/BasicConnector.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/basic/DirectConnector.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/jms/
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/definition/connectors/jms/ActiveMqConnector.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/MessageProcessor.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/Origin.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/UimaAsMessage.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/message/UimaAsOrigin.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/UimaAsMessageProcessor.java
Modified:
uima/uima-as/branches/uima-as-3/aggregate-uima-as/pom.xml
uima/uima-as/branches/uima-as-3/uima-as-parent/pom.xml
uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngine_impl.java
uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/service/UimaASJmsService.java
uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/service/builder/UimaAsJmsServiceBuilder.java
uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/deployer/direct/UimaAsDirectServiceDeployer.java
uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/deployer/jms/UimaAsJmsServiceDeployer.java
uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/dispatcher/LocalDispatcher.java
uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASNoErrors.java
uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/UimaAsThreadFactory.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AnalysisEngineController.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/Endpoint.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/Endpoint_impl.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/UimaASService.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/AbstractUimaAsServiceBuilder.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/builder/UimaAsDirectServiceBuilder.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/AbstractUimaAsCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/CollectionProcessCompleteRequestCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/CollectionProcessCompleteResponseCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/CommandFactory.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/GetMetaRequestCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/GetMetaResponseCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/NoOpCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/PingRequestCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessChildCasRequestCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessChildCasResponseCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessInputCasRequestCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessInputCasResponseCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ProcessServiceInfoResponseCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/ReleaseCASRequestCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/service/command/StopRequestCommand.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/as/client/DirectListener.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/as/client/DirectMessage.java
uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/as/client/DirectMessageContext.java
uima/uima-as/branches/uima-as-3/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java
Modified: uima/uima-as/branches/uima-as-3/aggregate-uima-as/pom.xml
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/aggregate-uima-as/pom.xml?rev=1844241&r1=1844240&r2=1844241&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/aggregate-uima-as/pom.xml (original)
+++ uima/uima-as/branches/uima-as-3/aggregate-uima-as/pom.xml Thu Oct 18 14:12:00 2018
@@ -66,5 +66,6 @@
<module>../uimaj-as-jms</module>
<module>../aggregate-uima-as-eclipse-plugins</module>
<module>../uima-as-docbooks</module>
+ <module>../uimaj-as-connectors</module>
</modules>
</project>
Modified: uima/uima-as/branches/uima-as-3/uima-as-parent/pom.xml
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uima-as-parent/pom.xml?rev=1844241&r1=1844240&r2=1844241&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uima-as-parent/pom.xml (original)
+++ uima/uima-as/branches/uima-as-3/uima-as-parent/pom.xml Thu Oct 18 14:12:00 2018
@@ -190,7 +190,6 @@ ${uimaASNoticeText}
<scope>compile</scope>
</dependency>
-
<!-- Active MQ Stuff -->
<dependency>
<groupId>org.apache.activemq</groupId>
Modified: uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngine_impl.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngine_impl.java?rev=1844241&r1=1844240&r2=1844241&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngine_impl.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngine_impl.java Thu Oct 18 14:12:00 2018
@@ -58,23 +58,18 @@ import org.apache.activemq.command.Activ
import org.apache.activemq.command.ActiveMQTempDestination;
import org.apache.activemq.command.ActiveMQTextMessage;
import org.apache.uima.UIMAFramework;
-import org.apache.uima.UIMA_IllegalArgumentException;
import org.apache.uima.UIMA_IllegalStateException;
import org.apache.uima.aae.AsynchAECasManager_impl;
-import org.apache.uima.aae.UIMAEE_Constants;
-import org.apache.uima.aae.VersionCompatibilityChecker;
import org.apache.uima.aae.UimaASApplicationEvent.EventTrigger;
import org.apache.uima.aae.UimaASApplicationExitEvent;
import org.apache.uima.aae.UimaAsVersion;
+import org.apache.uima.aae.VersionCompatibilityChecker;
import org.apache.uima.aae.client.UimaASStatusCallbackListener;
import org.apache.uima.aae.client.UimaAsBaseCallbackListener;
import org.apache.uima.aae.client.UimaAsynchronousEngine;
import org.apache.uima.aae.controller.AnalysisEngineController;
import org.apache.uima.aae.controller.ControllerCallbackListener;
-import org.apache.uima.aae.controller.ControllerLifecycle;
import org.apache.uima.aae.controller.Endpoint;
-import org.apache.uima.aae.controller.UimacppServiceController;
-import org.apache.uima.aae.error.AsynchAEException;
import org.apache.uima.aae.error.UimaASMetaRequestTimeout;
import org.apache.uima.aae.jmx.JmxManager;
import org.apache.uima.aae.message.AsynchAEMessage;
@@ -84,9 +79,7 @@ import org.apache.uima.aae.service.UimaA
import org.apache.uima.aae.service.UimaAsServiceRegistry;
import org.apache.uima.aae.service.builder.UimaAsDirectServiceBuilder;
import org.apache.uima.adapter.jms.JmsConstants;
-import org.apache.uima.adapter.jms.activemq.ConnectionFactoryIniter;
import org.apache.uima.adapter.jms.activemq.SpringContainerDeployer;
-import org.apache.uima.adapter.jms.activemq.UimaEEAdminSpringContext;
import org.apache.uima.adapter.jms.message.PendingMessage;
import org.apache.uima.adapter.jms.message.PendingMessageImpl;
import org.apache.uima.adapter.jms.service.Dd2spring;
@@ -99,7 +92,6 @@ import org.apache.uima.as.deployer.UimaA
import org.apache.uima.as.dispatcher.LocalDispatcher;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.SerialFormat;
-import org.apache.uima.impl.UimaVersion;
import org.apache.uima.internal.util.UUIDGenerator;
import org.apache.uima.resource.Resource;
import org.apache.uima.resource.ResourceConfigurationException;
@@ -109,11 +101,8 @@ import org.apache.uima.resource.Resource
import org.apache.uima.resourceSpecifier.AnalysisEngineDeploymentDescriptionDocument;
import org.apache.uima.util.Level;
import org.apache.xmlbeans.XmlDocumentProperties;
-import org.apache.xmlbeans.XmlOptions;
-import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
-import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
@@ -171,12 +160,6 @@ public class BaseUIMAAsynchronousEngine_
protected volatile boolean stopped = false;
public BaseUIMAAsynchronousEngine_impl() {
this(Transport.JMS); // default
- /*
- super();
- UIMAFramework.getLogger(CLASS_NAME).log(Level.INFO,
- "UIMA Version " + UIMAFramework.getVersionString() +
- " UIMA-AS Version " + UimaAsVersion.getVersionString());
- */
}
public BaseUIMAAsynchronousEngine_impl(Transport transport) {
super();
@@ -393,7 +376,8 @@ public class BaseUIMAAsynchronousEngine_
}
public void stop() {
try {
- if ( brokerURI != null && !brokerURI.equals("java")) {
+ if ( isServiceRemote() ) {
+// if ( brokerURI != null && !brokerURI.equals("java")) {
if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(
Level.INFO)) {
UIMAFramework.getLogger(CLASS_NAME).logrb(Level.INFO,
@@ -475,8 +459,6 @@ public class BaseUIMAAsynchronousEngine_
}
protected boolean isServiceRemote() {
return transport.equals(Transport.JMS);
-// return (service instanceof UimaASJmsService);
-// return service == null;
}
private void startLocalConsumer(Map anApplicationContext) {
@@ -519,7 +501,7 @@ public class BaseUIMAAsynchronousEngine_
// start dispatcher in its own thread. It will fetch messages from a shared 'pendingMessageQueue'
LocalDispatcher dispatcher =
new LocalDispatcher(this, service, pendingMessageQueue);
- dispatchThread = new Thread(dispatcher);
+ dispatchThread = new Thread(dispatcher,"LocalDispatcher");
dispatchThread.start();
}
@@ -1231,9 +1213,21 @@ public class BaseUIMAAsynchronousEngine_
throw new AsynchAEException("*** ERROR deployment descriptor validation failed");
}
*/
+ // use xmlbeans framework to parse dd and create java beans for it
XmlDocumentProperties dp = dd.documentProperties();
System.out.println(dp.getSourceName());
-
+ // based on deployment options create relevant deployer
+ UimaAsServiceDeployer deployer = newServiceDeployer(dd, anApplicationContext);
+ // deploy (instantiate) uima-as service(s)
+ service = deployer.deploy(dd, anApplicationContext);
+
+ UimaAsServiceRegistry.getInstance().register(service);
+
+ return service.getId();
+
+ }
+
+ private UimaAsServiceDeployer newServiceDeployer(AnalysisEngineDeploymentDescriptionDocument dd, Map anApplicationContext) throws Exception {
String protocolOverride = null;
if ( anApplicationContext!= null && anApplicationContext.containsKey(UimaAsynchronousEngine.Protocol) ) {
protocolOverride = (String)anApplicationContext.get(UimaAsynchronousEngine.Protocol);
@@ -1247,7 +1241,7 @@ public class BaseUIMAAsynchronousEngine_
// the DD settings
if ( protocolOverride == null && providerOverride == null) {
// Use factory to create deployer instance for a given
- // protocol and provider defined in the DD
+ // protocol and provider
deployer =
ServiceDeployers.newDeployer(protocol(dd), provider(dd));
} else {
@@ -1272,15 +1266,8 @@ public class BaseUIMAAsynchronousEngine_
deployer =
ServiceDeployers.newDeployer(deploymentProtocol, deploymentProvider);
}
-
- service = deployer.deploy(dd, anApplicationContext);
-
- UimaAsServiceRegistry.getInstance().register(service);
-
- return service.getId();
-
+ return deployer;
}
-
protected UimaASService getServiceReference() {
return service;
}
Modified: uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/service/UimaASJmsService.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/service/UimaASJmsService.java?rev=1844241&r1=1844240&r2=1844241&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/service/UimaASJmsService.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/service/UimaASJmsService.java Thu Oct 18 14:12:00 2018
@@ -476,5 +476,10 @@ implements UimaASService {
public String getName() {
return name;
}
+ @Override
+ public int getScaleout() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
}
Modified: uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/service/builder/UimaAsJmsServiceBuilder.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/service/builder/UimaAsJmsServiceBuilder.java?rev=1844241&r1=1844240&r2=1844241&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/service/builder/UimaAsJmsServiceBuilder.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/service/builder/UimaAsJmsServiceBuilder.java Thu Oct 18 14:12:00 2018
@@ -18,20 +18,29 @@
*/
package org.apache.uima.adapter.jms.service.builder;
+import java.net.InetAddress;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ThreadFactory;
import java.util.UUID;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.ActiveMQPrefetchPolicy;
+import org.apache.activemq.command.ActiveMQDestination;
+import org.apache.activemq.command.ActiveMQQueue;
+import org.apache.uima.UIMAFramework;
import org.apache.uima.aae.InputChannel;
import org.apache.uima.aae.InputChannel.ChannelType;
+import org.apache.uima.aae.client.UimaAsynchronousEngine;
import org.apache.uima.aae.client.UimaAsynchronousEngine.Transport;
+import org.apache.uima.aae.component.TopLevelServiceComponent;
import org.apache.uima.aae.OutputChannel;
+import org.apache.uima.aae.UimaAsPriorityBasedThreadFactory;
import org.apache.uima.aae.UimaClassFactory;
import org.apache.uima.aae.controller.AggregateAnalysisEngineController;
import org.apache.uima.aae.controller.AnalysisEngineController;
@@ -46,12 +55,20 @@ import org.apache.uima.aae.error.handler
import org.apache.uima.aae.error.handler.GetMetaErrorHandler;
import org.apache.uima.aae.error.handler.ProcessCasErrorHandler;
import org.apache.uima.aae.handler.Handler;
+import org.apache.uima.aae.handler.HandlerBase;
+import org.apache.uima.aae.handler.input.MetadataRequestHandler_impl;
+import org.apache.uima.aae.handler.input.MetadataResponseHandler_impl;
+import org.apache.uima.aae.handler.input.ProcessRequestHandler_impl;
+import org.apache.uima.aae.handler.input.ProcessResponseHandler;
+import org.apache.uima.aae.service.AsynchronousUimaASService;
import org.apache.uima.aae.service.UimaASService;
import org.apache.uima.aae.service.builder.AbstractUimaAsServiceBuilder;
import org.apache.uima.aae.service.delegate.AnalysisEngineDelegate;
import org.apache.uima.aae.service.delegate.RemoteAnalysisEngineDelegate;
+import org.apache.uima.adapter.jms.JmsConstants;
import org.apache.uima.adapter.jms.activemq.JmsInputChannel;
import org.apache.uima.adapter.jms.activemq.JmsOutputChannel;
+import org.apache.uima.adapter.jms.activemq.PriorityMessageHandler;
import org.apache.uima.adapter.jms.activemq.TempDestinationResolver;
import org.apache.uima.adapter.jms.activemq.UimaDefaultMessageListenerContainer;
import org.apache.uima.adapter.jms.service.UimaASJmsService;
@@ -65,6 +82,7 @@ import org.apache.uima.resourceSpecifier
import org.apache.uima.resourceSpecifier.CollectionProcessCompleteErrorsType;
import org.apache.uima.resourceSpecifier.ProcessCasErrorsType;
import org.apache.uima.resourceSpecifier.ServiceType;
+import org.apache.uima.util.Level;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
public class UimaAsJmsServiceBuilder extends AbstractUimaAsServiceBuilder{
@@ -103,6 +121,276 @@ public class UimaAsJmsServiceBuilder ext
}
}
+ /*** NEW CODE */
+
+ public UimaASService build(TopLevelServiceComponent topLevelComponent, ControllerCallbackListener callback)
+ throws Exception {
+ UimaASService service = null;
+
+ // is this the only one resource specifier type supported by the current uima-as?
+ if (topLevelComponent.getResourceSpecifier() instanceof AnalysisEngineDescription) {
+ AnalysisEngineDescription aeDescriptor =
+ (AnalysisEngineDescription) topLevelComponent.getResourceSpecifier();
+ String endpoint = resolvePlaceholder(topLevelComponent.getEndpoint().getEndpoint());
+ // Create a Top Level Service (TLS) wrapper. This wrapper may contain
+ // references to multiple TLS service instances if the TLS is scaled
+ // up.
+ service = new UimaASJmsService().
+ withName(aeDescriptor.
+ getAnalysisEngineMetaData().getName())
+ .withResourceSpecifier(aeDescriptor).
+ withBrokerURL(topLevelComponent.getEndpoint().getServerURI()).
+ withInputQueue(endpoint);
+
+ this.buildAndDeploy(topLevelComponent, service, callback);
+
+
+ }
+ return service;
+ }
+
+ public UimaASService buildAndDeploy(TopLevelServiceComponent topLevelComponent, UimaASService service, ControllerCallbackListener callback) throws Exception {
+ // create ResourceManager, CasManager, and InProcessCache
+ initialize(service, topLevelComponent.getComponentCasPool(), Transport.Java);
+
+ AnalysisEngineController topLevelController =
+ createController(topLevelComponent, callback, service.getId());
+
+ service.withInProcessCache(super.cache);
+ System.setProperty("BrokerURI", "Direct");
+ configureTopLevelService(topLevelController, service /*, topLevelComponent.getScaleout() */);
+ return service;
+
+ }
+
+
+ private void configureTopLevelService(AnalysisEngineController topLevelController, UimaASService service) throws Exception {
+ // First create Connection Factory. This is needed by
+ // JMS listeners.
+ createConnectionFactory();
+ // counts number of initialized threads
+ CountDownLatch latchToCountNumberOfInitedThreads =
+ new CountDownLatch(service.getScaleout());
+ // counts number of terminated threads
+ CountDownLatch latchToCountNumberOfTerminatedThreads =
+ new CountDownLatch(service.getScaleout());
+ OutputChannel outputChannel;
+ ;
+ // Add one instance of JmsOutputChannel
+ if ( topLevelController.getOutputChannel(ENDPOINT_TYPE.JMS) == null ) {
+ outputChannel = new JmsOutputChannel();
+ outputChannel.setController(topLevelController);
+ outputChannel.setServerURI(brokerURL);
+ outputChannel.setServiceInputEndpoint(service.getEndpoint());
+ topLevelController.addOutputChannel(outputChannel);
+ } else {
+ outputChannel = (JmsOutputChannel)topLevelController.getOutputChannel(ENDPOINT_TYPE.JMS);
+ outputChannel.setServiceInputEndpoint(service.getEndpoint());
+ }
+ JmsInputChannel inputChannel;
+ // Add one instance of JmsInputChannel
+ if ( topLevelController.getInputChannel(ENDPOINT_TYPE.JMS) == null ) {
+ inputChannel = new JmsInputChannel(ChannelType.REQUEST_REPLY);
+ topLevelController.setInputChannel(inputChannel);
+ } else {
+ inputChannel = (JmsInputChannel)topLevelController.getInputChannel(ENDPOINT_TYPE.JMS);
+ }
+
+ inputChannel.setController(topLevelController);
+
+ inputChannel.setMessageHandler(getMessageHandler(topLevelController));
+
+ // Create service JMS listeners to handle Process, GetMeta and optional FreeCas
+ // requests.
+
+ // listener to handle process CAS requests
+ UimaDefaultMessageListenerContainer processListener
+ = createListener(Type.ProcessCAS, service.getScaleout(), inputChannel, outputChannel);
+ inputChannel.addListenerContainer(processListener);
+
+
+
+
+
+
+ String targetStringSelector = "";
+ if ( System.getProperty(UimaAsynchronousEngine.TargetSelectorProperty) != null ) {
+ targetStringSelector = System.getProperty(UimaAsynchronousEngine.TargetSelectorProperty);
+ } else {
+ // the default selector is IP:PID
+ String ip = InetAddress.getLocalHost().getHostAddress();
+ targetStringSelector = ip+":"+topLevelController.getPID();
+ }
+ UimaDefaultMessageListenerContainer targetedListener =
+ new UimaDefaultMessageListenerContainer();
+ targetedListener.setType(Type.Target);
+ // setup jms selector
+ if ( topLevelController.isCasMultiplier()) {
+ targetedListener.setMessageSelector(UimaAsynchronousEngine.TargetSelectorProperty+" = '"+targetStringSelector+"' AND"+UimaDefaultMessageListenerContainer.CM_PROCESS_SELECTOR_SUFFIX);//(Command=2000 OR Command=2002)");
+ } else {
+ targetedListener.setMessageSelector(UimaAsynchronousEngine.TargetSelectorProperty+" = '"+targetStringSelector+"' AND"+UimaDefaultMessageListenerContainer.PROCESS_SELECTOR_SUFFIX);//(Command=2000 OR Command=2002)");
+ }
+
+ // use shared ConnectionFactory
+ targetedListener.setConnectionFactory(processListener.getConnectionFactory());
+ // mark the listener as a 'Targeted' listener
+ targetedListener.setTargetedListener();
+ targetedListener.setController(topLevelController);
+ // there will only be one delivery thread. Its job will be to
+ // add a targeted message to a BlockingQueue. Such thread will block
+ // in an enqueue if a dequeue is not available. This will be prevent
+ // the overwhelming the service with messages.
+ ThreadPoolTaskExecutor threadExecutor = new ThreadPoolTaskExecutor();
+ threadExecutor.setCorePoolSize(1);
+ threadExecutor.setMaxPoolSize(1);
+ targetedListener.setTaskExecutor(threadExecutor);
+ targetedListener.setConcurrentConsumers(1);
+ if ( processListener.getMessageListener() instanceof PriorityMessageHandler ) {
+ // the targeted listener will use the same message handler as the
+ // Process listener. This handler will add a message wrapper
+ // to enable prioritizing messages.
+ targetedListener.setMessageListener(processListener.getMessageListener());
+ }
+ // Same queue as the Process queue
+ targetedListener.setDestination(processListener.getDestination());
+ //registerListener(targetedListener);
+ // targetedListener.afterPropertiesSet();
+ threadExecutor.initialize();
+
+ //targetedListener.initialize();
+ //targetedListener.start();
+ if (UIMAFramework.getLogger(getClass()).isLoggable(Level.INFO)) {
+ UIMAFramework.getLogger(getClass()).logrb(Level.INFO, getClass().getName(),
+ "createListenerForTargetedMessages", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
+ "UIMAJMS_TARGET_LISTENER__INFO",
+ new Object[] {targetedListener.getMessageSelector(), topLevelController.getComponentName() });
+ }
+
+ inputChannel.addListenerContainer(targetedListener);
+
+ //listeners.add(processListener);
+ // listener to handle GetMeta requests
+ UimaDefaultMessageListenerContainer getMetaListener
+ = createListener(Type.GetMeta, 1);
+ inputChannel.addListenerContainer(getMetaListener);
+ //listeners.add(getMetaListener);
+
+ if ( topLevelController.isCasMultiplier()) {
+ // listener to handle Free CAS requests
+ UimaDefaultMessageListenerContainer freeCasListener
+ = createListener(Type.FreeCAS, 1);
+ inputChannel.addListenerContainer(freeCasListener);
+ //listeners.add(freeCasListener);
+ }
+ }
+
+ private UimaDefaultMessageListenerContainer createListener(Type type, int consumerCount, InputChannel inputChannel, OutputChannel outputChannel) throws Exception{
+ PriorityMessageHandler h = null;
+
+ ThreadPoolTaskExecutor jmsListenerThreadExecutor =
+ new ThreadPoolTaskExecutor();
+
+ if ( Type.ProcessCAS.equals(type)) {
+ outputChannel.setServerURI(getBrokerURL());
+ if ( controller.isPrimitive() ) {
+ h = new PriorityMessageHandler(consumerCount);
+ ThreadPoolTaskExecutor threadExecutor =
+ new ThreadPoolTaskExecutor();
+ controller.setThreadFactory(threadExecutor);
+
+ CountDownLatch latchToCountNumberOfTerminatedThreads =
+ new CountDownLatch(consumerCount);
+ // Create a Custom Thread Factory. Provide it with an instance of
+ // PrimitiveController so that every thread can call it to initialize
+ // the next available instance of a AE.
+ ThreadFactory tf =
+ new UimaAsPriorityBasedThreadFactory(Thread.currentThread().
+ getThreadGroup(), controller, latchToCountNumberOfTerminatedThreads)
+ .withQueue(h.getQueue()).withChannel(controller.getInputChannel(ENDPOINT_TYPE.JMS));
+
+
+ ((UimaAsPriorityBasedThreadFactory)tf).setDaemon(true);
+ // This ThreadExecutor will use custom thread factory instead of default one
+ threadExecutor.setThreadFactory(tf);
+ threadExecutor.setCorePoolSize(consumerCount);
+ threadExecutor.setMaxPoolSize(consumerCount);
+
+ // Initialize the thread pool
+ threadExecutor.initialize();
+
+ // Make sure all threads are started. This forces each thread to call
+ // PrimitiveController to initialize the next instance of AE
+ threadExecutor.getThreadPoolExecutor().prestartAllCoreThreads();
+ // This ThreadExecutor will use custom thread factory instead of default one
+
+ }
+
+ }
+ jmsListenerThreadExecutor.setCorePoolSize(consumerCount);
+ jmsListenerThreadExecutor.setMaxPoolSize(consumerCount);
+ jmsListenerThreadExecutor.initialize();
+
+
+// threadExecutor.setCorePoolSize(consumerCount);
+// threadExecutor.setMaxPoolSize(consumerCount);
+
+ // destination can be NULL if this listener is meant for a
+ // a temp queue. Such destinations are created on demand
+ // using destination resolver which is plugged into the
+ // listener. The resolver creates a temp queue lazily on
+ // listener startup.
+ ActiveMQDestination destination = null;
+
+ if ( !isTempQueueListener(type) ) {
+ destination = new ActiveMQQueue(queueName);
+ }
+ JmsMessageListenerBuilder listenerBuilder =
+ new JmsMessageListenerBuilder();
+
+ UimaDefaultMessageListenerContainer messageListener =
+ listenerBuilder.withController(controller)
+ .withType(type)
+ .withConectionFactory(factory)
+ .withThreadPoolExecutor(jmsListenerThreadExecutor)
+ .withConsumerCount(consumerCount)
+ .withInputChannel(inputChannel)
+ .withPriorityMessageHandler(h)
+ .withSelector(getSelector(type))
+ .withDestination(destination)
+ .build();
+ messageListener.setReceiveTimeout(500);
+// messageListener.setMessageListener(h);
+ return messageListener;
+ }
+ public HandlerBase getMessageHandler(AnalysisEngineController controller) {
+ MetadataRequestHandler_impl metaHandler = new MetadataRequestHandler_impl("MetadataRequestHandler");
+ metaHandler.setController(controller);
+ ProcessRequestHandler_impl processHandler = new ProcessRequestHandler_impl("ProcessRequestHandler");
+ processHandler.setController(controller);
+ metaHandler.setDelegate(processHandler);
+ if ( !controller.isPrimitive() ) {
+ MetadataResponseHandler_impl metaResponseHandler =
+ new MetadataResponseHandler_impl("MetadataResponseHandler");
+ metaResponseHandler.setController(controller);
+ processHandler.setDelegate(metaResponseHandler);
+
+ ProcessResponseHandler processResponseHandler =
+ new ProcessResponseHandler("ProcessResponseHandler");
+ processResponseHandler.setController(controller);
+ metaResponseHandler.setDelegate(processResponseHandler);
+
+ }
+ return metaHandler;
+ }
+
+
+
+
+ /* OLD CODE */
+
+
+
+
public static InputChannel createInputChannel(ChannelType type) {
return new JmsInputChannel(type);
@@ -388,7 +676,10 @@ public class UimaAsJmsServiceBuilder ext
}
public UimaASService build(AnalysisEngineDeploymentDescriptionDocument dd, ControllerCallbackListener callback)
- throws Exception {
+ throws Exception {
+
+
+
// get the top level AnalysisEngine descriptor
String aeDescriptorPath = getAEDescriptorPath(dd);
// parse AE descriptor
Modified: uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/deployer/direct/UimaAsDirectServiceDeployer.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/deployer/direct/UimaAsDirectServiceDeployer.java?rev=1844241&r1=1844240&r2=1844241&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/deployer/direct/UimaAsDirectServiceDeployer.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/deployer/direct/UimaAsDirectServiceDeployer.java Thu Oct 18 14:12:00 2018
@@ -23,6 +23,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
+import org.apache.uima.aae.component.TopLevelServiceComponent;
+import org.apache.uima.aae.component.dd.DeploymentDescriptorProcessor;
import org.apache.uima.aae.service.UimaASService;
import org.apache.uima.aae.service.builder.UimaAsDirectServiceBuilder;
import org.apache.uima.as.deployer.AbstractUimaASDeployer;
@@ -42,7 +44,21 @@ public class UimaAsDirectServiceDeployer
Map<String, String> deploymentProperties) throws Exception {
UimaASService uimaAsService = null;
try {
- uimaAsService = new UimaAsDirectServiceBuilder().build(dd, this);
+ DeploymentDescriptorProcessor ddProcessor =
+ new DeploymentDescriptorProcessor(dd);
+
+ // process dd producing TopLevelServiceComponent. If the dd
+ // is an aggregate, the component object will include a tree
+ // of delegates. It basically combines information from both
+ // a dd and resource specifier for all parts of the pipeline
+ // aggregating instances of AnalysisEngineComponent created
+ // for every delegate.
+ TopLevelServiceComponent topLevelComponent =
+ ddProcessor.newComponent();
+
+ // create an instance of a service for the client to use
+ uimaAsService = new UimaAsDirectServiceBuilder().build(topLevelComponent, this);
+
// start listeners
uimaAsService.start();
// block until all internal components initialize and are ready to process
Modified: uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/deployer/jms/UimaAsJmsServiceDeployer.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/deployer/jms/UimaAsJmsServiceDeployer.java?rev=1844241&r1=1844240&r2=1844241&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/deployer/jms/UimaAsJmsServiceDeployer.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/deployer/jms/UimaAsJmsServiceDeployer.java Thu Oct 18 14:12:00 2018
@@ -21,7 +21,10 @@ package org.apache.uima.as.deployer.jms;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
+import org.apache.uima.aae.component.TopLevelServiceComponent;
+import org.apache.uima.aae.component.dd.DeploymentDescriptorProcessor;
import org.apache.uima.aae.service.UimaASService;
+import org.apache.uima.aae.service.builder.UimaAsDirectServiceBuilder;
import org.apache.uima.adapter.jms.service.builder.UimaAsJmsServiceBuilder;
import org.apache.uima.as.deployer.AbstractUimaASDeployer;
import org.apache.uima.resourceSpecifier.AnalysisEngineDeploymentDescriptionDocument;
@@ -37,6 +40,33 @@ public class UimaAsJmsServiceDeployer ex
Map<String, String> deploymentProperties) throws Exception {
UimaASService uimaAsService = null;
+
+ try {
+ DeploymentDescriptorProcessor ddProcessor =
+ new DeploymentDescriptorProcessor(dd);
+
+ // process dd producing TopLevelServiceComponent. If the dd
+ // is an aggregate, the component object will include a tree
+ // of delegates. It basically combines information from both
+ // a dd and resource specifier for all parts of the pipeline
+ // aggregating instances of AnalysisEngineComponent created
+ // for every delegate.
+ TopLevelServiceComponent topLevelComponent =
+ ddProcessor.newComponent();
+
+ // create an instance of a service for the client to use
+ //uimaAsService = new UimaAsDirectServiceBuilder().build(topLevelComponent, this);
+ uimaAsService = new UimaAsJmsServiceBuilder().build(topLevelComponent, this);
+ // start listeners
+ uimaAsService.start();
+ // block until all internal components initialize and are ready to process
+ waitUntilInitialized();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw e;
+ }
+ /*
try {
uimaAsService = new UimaAsJmsServiceBuilder().build(dd, this);
// start listeners. Nothing happens unless JMS listeners start
@@ -57,6 +87,7 @@ public class UimaAsJmsServiceDeployer ex
throw e;
}
+ */
return uimaAsService;
}
Modified: uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/dispatcher/LocalDispatcher.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/dispatcher/LocalDispatcher.java?rev=1844241&r1=1844240&r2=1844241&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/dispatcher/LocalDispatcher.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/main/java/org/apache/uima/as/dispatcher/LocalDispatcher.java Thu Oct 18 14:12:00 2018
@@ -99,7 +99,7 @@ public class LocalDispatcher implements
while (client.isRunning()) {
PendingMessage pm = null;
try {
- System.out.println("LocalDispatcher.run()- waiting for new message ...");
+ System.out.println("LocalDispatcher.run()- waiting for new message ... queue hashcode:"+messageQueue.hashCode());
pm = messageQueue.take();
System.out.println("LocalDispatcher.run()-got new message to dispatch");
} catch (InterruptedException e) {
@@ -122,9 +122,12 @@ public class LocalDispatcher implements
}
}
try {
+ System.out.println(".................... calling LocalDispatch.beforeDispatch()");
client.beforeDispatch(pm);
+ System.out.println(".................... calling LocalDispatch.dispatch()");
dispatch(pm);
+ System.out.println(".................... LocalDispatch.dispatch() returned");
} catch (Exception e) {
if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.WARNING)) {
UIMAFramework.getLogger(CLASS_NAME).logrb(Level.WARNING, getClass().getName(), "run",
Modified: uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASNoErrors.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASNoErrors.java?rev=1844241&r1=1844240&r2=1844241&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASNoErrors.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASNoErrors.java Thu Oct 18 14:12:00 2018
@@ -51,6 +51,7 @@ import org.apache.uima.aae.service.UimaA
import org.apache.uima.aae.service.UimaAsServiceRegistry;
import org.apache.uima.adapter.jms.JmsConstants;
import org.apache.uima.adapter.jms.activemq.JmsInputChannel;
+import org.apache.uima.adapter.jms.client.BaseUIMAAsynchronousEngine_impl;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.TypeSystem;
import org.apache.uima.collection.CollectionReader;
@@ -129,12 +130,16 @@ public class TestUimaASNoErrors extends
@Test
public void testDeploy() throws Exception {
+
UimaAsynchronousEngine uimaAS = getClient(Transport.Java);
Map ctx = new HashMap<>();
-
+ ctx.put(UimaAsynchronousEngine.Provider,"java");
+ ctx.put(UimaAsynchronousEngine.Protocol,"java");
+/*
ctx.put(UimaAsynchronousEngine.Provider,"activemq");
ctx.put(UimaAsynchronousEngine.Protocol,"jms");
+ */
uimaAS.deploy(relativePath + "/Deploy_NoOpAnnotator.xml", ctx);
runTest2(null, uimaAS, getMasterConnectorURI(broker),
@@ -143,6 +148,21 @@ public class TestUimaASNoErrors extends
uimaAS.stop();
}
+ @Test
+ public void testJmsServiceAdapter() 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_SyncAggregateWithJmsService.xml");
+ runTest(null, eeUimaEngine, String.valueOf(getMasterConnectorURI(broker)), "TopLevelTaeQueue",
+ 0, PROCESS_LATCH);
+
+ } catch( Exception e ) {
+ throw e;
+ }
+ }
/*
*
*
@@ -1419,6 +1439,27 @@ public class TestUimaASNoErrors extends
uimaAsClient.stop();
}
+ @Test
+ public void testDeployAsyncAggregateServiceOverJava() throws Exception {
+ testDeployAsyncAggregateService(Transport.Java);
+ }
+
+ public void testDeployAsyncAggregateService(Transport transport) throws Exception {
+ System.out.println("-------------- testDeployAggregateService -------------");
+ UimaAsynchronousEngine uimaAsClient = getClient(transport);
+ System.setProperty(JmsConstants.SessionTimeoutOverride, "2500000");
+ Map<String, Object> appCtx = defaultContext("TopLevelTaeQueue");
+ deployTopLevelService(appCtx, transport, uimaAsClient, relativePath + "/Deploy_AsyncAggregate.xml",
+ "TopLevelTaeQueue");
+
+ appCtx.put(UimaAsynchronousEngine.Timeout, 0);
+ appCtx.put(UimaAsynchronousEngine.GetMetaTimeout, 0);
+
+ addExceptionToignore(org.apache.uima.aae.error.UimaEEServiceException.class);
+
+ runTest(appCtx, uimaAsClient, "tcp://localhost:61616", "TopLevelTaeQueue", 200, PROCESS_LATCH);
+ }
+
@Test
public void testDeployAggregateServiceOverJava() throws Exception {
testDeployAggregateService(Transport.Java);
@@ -1433,10 +1474,12 @@ public class TestUimaASNoErrors extends
//BaseUIMAAsynchronousEngine_impl eeUimaEngine = new BaseUIMAAsynchronousEngine_impl();
- // System.setProperty("BrokerURL", "tcp::/localhost:61616");
+ System.setProperty("NoOpBroker", "tcp::/localhost:61616");
System.setProperty(JmsConstants.SessionTimeoutOverride, "2500000");
// deployService(eeUimaEngine, relativePath + "/Deploy_NoOpAnnotator.xml");
- Map<String, Object> appCtx = defaultContext("TopLevelTaeQueue");
+ deployJmsService(uimaAsClient, relativePath + "/Deploy_NoOpAnnotatorUsingPlaceholder.xml");
+
+ Map<String, Object> appCtx = defaultContext("TopLevelTaeQueue");
deployTopLevelService(appCtx, transport, uimaAsClient, relativePath + "/Deploy_AggregateAnnotator.xml","TopLevelTaeQueue");
// deployJavaService(eeUimaEngine, relativePath + "/Deploy_AggregateAnnotator.xml");
Modified: uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java?rev=1844241&r1=1844240&r2=1844241&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java Thu Oct 18 14:12:00 2018
@@ -659,6 +659,7 @@ public abstract class BaseTestSupport ex
}
// Send CPC
+ System.out.println("............. Sending CPC");
uimaAsClient.collectionProcessingComplete();
}
}
Added: uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/resources/deployment/Deploy_AsyncAggregate.xml
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/resources/deployment/Deploy_AsyncAggregate.xml?rev=1844241&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/resources/deployment/Deploy_AsyncAggregate.xml (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-activemq/src/test/resources/deployment/Deploy_AsyncAggregate.xml Thu Oct 18 14:12:00 2018
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ ***************************************************************
+ * 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.
+ ***************************************************************
+ -->
+
+<analysisEngineDeploymentDescription xmlns="http://uima.apache.org/resourceSpecifier">
+
+ <name>Top Level TAE</name>
+ <description></description>
+
+ <deployment protocol="${Protocol}" provider="${Provider}">
+ <casPool numberOfCASes="5" initialFsHeapSize="500"/>
+ <service>
+ <inputQueue endpoint="TopLevelTaeQueue" brokerURL="${DefaultBrokerURL}" prefetch="1"/>
+ <topDescriptor>
+ <!--import location="../descriptors/analysis_engine/SimpleTestAggregate.xml"/-->
+ <import location="../descriptors/analysis_engine/ComplexNestedAggregate_TAE.xml"/>
+ </topDescriptor>
+ <analysisEngine async="true">
+ <!--delegates>
+
+ <analysisEngine key="TestMultiplier">
+ <casMultiplier poolSize="5"/>
+ </analysisEngine>
+
+ </delegates-->
+ </analysisEngine>
+ </service>
+ </deployment>
+
+</analysisEngineDeploymentDescription>
\ No newline at end of file
Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/Lifecycle.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/Lifecycle.java?rev=1844241&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/Lifecycle.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/Lifecycle.java Thu Oct 18 14:12:00 2018
@@ -0,0 +1,6 @@
+package org.apache.uima.aae;
+
+public interface Lifecycle {
+ public void start() throws Exception;
+ public void stop() throws Exception;
+}
Modified: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/UimaAsThreadFactory.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/UimaAsThreadFactory.java?rev=1844241&r1=1844240&r2=1844241&view=diff
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/UimaAsThreadFactory.java (original)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/UimaAsThreadFactory.java Thu Oct 18 14:12:00 2018
@@ -27,7 +27,7 @@ import org.apache.uima.UIMAFramework;
import org.apache.uima.aae.controller.BaseAnalysisEngineController.ServiceState;
import org.apache.uima.aae.controller.PrimitiveAnalysisEngineController;
import org.apache.uima.aae.controller.PrimitiveAnalysisEngineController_impl;
-import org.apache.uima.as.client.DirectListener.DirectListenerCallback;
+import org.apache.uima.aae.definition.connectors.ListenerCallback;
import org.apache.uima.util.Level;
/**
@@ -60,7 +60,7 @@ public class UimaAsThreadFactory impleme
private CountDownLatch latchToCountNumberOfInitedThreads;
- private DirectListenerCallback callback = null;
+ private ListenerCallback callback = null;
public UimaAsThreadFactory() {
@@ -79,7 +79,7 @@ public class UimaAsThreadFactory impleme
this.latchToCountNumberOfInitedThreads = latchToCountNumberOfInitedThreads;
}
- public UimaAsThreadFactory withCallback(DirectListenerCallback c) {
+ public UimaAsThreadFactory withCallback(ListenerCallback c) {
callback = c;
return this;
}
@@ -163,6 +163,7 @@ public class UimaAsThreadFactory impleme
// TaskExecutor is terminated.
r.run();
} catch (Throwable e) {
+ e.printStackTrace();
if ( !(e instanceof Exception) ) {
// try to log. If this is OOM, logging may not succeed and we
// get another OOM.
Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AggregateAnalysisEngineComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AggregateAnalysisEngineComponent.java?rev=1844241&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AggregateAnalysisEngineComponent.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AggregateAnalysisEngineComponent.java Thu Oct 18 14:12:00 2018
@@ -0,0 +1,23 @@
+package org.apache.uima.aae.component;
+
+import org.apache.uima.aae.definition.connectors.basic.BasicConnector;
+import org.apache.uima.resource.ResourceSpecifier;
+
+public class AggregateAnalysisEngineComponent extends AnalysisEngineComponent {
+
+ public AggregateAnalysisEngineComponent(String key, ResourceSpecifier rs) {
+ super(key, rs);
+ }
+
+ @Override
+ public boolean isPrimitive() {
+ return false;
+ }
+
+ @Override
+ public Object getConnector() {
+ return new BasicConnector();
+ }
+
+
+}
Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AnalysisEngineComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AnalysisEngineComponent.java?rev=1844241&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AnalysisEngineComponent.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/AnalysisEngineComponent.java Thu Oct 18 14:12:00 2018
@@ -0,0 +1,147 @@
+package org.apache.uima.aae.component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.uima.aae.controller.DelegateEndpoint;
+import org.apache.uima.aae.controller.Endpoint;
+import org.apache.uima.aae.controller.DelegateEndpoint.Builder;
+import org.apache.uima.resource.ResourceSpecifier;
+
+public abstract class AnalysisEngineComponent {
+
+ protected List<AnalysisEngineComponent> delegateList = new ArrayList<>();
+ private boolean isCasMultiplier = false;
+ private boolean scaleable = false;
+ private boolean async = false;
+ private String componentKey;
+ private int scaleout = 1;
+ private ResourceSpecifier resourceSpecifier;
+ private CasMultiplierNature casMultiplier;
+ private int requestThreadPoolSize=1;
+ private int responseThreadPoolSize=1;
+ private Endpoint endpoint = null;
+
+
+ public abstract Object getConnector();
+
+ public AnalysisEngineComponent() {}
+ public AnalysisEngineComponent(String key, ResourceSpecifier rs) {
+ componentKey = key;
+ resourceSpecifier = rs;
+ }
+
+
+ public CasMultiplierNature getCasMultiplierNature() {
+ return casMultiplier;
+ }
+ public ResourceSpecifier getResourceSpecifier() {
+ return resourceSpecifier;
+ }
+
+ public boolean isScaleable() {
+ return scaleable;
+ }
+
+ public int getScaleout() {
+ return scaleout;
+ }
+
+ public boolean isCasMultiplier() {
+ return isCasMultiplier;
+ }
+ public boolean isAsync() {
+ return async;
+ }
+ public boolean isCasConsumer() {
+ return false;
+ }
+
+ public boolean isPrimitive() {
+ return true;
+ }
+
+ public boolean isRemote() {
+ return false;
+ }
+ public String getKey() {
+ return componentKey;
+
+ }
+ public Endpoint getEndpoint() {
+ if ( endpoint == null ) {
+ String serviceEndpoint = getKey();
+ String server = "java";
+ if ( this instanceof RemoteAnalysisEngineComponent ) {
+ serviceEndpoint = ((RemoteAnalysisEngineComponent)this).getEndpointName();
+ server = ((RemoteAnalysisEngineComponent)this).getServer();
+ }
+ endpoint = new DelegateEndpoint(). new Builder().
+ withDelegateKey(getKey()).
+ withEndpointName(serviceEndpoint).
+ setRemote(isRemote()).
+ setServerURI(server).
+ withResourceSpecifier(getResourceSpecifier()).
+ build();
+ if ( isCasMultiplier ) {
+ endpoint.setIsCasMultiplier(true);
+ endpoint.setProcessParentLast(casMultiplier.processParentLast());
+ if ( casMultiplier.getPoolSize() > 1) {
+ endpoint.setShadowCasPoolSize(casMultiplier.getPoolSize());
+ }
+ if ( casMultiplier.getInitialFsHeapSize() > 0 ) {
+ endpoint.setInitialFsHeapSize( (int) casMultiplier.getInitialFsHeapSize());
+ }
+ endpoint.setDisableJCasCache(casMultiplier.disableJCasCache());
+ }
+ if ( isRemote()) {
+ endpoint.setMetadataRequestTimeout(((RemoteAnalysisEngineComponent)this).getMetaTimeout());
+ endpoint.setProcessRequestTimeout(((RemoteAnalysisEngineComponent)this).getProcessTimeout());
+ endpoint.setCollectionProcessCompleteTimeout(((RemoteAnalysisEngineComponent)this).getCollectionProcessCompleteTimeout());
+ }
+ }
+
+ return endpoint;
+ }
+ public void add(AnalysisEngineComponent component) {
+ delegateList.add(component);
+ }
+ public AnalysisEngineComponent getChild(int index) {
+ return delegateList.get(index);
+ }
+ public List<AnalysisEngineComponent> getChildren() {
+ return delegateList;
+ }
+ public AnalysisEngineComponent enableScaleout() {
+ scaleable = true;
+ return this;
+ }
+ public AnalysisEngineComponent withScaleout(int howManyInstances) {
+ scaleout = howManyInstances;
+ return this;
+ }
+
+ public AnalysisEngineComponent withRequestThreadPoolSize(int howManyThreads) {
+ requestThreadPoolSize = howManyThreads;
+ return this;
+ }
+
+ public AnalysisEngineComponent withReplyThreadPoolSize(int howManyThreads) {
+ responseThreadPoolSize = howManyThreads;
+ return this;
+ }
+
+ public AnalysisEngineComponent enableCasMultiplierNatureWith(CasMultiplierNature cm) {
+ this.casMultiplier = cm;
+ return this;
+ }
+ public AnalysisEngineComponent enableCasMultipler() {
+ isCasMultiplier = true;
+ return this;
+ }
+ public AnalysisEngineComponent enableAsync() {
+ async = true;
+ return this;
+ }
+
+}
Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/CasMultiplierComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/CasMultiplierComponent.java?rev=1844241&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/CasMultiplierComponent.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/CasMultiplierComponent.java Thu Oct 18 14:12:00 2018
@@ -0,0 +1,35 @@
+package org.apache.uima.aae.component;
+
+public class CasMultiplierComponent implements CasMultiplierNature {
+ boolean disableJCasCache;
+ long initialFsHeapSize;
+ int casPoolSize;
+ boolean processParentLast;
+
+ public CasMultiplierComponent(boolean disableJCasCache,long initialFsHeapSize,int casPoolSize,boolean processParentLast ) {
+ this.disableJCasCache = disableJCasCache;
+ this.initialFsHeapSize = initialFsHeapSize;
+ this.casPoolSize = casPoolSize;
+ this.processParentLast = processParentLast;
+ }
+ @Override
+ public boolean disableJCasCache() {
+ return false;
+ }
+
+ @Override
+ public long getInitialFsHeapSize() {
+ return 0;
+ }
+
+ @Override
+ public int getPoolSize() {
+ return 0;
+ }
+
+ @Override
+ public boolean processParentLast() {
+ return false;
+ }
+
+}
Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/CasMultiplierNature.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/CasMultiplierNature.java?rev=1844241&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/CasMultiplierNature.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/CasMultiplierNature.java Thu Oct 18 14:12:00 2018
@@ -0,0 +1,8 @@
+package org.apache.uima.aae.component;
+
+public interface CasMultiplierNature {
+ boolean disableJCasCache();
+ long getInitialFsHeapSize();
+ int getPoolSize();
+ boolean processParentLast();
+}
Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/ComponentCasPool.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/ComponentCasPool.java?rev=1844241&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/ComponentCasPool.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/ComponentCasPool.java Thu Oct 18 14:12:00 2018
@@ -0,0 +1,22 @@
+package org.apache.uima.aae.component;
+
+public class ComponentCasPool {
+ boolean disableJCasCache;
+ int initialHeapSize=1000;
+ int poolSize=1;
+ public ComponentCasPool(boolean disableJCasCache, int initialHeapSize, int poolSize) {
+ this.disableJCasCache = disableJCasCache;
+ this.initialHeapSize = initialHeapSize;
+ this.poolSize = poolSize;
+ }
+ public boolean isDisableJCasCache() {
+ return disableJCasCache;
+ }
+ public int getInitialHeapSize() {
+ return initialHeapSize;
+ }
+ public int getPoolSize() {
+ return poolSize;
+ }
+
+}
Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/PrimitiveAnalysisEngineComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/PrimitiveAnalysisEngineComponent.java?rev=1844241&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/PrimitiveAnalysisEngineComponent.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/PrimitiveAnalysisEngineComponent.java Thu Oct 18 14:12:00 2018
@@ -0,0 +1,42 @@
+package org.apache.uima.aae.component;
+
+import org.apache.uima.aae.definition.connectors.basic.BasicConnector;
+import org.apache.uima.resource.ResourceSpecifier;
+
+public class PrimitiveAnalysisEngineComponent extends AnalysisEngineComponent {
+
+ public PrimitiveAnalysisEngineComponent(String key, ResourceSpecifier rs) {
+ super(key, rs);
+ }
+ /*
+ @Override
+ public boolean isScaleable() {
+ return false;
+ }
+
+ @Override
+ public boolean isCasMultiplier() {
+ return false;
+ }
+
+ @Override
+ public boolean isCasConsumer() {
+ return false;
+ }
+*/
+ @Override
+ public boolean isPrimitive() {
+ return true;
+ }
+/*
+ @Override
+ public boolean isRemote() {
+ return false;
+ }
+ */
+ @Override
+ public Object getConnector() {
+ return new BasicConnector();
+ }
+
+}
Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/RemoteAnalysisEngineComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/RemoteAnalysisEngineComponent.java?rev=1844241&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/RemoteAnalysisEngineComponent.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/RemoteAnalysisEngineComponent.java Thu Oct 18 14:12:00 2018
@@ -0,0 +1,74 @@
+package org.apache.uima.aae.component;
+
+import java.util.Objects;
+
+import org.apache.uima.resourceSpecifier.AsyncAggregateErrorConfigurationType;
+import org.apache.uima.resourceSpecifier.InputQueueType;
+import org.apache.uima.resourceSpecifier.RemoteAnalysisEngineType;
+import org.apache.uima.resourceSpecifier.SerializerType;
+
+public class RemoteAnalysisEngineComponent extends AnalysisEngineComponent {
+
+ private Object connector;
+ private AnalysisEngineComponent decoratedComponent;
+ private SerializerType serializer;
+ private int replyChannelScaleout;
+ private InputQueueType remoteEndpoint;
+ private AsyncAggregateErrorConfigurationType errorConfiguration;
+
+ public RemoteAnalysisEngineComponent(AnalysisEngineComponent component, RemoteAnalysisEngineType remoteDelegate) {
+ super(component.getKey(), null);
+ decoratedComponent = component;
+ errorConfiguration =
+ remoteDelegate.getAsyncAggregateErrorConfiguration();
+ remoteEndpoint =
+ remoteDelegate.getInputQueue();
+ replyChannelScaleout = remoteDelegate.getRemoteReplyQueueScaleout();
+ serializer =
+ remoteDelegate.getSerializer();
+ }
+
+ @Override
+ public boolean isRemote() {
+ return true;
+ }
+ public String getServer() {
+ return remoteEndpoint.getBrokerURL();
+ }
+
+ public String getEndpointName() {
+ return remoteEndpoint.getEndpoint();
+ }
+ public int getPrefetch() {
+ return remoteEndpoint.getPrefetch();
+ }
+
+ @Override
+ public Object getConnector() {
+ return connector;
+ }
+
+ public int getProcessTimeout() {
+ return errorConfiguration.getProcessCasErrors().getTimeout();
+ }
+ public int getMetaTimeout() {
+ return errorConfiguration.getGetMetadataErrors().getTimeout();
+ }
+ public int getCollectionProcessCompleteTimeout() {
+ return errorConfiguration.getCollectionProcessCompleteErrors().getTimeout();
+ }
+ public String getSupportedSerialization() {
+ if ( Objects.isNull( serializer ) ) {
+ return "xmi";
+ }
+ return serializer.getStringValue().trim();
+ }
+ public int getReplyConsumerCount() {
+ return replyChannelScaleout;
+ }
+ public RemoteAnalysisEngineComponent withConnector(Object connector) {
+ this.connector = connector;
+ return this;
+ }
+
+}
Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TestGenerator.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TestGenerator.java?rev=1844241&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TestGenerator.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TestGenerator.java Thu Oct 18 14:12:00 2018
@@ -0,0 +1,133 @@
+package org.apache.uima.aae.component;
+
+import java.io.File;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.uima.aae.UimaClassFactory;
+import org.apache.uima.aae.service.delegate.AggregateAnalysisEngineDelegate;
+import org.apache.uima.aae.service.delegate.AnalysisEngineDelegate;
+import org.apache.uima.analysis_engine.AnalysisEngineDescription;
+import org.apache.uima.resource.ResourceSpecifier;
+import org.apache.uima.resourceSpecifier.AnalysisEngineDeploymentDescriptionDocument;
+import org.apache.uima.resourceSpecifier.AnalysisEngineType;
+import org.apache.uima.resourceSpecifier.DelegateAnalysisEngineType;
+import org.apache.uima.resourceSpecifier.RemoteAnalysisEngineType;
+import org.apache.uima.resourceSpecifier.ServiceType;
+
+public class TestGenerator {
+
+ public AnalysisEngineDeploymentDescriptionDocument parseDD(String descriptorPath) throws Exception {
+ return AnalysisEngineDeploymentDescriptionDocument.Factory.parse(new File(descriptorPath));
+
+ }
+ private boolean isAggregate(AnalysisEngineType aet) {
+ return ("true".equals(aet.getAsync()) || aet.isSetAsync() || aet.isSetDelegates());
+ }
+ private boolean isAggregate( ResourceSpecifier resourceSpecifier) {
+ boolean aggregate = false;
+ if (resourceSpecifier instanceof AnalysisEngineDescription ) {
+ AnalysisEngineDescription aeDescriptor =
+ (AnalysisEngineDescription) resourceSpecifier;
+
+ if ( !aeDescriptor.isPrimitive() ) {
+ aggregate = true;
+ }
+ // if ( d != null ) {
+// if ((d instanceof AggregateAnalysisEngineDelegate) ||
+// (d.isAsync() && !d.isPrimitive()) ) {
+// aggregate = true;
+// }
+// } else if ( !aeDescriptor.isPrimitive() ) {
+// aggregate = true;
+// }
+ }
+ return aggregate;
+ }
+
+ private AnalysisEngineType findMatchInDD(String key) throws Exception {
+
+ return null;
+ }
+ private AnalysisEngineDescription getAeDescription(ResourceSpecifier rs) {
+ return (AnalysisEngineDescription) rs;
+ }
+ public AnalysisEngineComponent parse(ResourceSpecifier rs, String key) throws Exception {
+ AnalysisEngineDescription aeDescriptor = getAeDescription(rs);
+ AnalysisEngineComponent component = null;
+
+ //AnalysisEngineType aet = findMatchInDD(rs.)
+ if ( isAggregate(rs) ) {
+ component =
+ new AggregateAnalysisEngineComponent(key, rs);
+
+ Map<String, ResourceSpecifier> delegates =
+ aeDescriptor.getDelegateAnalysisEngineSpecifiers();
+
+ for(Entry<String, ResourceSpecifier> delegateEntry: delegates.entrySet() ) {
+ component.add(parse(delegateEntry.getValue(), delegateEntry.getKey() ));
+ }
+
+
+
+/*
+
+
+
+
+
+ // The DD object maintains two arrays, one for co-located delegates and the other for remotes.
+ // First handle co-located delegates.
+ if ( aet.getDelegates().getAnalysisEngineArray().length > 0 ) {
+ DelegateAnalysisEngineType[] localAnalysisEngineArray =
+ aet.getDelegates().getAnalysisEngineArray();
+
+ // Add default error handling to each co-located delegate
+ for( DelegateAnalysisEngineType delegate : localAnalysisEngineArray ) {
+ String key = delegate.getKey();
+ // recursively iterate over delegates until no more aggregates found
+ aggregate.add(walk(delegate));
+ }
+
+
+
+ addColocatedDelegates(localAnalysisEngineArray,(AggregateAnalysisEngineDelegate)delegate);
+ }
+ // Next add remote delegates of this aggregate
+ if ( hasRemoteDelegates(aet) ) {
+ RemoteAnalysisEngineType[] remoteAnalysisEngineArray =
+ aet.getDelegates().getRemoteAnalysisEngineArray();
+ addRemoteDelegates(remoteAnalysisEngineArray, (AggregateAnalysisEngineDelegate)delegate);
+ }
+*/
+ } else {
+ component = new PrimitiveAnalysisEngineComponent(key, rs);
+ }
+
+ if ( aeDescriptor.getAnalysisEngineMetaData().getOperationalProperties().isMultipleDeploymentAllowed() ) {
+ component.enableCasMultipler();
+ }
+ if ( aeDescriptor.getAnalysisEngineMetaData().getOperationalProperties().getOutputsNewCASes() ) {
+ component.enableScaleout();
+ }
+
+ return component;
+ }
+ public static void main(String[] args) {
+ try {
+
+ TestGenerator generator = new TestGenerator();
+ AnalysisEngineDeploymentDescriptionDocument dd =
+ generator.parseDD(args[0]);
+ ServiceType service =
+ dd.getAnalysisEngineDeploymentDescription().getDeployment().getService();
+ ResourceSpecifier resourceSpecifier =
+ UimaClassFactory.produceResourceSpecifier(service.getTopDescriptor().getImport().getLocation());
+ generator.walk(resourceSpecifier, null); // null= top level
+
+ } catch( Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+}
Added: uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TopLevelServiceComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TopLevelServiceComponent.java?rev=1844241&view=auto
==============================================================================
--- uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TopLevelServiceComponent.java (added)
+++ uima/uima-as/branches/uima-as-3/uimaj-as-core/src/main/java/org/apache/uima/aae/component/TopLevelServiceComponent.java Thu Oct 18 14:12:00 2018
@@ -0,0 +1,248 @@
+package org.apache.uima.aae.component;
+
+import java.io.InvalidObjectException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import org.apache.uima.aae.controller.DelegateEndpoint;
+import org.apache.uima.aae.controller.Endpoint;
+import org.apache.uima.resourceSpecifier.AnalysisEngineDeploymentDescriptionDocument;
+import org.apache.uima.resourceSpecifier.AsyncPrimitiveErrorConfigurationType;
+import org.apache.uima.resourceSpecifier.CasMultiplierType;
+import org.apache.uima.resourceSpecifier.CasPoolType;
+import org.apache.uima.resourceSpecifier.DeploymentType;
+import org.apache.uima.resourceSpecifier.EnvironmentVariableType;
+import org.apache.uima.resourceSpecifier.EnvironmentVariablesType;
+import org.apache.uima.resourceSpecifier.ServiceType;
+import org.apache.uima.resourceSpecifier.TopLevelAnalysisEngineType;
+
+public class TopLevelServiceComponent extends AnalysisEngineComponent{
+ private String name;
+ private String description;
+ private String version;
+ private String vendor;
+
+ private String protocol;
+ private String provider;
+
+ private int poolSize=1;
+ private boolean processParentLast;
+ private boolean disableJCasCache;
+ private int initialHeapSize=500;
+
+ private Endpoint endpoint;
+
+ private List<EnvironmentVariable> envVariables = new ArrayList<>();
+ private ComponentCasPool casPool = null;
+
+ private AnalysisEngineComponent decoratedComponent;
+
+ public TopLevelServiceComponent(AnalysisEngineComponent decorated, AnalysisEngineDeploymentDescriptionDocument dd) {
+ super(decorated.getKey(),decorated.getResourceSpecifier());
+ this.decoratedComponent = decorated;
+ DeploymentType deployment =
+ dd.getAnalysisEngineDeploymentDescription().getDeployment();
+
+ ServiceType service =
+ dd.getAnalysisEngineDeploymentDescription().getDeployment().getService();
+
+ if ( Objects.nonNull(service.getEnvironmentVariables()) ) {
+ configureEnvironmentVariables(service.getEnvironmentVariables());
+ }
+
+ if ( Objects.nonNull(deployment.getCasPool()) ) {
+ configureCasPool(deployment.getCasPool());
+ }
+
+ if ( Objects.nonNull(service.getAnalysisEngine())&&
+ Objects.nonNull(service.getAnalysisEngine().getAsyncPrimitiveErrorConfiguration()) ) {
+ AsyncPrimitiveErrorConfigurationType topLevelErrorConfiguration =
+ service.getAnalysisEngine().getAsyncPrimitiveErrorConfiguration();
+ configureErrorHandling(topLevelErrorConfiguration);
+ }
+ withName(dd.getAnalysisEngineDeploymentDescription().getName()).
+ withDescription(dd.getAnalysisEngineDeploymentDescription().getDescription()).
+ withVersion(dd.getAnalysisEngineDeploymentDescription().getVersion()).
+ withVendor(dd.getAnalysisEngineDeploymentDescription().getVendor()).
+ withProtocol(deployment.getProtocol()).
+ withProvider(deployment.getProvider());
+
+ String brokerURL = service.getInputQueue().getBrokerURL();
+ String queueName = service.getInputQueue().getEndpoint();
+ int prefetch = service.getInputQueue().getPrefetch();
+ configureEndpoint( queueName, brokerURL, prefetch);
+ if ( Objects.nonNull(service.getAnalysisEngine()) ) {
+ configureAnalysisEngine(service.getAnalysisEngine());
+
+ if ( Objects.nonNull(service.getAnalysisEngine().getCasMultiplier()) ) {
+ configureCasMultiplier(service.getAnalysisEngine().getCasMultiplier());
+ }
+ }
+ }
+ @Override
+ public Endpoint getEndpoint() {
+ return endpoint;
+ }
+
+ private void configureEndpoint(String name, String server, int prefetch) {
+ endpoint = new DelegateEndpoint().new Builder().withDelegateKey(getKey()).withEndpointName(name)
+ .setRemote(isRemote()).setServerURI(server).withResourceSpecifier(getResourceSpecifier()).build();
+ if (isCasMultiplier()) {
+ endpoint.setIsCasMultiplier(true);
+ endpoint.setProcessParentLast(processParentLast);
+ if (poolSize > 1) {
+ endpoint.setShadowCasPoolSize(poolSize);
+ }
+ if (initialHeapSize > 0) {
+ endpoint.setInitialFsHeapSize(initialHeapSize);
+ }
+ endpoint.setDisableJCasCache(disableJCasCache);
+ }
+ }
+ private void configureEnvironmentVariables(EnvironmentVariablesType evt) {
+ for( EnvironmentVariableType ev : evt.getEnvironmentVariableArray() ) {
+ EnvironmentVariable envVariable = new EnvironmentVariable(ev.getName(), ev.getStringValue());
+ envVariables.add(envVariable);
+ }
+ }
+ private int convertStringToint(String value, int defaultValue) {
+ try {
+ return Integer.valueOf(value);
+ } catch( Exception e ) {
+ return defaultValue;
+ }
+ }
+ private void configureErrorHandling(AsyncPrimitiveErrorConfigurationType topLevelErrorConfiguration) {
+
+ }
+ private void configureAnalysisEngine(TopLevelAnalysisEngineType tlae) {
+ int replyQueueScaleout = convertStringToint(tlae.getInternalReplyQueueScaleout(),1);
+ int inputQueueScaleout = convertStringToint(tlae.getInputQueueScaleout(),1);
+ boolean async = false; // default
+ int scaleout = Objects.nonNull(tlae.getScaleout())? tlae.getScaleout().getNumberOfInstances() : 1;
+ if ( Objects.nonNull(tlae.getAsync()) ) {
+ async = Boolean.parseBoolean(tlae.getAsync());
+ }
+
+ decoratedComponent.withScaleout(scaleout)
+ .withReplyThreadPoolSize(replyQueueScaleout)
+ .withRequestThreadPoolSize(inputQueueScaleout);
+ // Component is async iff 'async=true' or dd has delegates
+ if ( !decoratedComponent.isPrimitive() && (async || Objects.nonNull(tlae.getDelegates())) ) {
+ decoratedComponent.enableAsync();
+ }
+
+// String async = tlae.getAsync(); // true or false
+// String replyQueueScaleout = tlae.getInternalReplyQueueScaleout();
+// String key = tlae.getKey();
+// int scaleout = tlae.getScaleout().getNumberOfInstances();
+ }
+ public AggregateAnalysisEngineComponent aggregateComponent() throws InvalidObjectException{
+ if ( !isAggregate() ) {
+ throw new InvalidObjectException("This component is not an aggregate");
+ }
+ return (AggregateAnalysisEngineComponent)decoratedComponent;
+ }
+ public boolean isAggregate() {
+ return decoratedComponent instanceof AggregateAnalysisEngineComponent;
+ }
+ @Override
+ public boolean isPrimitive() {
+ return !isAggregate();
+ }
+ private void configureCasPool(CasPoolType casPoolType) {
+ boolean disableJCasCache = casPoolType.getDisableJCasCache();
+ int initialHeapSize = casPoolType.getInitialFsHeapSize();
+ int poolSize = casPoolType.getNumberOfCASes();
+
+ casPool = new ComponentCasPool(disableJCasCache, initialHeapSize, poolSize);
+
+ }
+ private void configureCasMultiplier(CasMultiplierType casMultiplierType ) {
+ poolSize = casMultiplierType.getPoolSize();
+ disableJCasCache = casMultiplierType.getDisableJCasCache();
+ initialHeapSize = Integer.parseInt(casMultiplierType.getInitialFsHeapSize());
+ processParentLast = Boolean.parseBoolean(casMultiplierType.getProcessParentLast()); // true or false
+ }
+ public void addEnvVariable(String name, String value) {
+ envVariables.add(new EnvironmentVariable(name, value));
+ }
+ public TopLevelServiceComponent withName(String name) {
+ this.name = name;
+ return this;
+ }
+ public TopLevelServiceComponent withDescription(String description) {
+ this.description = description;
+ return this;
+ }
+ public TopLevelServiceComponent withVersion(String version) {
+ this.version = version;
+ return this;
+ }
+ public TopLevelServiceComponent withVendor(String vendor) {
+ this.vendor = vendor;
+ return this;
+ }
+ public TopLevelServiceComponent withProtocol(String protocol) {
+ this.protocol = protocol;
+ return this;
+ }
+ public TopLevelServiceComponent withProvider(String provider) {
+ this.provider = provider;
+ return this;
+ }
+
+
+ public ComponentCasPool getComponentCasPool() {
+ if ( Objects.isNull(casPool)) {
+ return new ComponentCasPool(false, 1000, 1);
+ } else {
+ return casPool;
+ }
+
+ }
+
+ public String getName() {
+ return name;
+ }
+ public String getDescription() {
+ return description;
+ }
+ public String getVersion() {
+ return version;
+ }
+ public String getVendor() {
+ return vendor;
+ }
+ public String getProtocol() {
+ return protocol;
+ }
+ public String getProvider() {
+ return provider;
+ }
+
+ @Override
+ public Object getConnector() {
+ return null;
+ }
+
+ public class EnvironmentVariable {
+ String name;
+ String value;
+
+ public EnvironmentVariable( String name, String value ) {
+ this.name = name;
+ this.value = value;
+ }
+ public String getName() {
+ return name;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+
+ }
+}