	<!--
    ***************************************************************
    * 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.
    ***************************************************************
   -->
<html>
<head>
  <title>Apache UIMA v3.1.0 Release Notes</title>
</head>
<body>
<h1>Apache UIMA (Unstructured Information Management Architecture) v3.1.0 Release Notes</h1>

<h2>Contents</h2>
<p>
<a href="#what.is.uima">What is UIMA?</a><br/>
<a href="#major.changes">Major Changes in this Release</a><br/>
<a href="#get.involved">How to Get Involved</a><br/>
<a href="#report.issues">How to Report Issues</a><br/>
<a href="#list.issues">List of JIRA Issues Fixed in this Release</a><br/>
</p>  
        
<h2><a id="what.is.uima">What is UIMA?</a></h2>

     <p>
  			Unstructured Information Management applications are
				software systems that analyze large volumes of
				unstructured information in order to discover knowledge
				that is relevant to an end user. UIMA is a framework and
				SDK for developing such applications. An example UIM
				application might ingest plain text and identify
				entities, such as persons, places, organizations; or
				relations, such as works-for or located-at. UIMA enables
				such an application to be decomposed into components,
				for example "language identification" -&gt; "language
				specific segmentation" -&gt; "sentence boundary
				detection" -&gt; "entity detection (person/place names
				etc.)". Each component must implement interfaces defined
				by the framework and must provide self-describing
				metadata via XML descriptor files. The framework manages
				these components and the data flow between them.
				Components are written in Java or C++; the data that
				flows between components is designed for efficient
				mapping between these languages. UIMA additionally
				provides capabilities to wrap components as network
				services, and can scale to very large volumes by
				replicating processing pipelines over a cluster of
				networked nodes.
			</p>
      <p>
				Apache UIMA is an Apache-licensed open source
				implementation of the UIMA specification (that
				specification is, in turn, being developed concurrently
				by a technical committee within
				<a href="http://www.oasis-open.org">OASIS</a>,
				a standards organization). We invite and encourage you
				to participate in both the implementation and
				specification efforts.
			</p>
      <p>
				UIMA is a component framework for analysing unstructured
				content such as text, audio and video. It comprises an
				SDK and tooling for composing and running analytic
				components written in Java and C++, with some support
				for Perl, Python and TCL.
			</p>

<h2><a id="major.changes">Major Changes in this Release</a></h2>

<p>Version 3.1.0 is a minor update to 3.0.2, mainly bug fixes.
The major version was updated because the generated JCas classes 
now include for FSArrays, the generic type of the component, if known.</p>
<p>
When migrating from v2, if non-built-in JCas cover classes are being used,
a one-time regeneration or migration step is required for these.  
Please read the Version 3 users guide located in the docs directory
for information on these changes and the migration tool which can
aid in migrating existing JCas class definitions.
</p>

<p>A very brief summary of version 3 vs version 2:</p>
<ul><li>Feature Structures become Java Objects, 
subject to Garbage Collection, just like any other objects, 
when no longer reachable.</li>
<li>Iterating over indexes no longer throws 
ConcurrentModificationException.</li>
<li>Support for arbitrary Java Objects in the CAS, 
using special custom implementations of JCas cover classes for those.</li>
<li>Using the above new capability, new semi-built-ins for three new types: ArrayList style
lists of Feature Structures and ints, and an FSHashSet</li>
<li>New "select" framework for flexible 
access to Feature Structures, that can ignore typeOrdering keys in indexes.</li>
<li>Integration with Java 8 facilities such as Streams</li>
<li>Logging framework upgraded, supporting embedding UIMA in other frameworks using 
popular logging APIs</li>
<li>There are many performance improvements</li>
</ul>


<p>Please read the Version 3 users guide for more details.</p>

<p>Specific changes in release 3.1.0 versus 3.0.2 include</p>
<ul>
  <li>Fixed a problem preventing the Component Descriptor editor from running with the lastest Eclipse 2019-6</li>
  <li>Fixed a bug on deserialization of typed arrays edge case</li>
  <li>Better support for control of class loader switching when running sub-pipelines, including PEARs</li>
  <li>better support for shared 0-length typed FSArrays</li>
  <li>Fixed a bug in Internationalized Messaging in PEARs and other contexts, edge case.</li>
  <li>JCasGen now generates FSArray values with generic types, if the component type is specified.</li>
</ul>
 
<h3>API changes</h3>

 <p>There is an API compatibility report covering the non-internal APIs;
   see <a href="api-change-report.html">change report</a> for the list of API changes
   since version 3.0.2.
 </p>
 
<h2><a id="list.issues">Full list of JIRA Issues affecting this Release</a></h2>
Click <a href="issuesFixed/jira-report.html">issuesFixed/jira-report.hmtl</a> for the list of 
issues affecting this release.    

<p>Please use the mailing lists 
( http://uima.apache.org/mail-lists.html ) 
for feedback.</p> 
 
<h2><a id="get.involved">How to Get Involved</a></h2>
<p>
The Apache UIMA project really needs and appreciates any contributions, 
including documentation help, source code and feedback.  If you are interested
in contributing, please visit 
<a href="http://uima.apache.org/get-involved.html">
  http://uima.apache.org/get-involved.html</a>.
</p>
  
<h2><a id="report.issues">How to Report Issues</a></h2>
<p>
The Apache UIMA project uses JIRA for issue tracking.  Please report any 
issues you find at 
<a href="http://issues.apache.org/jira/browse/uima">http://issues.apache.org/jira/browse/uima</a>
</p>
  
    
</body>
</html>