<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>About</title>
</head>
<body lang="EN-US">
<h2>About This Content</h2>

<p>June 16, 2008</p>
<h3>License</h3>

<p>The Eclipse Foundation makes available all content in this
plug-in (&quot;Content&quot;). Unless otherwise indicated below, the
Content is provided to you under the terms and conditions of the Eclipse
Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is
available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

<p>If you did not receive this Content directly from the Eclipse
Foundation, the Content is being redistributed by another party
(&quot;Redistributor&quot;) and different terms and conditions may apply
to your use of any object code in the Content. Check the Redistributor's
license that was provided with the Content. If no such license exists,
contact the Redistributor. Unless otherwise indicated below, the terms
and conditions of the EPL still apply to any source code in the Content
and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>

<h3>Third Party Content</h3>

<p>The Content includes items that have been sourced from third
parties as set out below. If you did not receive this Content directly
from the Eclipse Foundation, the following is provided for informational
purposes only, and you should look to the Redistributor&rsquo;s license
for terms and conditions of use.</p>

<h4>Apache ODE 2.0 beta2</h4>

<p>The plug-in includes software developed by The Apache Software
Foundation as part of the ODE project.</p>

<p>Your use of the ODE code subject to the terms and conditions of
the Apache License, Version 2.0. A copy of the license is contained in
the file <a href="about_files/asl-v20.txt">asl-v20.txt</a> and is also
available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.


<p>The Apache attribution <a href="about_files/NOTICE.ODE">NOTICE.ODE</a>
file is included with the Content in accordance with 4d of the Apache
License, Version 2.0.</p>

<p>Source code and further information about Apache ODE is available
at <a href="http://ode.apache.org/">http://ode.apache.org/</a>.</p>

<p>ODE includes the following software which is also covered by
Apache License, Version 2.0:</p>

<ul>
	<li>Parts of the Geronimo Application Server (geronimo-*.jar)
	developed by The Apache Software Foundation as part of the Apache
	Geronimo Project. Source code and further information is available at <a
		href="http://geronimo.apache.org/">http://geronimo.apache.org/</a>.</li>
	<li>TranQL 1.1. Source code and further information is available
	at <a href="http://tranql.codehaus.org/">http://tranql.codehaus.org/</a>.</li>
</ul>

<h4>Apache OpenJPA 1.1.0</h4>

<p>The plug-in includes software developed by The Apache Software
Foundation as part of the Apache OpenJPA project.</p>

<p>Your use of the Apache OpenJPA code subject to the terms and
conditions of the Apache License, Version 2.0. A copy of the license is
contained in the file <a href="about_files/LICENSE.txt">LICENSE.txt</a>
and is also available at <a
	href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.

<p>The Apache attribution <a href="about_files/NOTICE.OpenJPA">NOTICE.OpenJPA</a>
file is included with the Content in accordance with 4d of the Apache
License, Version 2.0.</p>

<p>Source code and further information about Apache OpenJPA is
available at <a href="http://openjpa.apache.org/">http://openjpa.apache.org/</a>.</p>

This bundles includes Serp 1.13.1 (serp-1.13.1.jar), Copyright (c)
2002-2007, A. Abram White. The Serp license is included in
<a href="about_files/serp-LICENSE.txt">about_files/serp-LICENSE.txt</a>
. Source code and further information is available at
<a href="http://serp.sourceforge.net/">http://serp.sourceforge.net/</a>.

</body>
</html>