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