<!--

    Copyright (c) 2018, 2021 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0 which is available at
    http://www.eclipse.org/legal/epl-2.0,
    or the Eclipse Distribution License v. 1.0 which is available at
    http://www.eclipse.org/org/documents/edl-v10.php.

    SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause

-->

<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 persistence_1_0.xsd"
     version="1.0">
     <persistence-unit name="weaver-pu"
          transaction-type="RESOURCE_LOCAL">
          <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
          <exclude-unlisted-classes>false</exclude-unlisted-classes>
          <mapping-file>META-INF/fish-orm.xml</mapping-file>
          <properties>
          </properties>
     </persistence-unit>

     <persistence-unit name="agent-pu" transaction-type="RESOURCE_LOCAL">
          <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
          <exclude-unlisted-classes>false</exclude-unlisted-classes>
          <properties>
          </properties>
     </persistence-unit>

     <persistence-unit name="jta-pu" transaction-type="JTA">
          <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
          <exclude-unlisted-classes>false</exclude-unlisted-classes>
          <properties>
          </properties>
     </persistence-unit>

     <persistence-unit name="static-small-pu" transaction-type="RESOURCE_LOCAL">
          <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
          <exclude-unlisted-classes>true</exclude-unlisted-classes>
          <class>org.eclipse.persistence.jpa.test.basic.model.Employee</class>
          <properties>
          </properties>
     </persistence-unit>

     <persistence-unit name="returninsert-pu" transaction-type="RESOURCE_LOCAL">
          <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
          <exclude-unlisted-classes>true</exclude-unlisted-classes>
          <class>org.eclipse.persistence.jpa.returninsert.model.ReturnInsertDetail</class>
          <class>org.eclipse.persistence.jpa.returninsert.model.ReturnInsertDetailEmbedded</class>
          <class>org.eclipse.persistence.jpa.returninsert.model.ReturnInsertDetailJoined</class>
          <class>org.eclipse.persistence.jpa.returninsert.model.ReturnInsertDetailParent</class>
          <class>org.eclipse.persistence.jpa.returninsert.model.ReturnInsertDetailPK</class>
          <class>org.eclipse.persistence.jpa.returninsert.model.ReturnInsertMasterPK</class>
          <class>org.eclipse.persistence.jpa.returninsert.model.ReturnInsertMaster</class>
          <class>org.eclipse.persistence.jpa.returninsert.model.ReturnInsertMasterJoined</class>
          <properties></properties>
     </persistence-unit>

     <persistence-unit name="cachedeadlockdetection-pu" transaction-type="RESOURCE_LOCAL">
          <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
          <exclude-unlisted-classes>true</exclude-unlisted-classes>
          <class>org.eclipse.persistence.jpa.test.cachedeadlock.model.CacheDeadLockDetectionMaster</class>
          <class>org.eclipse.persistence.jpa.test.cachedeadlock.model.CacheDeadLockDetectionDetail</class>
          <properties>
               <property name="eclipselink.concurrency.manager.waittime" value="1"/>
               <property name="eclipselink.concurrency.manager.maxsleeptime" value="2"/>
               <property name="eclipselink.concurrency.manager.maxfrequencytodumptinymessage" value="800"/>
               <property name="eclipselink.concurrency.manager.maxfrequencytodumpmassivemessage" value="1000"/>
               <property name="eclipselink.concurrency.manager.build.object.complete.waittime" value="5"/>
               <property name="eclipselink.concurrency.manager.allow.readlockstacktrace" value="true"/>
               <property name="eclipselink.concurrency.manager.allow.concurrencyexception" value="true"/>
               <property name="eclipselink.concurrency.manager.allow.interruptedexception" value="true"/>
          </properties>
     </persistence-unit>

     <persistence-unit name="cachedeadlocksemaphore-pu" transaction-type="RESOURCE_LOCAL">
          <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
          <exclude-unlisted-classes>true</exclude-unlisted-classes>
          <class>org.eclipse.persistence.jpa.test.cachedeadlock.model.CacheDeadLockDetectionMaster</class>
          <class>org.eclipse.persistence.jpa.test.cachedeadlock.model.CacheDeadLockDetectionDetail</class>
          <properties>
               <property name="eclipselink.concurrency.manager.waittime" value="1"/>
               <property name="eclipselink.concurrency.manager.maxsleeptime" value="2"/>
               <property name="eclipselink.concurrency.manager.maxfrequencytodumptinymessage" value="1000"/>
               <property name="eclipselink.concurrency.manager.maxfrequencytodumpmassivemessage" value="2000"/>
               <property name="eclipselink.concurrency.manager.allow.readlockstacktrace" value="true"/>
               <property name="eclipselink.concurrency.manager.allow.concurrencyexception" value="true"/>
               <property name="eclipselink.concurrency.manager.allow.interruptedexception" value="true"/>
               <property name="eclipselink.concurrency.manager.object.building.semaphore" value="true"/>
               <property name="eclipselink.concurrency.manager.object.building.no.threads" value="5"/>
               <property name="eclipselink.concurrency.manager.write.lock.manager.semaphore" value="true"/>
               <property name="eclipselink.concurrency.manager.write.lock.manager.no.threads" value="6"/>
               <property name="eclipselink.concurrency.semaphore.max.time.permit" value="7"/>
               <property name="eclipselink.concurrency.semaphore.log.timeout" value="8"/>
          </properties>
     </persistence-unit>

</persistence>
