<?xml version="1.0" encoding="UTF-8"?>
<!--
 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.
-->
<chapter id="openjpa_legal">
    <title>
        Legal
    </title>
    <indexterm zone="openjpa_legal">
        <primary>
            Legal
        </primary>
    </indexterm>
    <para>
    </para>
    <para>
The Apache OpenJPA website can be found at:
<ulink url="http://openjpa.apache.org/"> http://openjpa.apache.org </ulink>
    </para>
    <para>
    </para>

    <section id="openjpa_legal_license">
        <title>
            License
        </title>
        <para>
Apache OpenJPA is released under the <ulink url="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache Software License Version 2.0</ulink>
        </para>
        <para>
Apache OpenJPA includes the persistence and orm schemas from the JPA specifications and elects to include this software in this distribution under the <ulink url="https://glassfish.dev.java.net/public/CDDL+GPL.html">CDDL license.</ulink>
        </para>
        <para>
Apache OpenJPA includes software developed by the SERP project, which uses the <ulink url="http://www.opensource.org/licenses/bsd-license.php">BSD license</ulink>
        </para>
    </section>

    <section id="openjpa_legal_notice">
        <title>
            Notice
        </title>
        <para>
This product includes software developed by
<ulink url="http://www.apache.org/"> The Apache Software Foundation (http://www.apache.org/).</ulink>
        </para>
        <para>
The openjpa-all aggregate JAR includes software developed by the:
            <itemizedlist spacing="compact">
                <listitem><para>
    Apache Commons Collections project
                </para></listitem>
                <listitem><para>
    Apache Commons Lang project
                </para></listitem>
                <listitem><para>
    Apache Commons Logging project
                </para></listitem>
                <listitem><para>
    Apache Commons Pool project
                </para></listitem>
                <listitem><para>
    Apache Geronimo project (JMS 1.1, JTA 1.1 and JPA 2.0 spec APIs)
                </para></listitem>
                <listitem><para>
    JCP JSR-317 JPA 2.0 schemas
                </para></listitem>
                <listitem><para>
    SERP project
                </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id="openjpa_legal_copyright">
        <title>
            Copyrights
        </title>
        <section id="openjpa_legal_copyright_apache">
            <title>Apache</title>
            <para>
Copyright (C) 2006,2011 The Apache Software Foundation.
            </para>
            <para>
Apache, OpenJPA and the Apache feather logo are trademarks of Apache Software Foundation.
            </para>
        </section>
        <section id="openjpa_legal_copyright_serp">
            <title>Serp</title>
            <para>
OpenJPA includes software developed by the SERP project.
            </para>
            <para>
Copyright (c) 2002-2006, A. Abram White. All rights reserved.
            </para>
        </section>
        <section id="openjpa_legal_copyright_sun">
            <title>Sun</title>
            <para>
OpenJPA includes the persistence and orm schemas from the JPA specifications.
            </para>
            <para>
Copyright 2005-2009 Sun Microsystems, Inc. All rights reserved.
            </para>
            <para>
OpenJPA elects to include this software in this distribution under the CDDL license.
            </para>
            <para>
You can obtain a copy of the License at:
<ulink url="https://glassfish.dev.java.net/public/CDDL+GPL.html">https://glassfish.dev.java.net/public/CDDL+GPL.html</ulink>
            </para>
            <para>
The source code is available at:
<ulink url="http://java.net/projects/glassfish/sources/svn/show">http://java.net/projects/glassfish/sources/svn/show</ulink>
or <ulink url="http://jcp.org/en/jsr/detail?id=317"> http://jcp.org/en/jsr/detail?id=317 </ulink>
            </para>
        </section>
        <section id="openjpa_legal_copyright_other">
            <title>Other</title>
            <para>
OpenJPA includes software written by Miroslav Nachev.
            </para>
            <para>
OpenJPA uses test code written by Charles Tillman.
            </para>
            <para>
Oracle and Java are registered trademarks of Oracle and/or its affiliates.
Other names may be trademarks of their respective owners.
            </para>
        </section>
    </section>
</chapter>
