<!--
 * 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 C++ v2.3.0 Releate Notes</title>
</head>
<body>
<h1>Apache UIMA (Unstructured Information Management Architecture) for C++ v2.3.0 Release Notes</h1>

<h2>Contents</h2>
<p>
<a href="#what.is.uima">1. What is UIMA?</a><br/>
<a href="#major.changes">2. Major Changes in this Release</a><br/>
<a href="#get.involved">3. How to Get Involved</a><br/>
<a href="#report.issues">4. How to Report Issues</a><br/>
<a href="#more.info">5. More Documentation on Apache UIMA C++</a><br/>
</p>  
   
<h2><a name="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 name="major.changes">2. Major Changes in this Release</a></h2>
<p>
This section describes what has changed between version 2.2.2 and version 2.3.0 of 
UIMA C++.
</p> 
  
<!--
tutorial and other interlock with Java?
-->
  
<h3>2.1. Enhancements to C++ service wrapper for UIMA AS</h3>
<p>
<ul>
<li>Separate JMS listener for getMeta requests (same as Java services)</li>
<li>Automatic reconnect to AMQ broker when broker becomes available again</li>
<li>Fixed bug with termination when deployed from Java as separate process</li>
<li>Fixed bug with timing statistics reported to JMX when deployed from Java</li>
<li>Fixed bug with capability specs returned in getMeta reply</li>
<li>Fixed bug where elementType was not returned in getMeta</li>
<li>Fixed bug with out-of-typesystem data sending back invalid XML strings</li>
<li>Fixed bug where feature reference updates were not sent back</li>
</ul>
</p>

<h3>2.2. Enchancements to runAECpp application</h3>
<p>
<ul>
<li>Added -lenient option to ignore out-of-typesystem data for Xmi format input files</li>
<li>Options added to support multi-threaded stress testing of a C++ annotator</li>
<li>Output CAS files written in XMI format</li>
</ul>
</p>

<h3>2.3. Parameter overrides supported for C++ annotators colocated with JVM</h3>
<p>
<ul>
<li>Parameter overrides now supported for C++ annotators that are included in Java aggregates
as colocated components, or from Java application instantiating C++ annotators directly</li>
</ul>
</p>

<h3>2.4. UIMA AS C++ deployment descriptor sample added</h3>
<p>
<ul>
<li>UIMA C++ services can be deployed from Java as separate processes. A sample descriptor is
included along with associated documentation.</li>
</ul>
</p>
  
<h2><a name="get.involved">3. 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://incubator.apache.org/uima/get-involved.html">
  http://incubator.apache.org/uima/get-involved.html</a>.
</p>
  
<h2><a name="report.issues">4. 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>
  
<h2><a name="more.info">5. More Documentation on Apache UIMA C++</a></h2>
<p>
Please see <a href="docs/overview_and_setup.html">Overview and Setup</a>
for a high level overview of UIMA C++,
and <a href="docs/html/index.html">Doxygen</a> for details on the UIMA C++ APIs.
</p>
        
</body>
</html>
