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

<h2>Contents</h2>
<p>
<a href="#beta">Beta release status notice</a><br/>
<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="beta">0. Beta release status</a></h2>
  <p>This is the Beta release of 3.0.0; the next release is planned to be 
     the official 3.0.0 release.  The beta release is being done in order to expand the 
     community of people doing testing on this new release.
     The APIs at this point are expected to be stable.</p>
     
<h2><a id="what.is.uima">1. 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 is a major reimplementation of the internals of 
the Java version of UIMA to support better integration with
Java 8, alignment with modern memory hierarchies for 
better performance, and multiple functional enhancements and
improvements.</p>
<p>
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:</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 this release versus the previous alpha02 release include</p>
<ul>
  <li>The use of generic typing was improved.
  <li>Fixed the Eclipse launcher in the examples project that's part of the binary distribution to properly
      launch the v3-migration tool.</li>
  <li>The UIMA built-in arrays and lists implement iterable and stream, with appropriate capabilities
      for generic type specification.</li>
  <li>Eclipse plugins are now Jar-signed.</li>
  <li>Renamed some methods to create UIMA arrays and lists from createFromArray to create</li>
  <li>Added missing methods to logger interface to support Supplier argument.</li>
  <li>The launchers for the normal UIMA Tooling default to specifying the built-in-to-Java logging framework.</li>
  <li>The launchers were modified to support Java-style wild-card notation in the classpath.</li>
  <li>Fix for permissions on Linux for API Change Report.</li>
  <li>Restore a v2 method needed for backwards compatibility</li>
  <li>Improve the migration tool's use of classpath and error reporting</li>
  <li>Changes in the support for External Override Settings location were incorporated</li>
  <li>Fixes incorporated into UIMA 2.10.1 are included.</li>
  <li>Made JCas loading more permissive - no longer need to have the type system committed before loading</li>
  <li>JCasGen - add missing imports</li>
  <li>renamed the methods for getting empty UIMA arrays and lists to emptyXxxx form</li>
  <li>add methods supporting extended-for over all FSs in views</li> 
  <li>several bugs fixed - see issues fixed, for all issues after 18 Sept 2017</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 2.10.1.
 </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.  
   
<h2><a id="beta">Beta Release</a></h2>
<p>This is a beta release of version 3.0.0, being made to get 
wider community involvement in testing and feedback.  
At this point, the APIs are not expected to change, and features
should be frozen.</p>

<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>