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

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
    version="1.0">

    <!-- simply all annotated persistent entities will be part of this unit-->
    <persistence-unit name="TestUnit">
        <class>org.apache.openjpa.tools.maven.testentity.TestEntity</class>
<!-- TODO REMOVE
        <properties>
            <property name="openjpa.ConnectionDriverName" value="org.hsqldb.jdbcDriver" />
            <property name="openjpa.ConnectionURL" value="jdbc:hsqldb:file:openjpa-hsqldb" />
            <property name="openjpa.ConnectionUserName" value="SA" />
            <property name="openjpa.ConnectionPassword" value="" />
        </properties>
-->

    </persistence-unit>

</persistence>

