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

 ------
 openjpa
 ------

Welcome to the OpenJPA project site!

 OpenJPA is a set of Java persistence Application Program Interfaces (APIs) that are based on the Enterprise Java Beans 3.0 persistenace specification. This is the distribution and project management site for OpenJPA. For community resources, please see the {{{http://wiki.apache.org/incubator/OpenJPA}OpenJPA wiki}}.

 To download OpenJPA, please go to the {{{downloads.html}downloads}} page.


