You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2020/02/02 17:45:36 UTC

[uima-uimafit] 01/01: Merge branch 'master-v2' into sync-v2-into-master

This is an automated email from the ASF dual-hosted git repository.

rec pushed a commit to branch sync-v2-into-master
in repository https://gitbox.apache.org/repos/asf/uima-uimafit.git

commit e3bfc80d80631575a6cff2f3067c85558426cce3
Merge: a8ec6f7 ac9faeb
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Sun Feb 2 18:45:27 2020 +0100

    Merge branch 'master-v2' into sync-v2-into-master
    
    * master-v2:
      [UIMA-6184] Move code quality profiles to parent POM
      [UIMA-6184] Move code quality profiles to parent POM
      [UIMA-6184] Move code quality profiles to parent POM
      [UIMA-6155] uimaFIT JCasIterable.iterator() destroys ResourceManager
      [UIMA-5807] Support PEARs in AnalysisEngineFactory
    
    % Conflicts:
    %	uimafit-core/pom.xml
    %	uimafit-core/src/test/java/org/apache/uima/fit/pipeline/JCasIterableTest.java
    %	uimafit-legacy-support/marker-file-identifying-api-compatibility-check
    %	uimafit-parent/pom.xml

 ...marker-file-identifying-api-compatibility-check |   0
 uimafit-core/pom.xml                               |   5 +
 .../uima/fit/factory/AnalysisEngineFactory.java    |  40 +++++
 .../fit/factory/ConfigurationParameterFactory.java |  26 +++
 .../uima/fit/internal/ResourceManagerFactory.java  |   6 +
 .../org/apache/uima/fit/pipeline/JCasIterable.java |  61 +++----
 .../org/apache/uima/fit/pipeline/JCasIterator.java | 137 ++++++++++++---
 .../fit/factory/AnalysisEngineFactoryTest.java     |  28 ++++
 .../apache/uima/fit/pipeline/JCasIterableTest.java | 121 +++++++++++---
 uimafit-core/src/test/resources/pear/DateTime.pear | Bin 0 -> 23719 bytes
 ...arker-file-identifying-api-compatibility-check} |   0
 uimafit-parent/pom.xml                             | 184 ++-------------------
 ...marker-file-identifying-api-compatibility-check |   0
 13 files changed, 353 insertions(+), 255 deletions(-)

diff --cc uimafit-core/pom.xml
index 1465f68,ba72d05..1dcace5
--- a/uimafit-core/pom.xml
+++ b/uimafit-core/pom.xml
@@@ -79,6 -77,35 +79,11 @@@
        <artifactId>assertj-core</artifactId>
        <scope>test</scope>
      </dependency>
+     <dependency>
+       <groupId>org.mockito</groupId>
+       <artifactId>mockito-core</artifactId>
+       <scope>test</scope>
+     </dependency>
 -    <dependency>
 -      <groupId>log4j</groupId>
 -      <artifactId>log4j</artifactId>
 -      <version>1.2.15</version>
 -      <scope>test</scope>
 -      <exclusions>
 -        <exclusion>
 -          <artifactId>jmxtools</artifactId>
 -          <groupId>com.sun.jdmk</groupId>
 -        </exclusion>
 -        <exclusion>
 -          <artifactId>jmxri</artifactId>
 -          <groupId>com.sun.jmx</groupId>
 -        </exclusion>
 -        <exclusion>
 -          <artifactId>jms</artifactId>
 -          <groupId>javax.jms</groupId>
 -        </exclusion>
 -        <exclusion>
 -          <artifactId>mail</artifactId>
 -          <groupId>javax.mail</groupId>
 -        </exclusion>
 -      </exclusions>
 -    </dependency>
    </dependencies>
    <licenses>
      <license>
diff --cc uimafit-core/src/test/java/org/apache/uima/fit/pipeline/JCasIterableTest.java
index e9bb13b,c45f1fa..f557f5f
--- a/uimafit-core/src/test/java/org/apache/uima/fit/pipeline/JCasIterableTest.java
+++ b/uimafit-core/src/test/java/org/apache/uima/fit/pipeline/JCasIterableTest.java
@@@ -18,15 -18,21 +18,21 @@@
   */
  package org.apache.uima.fit.pipeline;
  
 -import static org.apache.uima.UIMAFramework.newDefaultResourceManager;
  import static org.apache.uima.fit.factory.AnalysisEngineFactory.createEngineDescription;
  import static org.apache.uima.fit.factory.CollectionReaderFactory.createReaderDescription;
 -import static org.apache.uima.fit.factory.ExternalResourceFactory.createExternalResourceDescription;
 +import static org.apache.uima.fit.factory.ExternalResourceFactory.createResourceDescription;
- import static org.apache.uima.fit.pipeline.SimplePipeline.iteratePipeline;
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertNotNull;
+ import static org.apache.uima.fit.internal.ResourceManagerFactory.getResourceManagerCreator;
++import static org.apache.uima.fit.internal.ResourceManagerFactory.newResourceManager;
+ import static org.apache.uima.fit.internal.ResourceManagerFactory.setResourceManagerCreator;
+ import static org.assertj.core.api.Assertions.assertThat;
  import static org.junit.Assert.assertTrue;
+ import static org.mockito.Mockito.never;
+ import static org.mockito.Mockito.spy;
+ import static org.mockito.Mockito.times;
+ import static org.mockito.Mockito.verify;
  
  import java.io.IOException;
+ import java.util.Iterator;
  
  import org.apache.uima.UimaContext;
  import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
@@@ -58,22 -89,53 +89,53 @@@ public class JCasIterableTest 
    }
  
    @Test
-   public void testResourceSharing() throws Exception {
-     ThreeDocsReader.resource = null;
-     GetTextAE.resource = null;
-     
+   public void thatResourceCanBeShared() throws Exception {
 -    ExternalResourceDescription res = createExternalResourceDescription(DummySharedResource.class);
 +    ExternalResourceDescription res = createResourceDescription(DummySharedResource.class);
-     for (@SuppressWarnings("unused") JCas jcas : iteratePipeline(
+     
+     consume(new JCasIterable(
              createReaderDescription(ThreeDocsReader.class, "resource", res),
-             createEngineDescription(GetTextAE.class, "resource", res))) {
-     }
+             createEngineDescription(GetTextAE.class, "resource", res)));
      
-     assertNotNull(ThreeDocsReader.resource);
-     assertNotNull(GetTextAE.resource);
-     assertTrue(ThreeDocsReader.resource == GetTextAE.resource);
+     assertThat(ThreeDocsReader.resource)
+           .isNotNull()
+           .isEqualTo(GetTextAE.resource);
+   }
+   
+   @Test 
+   public void thatSharedResourceManagerIsNotDestroyed() throws Exception {
 -    ResourceManager resMgr = spy(newDefaultResourceManager());
++    ResourceManager resMgr = spy(newResourceManager());
      
-     ThreeDocsReader.resource = null;
-     GetTextAE.resource = null;
+     consume(new JCasIterable(resMgr,
+             createReaderDescription(ThreeDocsReader.class),
+             createEngineDescription(GetTextAE.class)));
+     
+     verify(resMgr, never()).destroy();
+   }
+ 
+   /**
+    * Mind that returning a singleton resource manager from {@link ResourceManagerFactory} is
+    * generally a bad idea exactly because it gets destroyed on a regular basis. For this
+    * reason, it is called {@link ResourceManagerFactory#newResourceManager()} and not 
+    * {@code getResourceManager()}.
+    */
+   @Test 
+   public void thatInternallyCreatedResourceManagerIsDestroyed() throws Exception {
 -    ResourceManager resMgr = spy(newDefaultResourceManager());
++    ResourceManager resMgr = spy(newResourceManager());
+     setResourceManagerCreator(() -> resMgr); 
+     
+     consume(new JCasIterable(
+             createReaderDescription(ThreeDocsReader.class),
+             createEngineDescription(GetTextAE.class)));
+     
+     verify(resMgr, times(1)).destroy();
+   }
+ 
+   private static void consume(Iterable<?> aIterable)
+   {
+     Iterator<?> i = aIterable.iterator();
+     while (i.hasNext()) {
+       i.next();
+     }
    }
   
    public static final class DummySharedResource extends Resource_ImplBase {
diff --cc uimafit-parent/pom.xml
index ca363ce,d43006c..55892b7
--- a/uimafit-parent/pom.xml
+++ b/uimafit-parent/pom.xml
@@@ -23,26 -4,33 +23,28 @@@
      <groupId>org.apache.uima</groupId>
      <artifactId>parent-pom</artifactId>
      <relativePath />
-     <version>13</version>
+     <version>14-SNAPSHOT</version>
    </parent>
    <artifactId>uimafit-parent</artifactId>
 -  <version>2.5.0-SNAPSHOT</version>
 +  <version>3.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Apache UIMA uimaFIT - Parent</name>
    <url>${uimaWebsiteUrl}</url>
    <inceptionYear>2012</inceptionYear>
    <properties>
 -    <spring.version>3.2.16.RELEASE</spring.version>
 -    <uima.version>2.10.3</uima.version>
 +    <spring.version>4.3.22.RELEASE</spring.version>
 +    <uima.version>3.0.2</uima.version>
 +    <slf4j.version>1.7.26</slf4j.version>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
-     <compat.previous.version>2.4.0</compat.previous.version>
 -    <!-- 
 -     BACKWARD_COMPATIBLE_IMPLEMENTER - patch version (=.=.+)
 -     BACKWARD_COMPATIBLE_USER        - minor version (=.+.0)
 -     NON_BACKWARD_COMPATIBLE         - major version (+.0.0)
 -    -->
 -    <compat.level>BACKWARD_COMPATIBLE_USER</compat.level>
+     <api_check_oldVersion>2.4.0</api_check_oldVersion>
+     
+     <japicmp.postAnalysisScript>${project.basedir}/../uimafit-parent/src/main/groovy/api-report.groovy</japicmp.postAnalysisScript>
    </properties>
 -  <!--
 -    - Only required while uimaFIT depends on unreleased versions of UIMA.
 -    -->
    <repositories>
 +    <!--
 +      - For UIMA/uimaFIT SNAPSHOTs
 +    -->
      <repository>
        <id>apache.snapshots</id>
        <name>Apache Snapshot Repository</name>
@@@ -87,19 -72,19 +89,24 @@@
          <version>4.12</version>
        </dependency>
        <dependency>
 +        <groupId>xmlunit</groupId>
 +        <artifactId>xmlunit</artifactId>
 +        <version>1.6</version>
 +      </dependency>
 +      <dependency>
          <groupId>org.assertj</groupId>
          <artifactId>assertj-core</artifactId>
 -        <version>3.10.0</version>
 +        <version>3.12.2</version>
        </dependency>
        <dependency>
+         <groupId>org.mockito</groupId>
+         <artifactId>mockito-core</artifactId>
+         <version>3.2.4</version>
+       </dependency>
+       <dependency>
 -        <groupId>commons-lang</groupId>
 -        <artifactId>commons-lang</artifactId>
 -        <version>2.6</version>
 +        <groupId>org.apache.commons</groupId>
 +        <artifactId>commons-lang3</artifactId>
 +        <version>3.8.1</version>
        </dependency>
        <dependency>
          <groupId>commons-io</groupId>
@@@ -237,19 -202,13 +244,16 @@@
          <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
 +          <version>0.13</version>
-           <configuration>
-             <consoleOutput>true</consoleOutput>
-           </configuration>
            <executions>
              <execution>
                <id>default-cli</id>
                <configuration>
-                 <excludes>
+                 <excludes combine.children="append">
                    <!-- Plain documentation -->
                    <exclude>README*</exclude>
 +                  <!-- GitHub templates -->
 +                  <exclude>.github/**</exclude>
                    <!-- Release files -->
                    <exclude>RELEASE_NOTES*</exclude>
                    <exclude>issuesFixed/**</exclude>
@@@ -334,172 -289,83 +338,4 @@@
        </plugins>
      </pluginManagement>
    </build>
--  <profiles>
-     <profile>
-       <id>spotbugs</id>
-       <build>
-         <plugins>
-           <plugin>
-             <groupId>com.github.spotbugs</groupId>
-             <artifactId>spotbugs-maven-plugin</artifactId>
-             <version>3.1.12.2</version>
-             <executions>
-               <execution>
-                 <id>default</id>
-                 <phase>verify</phase>
-                 <goals>
-                   <goal>check</goal>
-                 </goals>
-                 <configuration>
-                   <failOnError>false</failOnError>
-                 </configuration>
-               </execution>
-             </executions>
-           </plugin>
-         </plugins>
-       </build>
-     </profile>
--    <profile>
--      <id>enforce-compatibility</id>
--      <activation>
--        <file>
-           <exists>.activate-enforce-compatibility</exists>
 -          <exists>marker-file-identifying-api-compatibility-check</exists>
--        </file>
--      </activation>
 -      <properties>
 -        <japicmp.postAnalysisScript>${project.basedir}/../uimafit-parent/src/main/groovy/api-report.groovy</japicmp.postAnalysisScript>
 -      </properties>
--      <build>
--        <pluginManagement>
--          <plugins>
--            <plugin>
-               <groupId>org.apache.rat</groupId>
-               <artifactId>apache-rat-plugin</artifactId>
 -              <artifactId>maven-enforcer-plugin</artifactId>
 -              <dependencies>
 -                <dependency>
 -                  <groupId>org.semver</groupId>
 -                  <artifactId>enforcer-rule</artifactId>
 -                  <version>0.9.33</version>
 -                </dependency>
 -              </dependencies>
--              <executions>
--                <execution>
-                   <id>default-cli</id>
 -                  <id>enforce-compatibility</id>
 -                  <phase>verify</phase>
 -                  <goals>
 -                    <goal>enforce</goal>
 -                  </goals>
--                  <configuration>
-                     <excludes combine.children="append">
-                       <exclude>**/api-change-report/**/*.*</exclude>
-                     </excludes>
 -                    <rules>
 -                      <requireBackwardCompatibility implementation="org.semver.enforcer.RequireBackwardCompatibility">
 -                        <previousVersion>${api_check_oldVersion}</previousVersion>
 -                        <dumpDetails>true</dumpDetails>
 -                        <compatibilityType>${compat.level}</compatibilityType>
 -                      </requireBackwardCompatibility>
 -                    </rules>
--                  </configuration>
--                </execution>
--              </executions>
--            </plugin>
-           </plugins>
-         </pluginManagement>
- 
-         <plugins>
-           <!-- https://siom79.github.io/japicmp/MavenPlugin.html -->
-           <plugin>
-             <groupId>com.github.siom79.japicmp</groupId>
-             <artifactId>japicmp-maven-plugin</artifactId>
-             <version>0.13.1</version>
-             <configuration>
-               <oldVersion>
-                 <dependency>
-                   <groupId>${project.groupId}</groupId>
-                   <artifactId>${project.artifactId}</artifactId>
-                   <version>${compat.previous.version}</version>
-                 </dependency>
-               </oldVersion>
-               <parameter>
-                 <onlyModified>true</onlyModified>
-                 <!-- filter out classes with impl in their package or class name -->
-                 <postAnalysisScript>${project.basedir}/../uimafit-parent/src/main/groovy/api-report.groovy</postAnalysisScript>
-               </parameter>
-             </configuration>
-             <executions>
-               <execution>
-                 <phase>verify</phase>
-                 <goals>
-                   <goal>cmp</goal>
-                 </goals>
-               </execution>
-             </executions>
-           </plugin>
- 
-           <!-- This copy is to have the api change report included in the source distribution -->
-           <plugin>
-             <artifactId>maven-antrun-plugin</artifactId>
-             <executions>
-               <execution>
-                 <id>copy-API-change-report</id>
-                 <phase>install</phase>  <!-- must follow verify -->
-                 <goals>
-                   <goal>run</goal>
-                 </goals>
-                 <configuration>
-                   <target>
-                     <taskdef name="if" classname="net.sf.antcontrib.logic.IfTask" />
-                     <if>
-                       <available file="${project.build.directory}/japicmp/" />
-                       <then>
-                         <copy toDir="${basedir}/api-change-report">
-                           <fileset dir="${project.build.directory}/japicmp" />
-                         </copy>
-                       </then>
-                     </if>
-                   </target>
-                 </configuration>
-               </execution>
-             </executions>
-           </plugin>
-         </plugins>
-       </build>
-     </profile>
-     <profile>
-       <id>m2e</id>
-       <activation>
-         <property>
-           <name>m2e.version</name>
-         </property>
-       </activation>
-       <build>
-         <pluginManagement>
-           <plugins>
-             <!--
-               - This plugin's configuration is used to store Eclipse m2e settings only.
-               - It has no influence on the Maven build itself.
-             -->
 -            
 -            <!-- https://siom79.github.io/japicmp/MavenPlugin.html -->
--            <plugin>
-               <groupId>org.eclipse.m2e</groupId>
-               <artifactId>lifecycle-mapping</artifactId>
-               <version>1.0.0</version>
 -              <groupId>com.github.siom79.japicmp</groupId>
 -              <artifactId>japicmp-maven-plugin</artifactId>
--              <configuration>
-                 <lifecycleMappingMetadata>
-                   <pluginExecutions>
-                     <pluginExecution>
-                       <pluginExecutionFilter>
-                         <groupId>org.codehaus.gmaven</groupId>
-                         <artifactId>gmaven-plugin</artifactId>
-                         <versionRange>[1.5,)</versionRange>
-                         <goals>
-                           <goal>execute</goal>
-                         </goals>
-                       </pluginExecutionFilter>
-                       <action>
-                         <ignore />
-                       </action>
-                     </pluginExecution>
-                     <pluginExecution>
-                       <pluginExecutionFilter>
-                         <groupId>org.apache.maven.plugins</groupId>
-                         <artifactId>maven-plugin-plugin</artifactId>
-                         <versionRange>[3.5.2,)</versionRange>
-                         <goals>
-                           <goal>descriptor</goal>
-                           <goal>helpmojo</goal>
-                         </goals>
-                       </pluginExecutionFilter>
-                       <action>
-                         <ignore />
-                       </action>
-                     </pluginExecution>
-                   </pluginExecutions>
-                 </lifecycleMappingMetadata>
 -                <parameter combine.children="append">
 -                  <breakBuildBasedOnSemanticVersioning>true</breakBuildBasedOnSemanticVersioning>
 -                  <reportOnlyFilename>true</reportOnlyFilename>
 -                </parameter>
--              </configuration>
--            </plugin>
--          </plugins>
--        </pluginManagement>
--      </build>
--    </profile>
--  </profiles>
  </project>