uima-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Richard Eckart de Castilho (JIRA)" <...@uima.apache.org>
Subject [jira] [Commented] (UIMA-5807) Support PEARs (ResourceSpecifier) in AnalysisEngineFactory.createEngineDescription
Date Mon, 13 Aug 2018 21:48:00 GMT

    [ https://issues.apache.org/jira/browse/UIMA-5807?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16578949#comment-16578949
] 

Richard Eckart de Castilho commented on UIMA-5807:
--------------------------------------------------

Looking into this in more detail... adding new methods which accept `PearSpecifier` doesn't
really work out in at least some cases. For example, we'd end up not being able to easily
mix PEARs and regular analysis engines in an aggregate if we have methods such as `createEngineDescription(PearSpecifier...
pearDescriptions)` and `createEngineDescription(AnalysisEngineDescription... analysisEngineDescriptions)`.
Because `ResourceSpecifier` is the common super-interface of the two descriptors, we'd need
to generously accept that and then throw exceptions if any non-supported `ResourceSpecifier`
types are passed as arguments... 

Or we'd require that a PEAR cannot be added directly and would require something like this:

{noformat}
createEngineDescription(
  createEngineDescription(Component1.class()),
  createEngineDescription(pearSpecifier),
  createEngineDescriptionFromPear("path/to/pear/file"))
{noformat}

Actually, I think this approach is even better than adding many new methods accepting PearSpecifiers.
We only add these 2 new methods:

* createEngineDescription(PearSpecifier, Object...)
* createEngineDescriptionFromPear(String, Object...)

> Support PEARs (ResourceSpecifier) in AnalysisEngineFactory.createEngineDescription
> ----------------------------------------------------------------------------------
>
>                 Key: UIMA-5807
>                 URL: https://issues.apache.org/jira/browse/UIMA-5807
>             Project: UIMA
>          Issue Type: Improvement
>          Components: uimaFIT
>            Reporter: Peter Klügl
>            Assignee: Richard Eckart de Castilho
>            Priority: Major
>             Fix For: 3.0.0uimaFIT, 2.5.0uimaFIT
>
>
> It is currently a bit cumbersome to use the uimaFIT factories together with UIMA PEARs.
A possible improvement in this direction could be to support the pear wrappers in the AnalysisEngineFactory
methods:
>  
> {code:java}
> public static AnalysisEngineDescription createEngineDescription(
>  List<AnalysisEngineDescription> analysisEngineDescriptions, List<String>
componentNames,
>  TypePriorities typePriorities, SofaMapping[] sofaMappings,
>  FlowControllerDescription flowControllerDescription)
>  {code}
>  
> If another method is added or the given list uses ResourceSpecifier instead of AnalysisEngineDescription
(and some ifs in the loop), then PEARs would be supported.
>  
> An exemplary implementation could look like:
>  
> {code:java}
> public static AnalysisEngineDescription createEngineDescription(
>  List<ResourceSpecifier> resourceSpecifiers, List<String> componentNames,
>  TypePriorities typePriorities, SofaMapping[] sofaMappings,
>  FlowControllerDescription flowControllerDescription) {
> if (componentNames == null)
> { throw new IllegalArgumentException("Parameter [componentNames] cannot be null"); }
> if (resourceSpecifiers == null)
> { throw new IllegalArgumentException("Parameter [analysisEngineDescriptions] cannot be
null"); }
> if (resourceSpecifiers.size() != componentNames.size())
> { throw new IllegalArgumentException("Number of descriptions [" + resourceSpecifiers.size()
+ "]does not match number of component names [" + componentNames.size() + "]."); }
> // create the descriptor and set configuration parameters
>  AnalysisEngineDescription desc = new AnalysisEngineDescription_impl();
>  desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
>  desc.setPrimitive(false);
> // if any of the aggregated analysis engines does not allow multiple
>  // deployment, then the
>  // aggregate engine may also not be multiply deployed
>  boolean allowMultipleDeploy = true;
>  for (ResourceSpecifier d : resourceSpecifiers) {
> // for now only consider AnalysisEngineDescriptions: we implicitly assume that all pears
have allowMultipleDeploy = true
>  if (d instanceof AnalysisEngineDescription)
> { allowMultipleDeploy &= ((AnalysisEngineDescription) d).getAnalysisEngineMetaData().getOperationalProperties()
.isMultipleDeploymentAllowed(); }
> }
> desc.getAnalysisEngineMetaData().getOperationalProperties()
>  .setMultipleDeploymentAllowed(allowMultipleDeploy);
> List<String> flowNames = new ArrayList<String>();
> for (int i = 0; i < resourceSpecifiers.size(); i++)
> { ResourceSpecifier aed = resourceSpecifiers.get(i); String componentName = componentNames.get(i);
desc.getDelegateAnalysisEngineSpecifiersWithImports().put(componentName, aed); flowNames.add(componentName);
}
> if (flowControllerDescription != null)
> { FlowControllerDeclaration flowControllerDeclaration = new FlowControllerDeclaration_impl();
flowControllerDeclaration.setSpecifier(flowControllerDescription); desc.setFlowControllerDeclaration(flowControllerDeclaration);
}
> FixedFlow fixedFlow = new FixedFlow_impl();
>  fixedFlow.setFixedFlow(flowNames.toArray(new String[flowNames.size()]));
>  desc.getAnalysisEngineMetaData().setFlowConstraints(fixedFlow);
> if (typePriorities != null)
> { desc.getAnalysisEngineMetaData().setTypePriorities(typePriorities); }
> if (sofaMappings != null)
> { desc.setSofaMappings(sofaMappings); }
> return desc;
>  }
> {code}
>  
>  
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message