    001    // Copyright 2011 The Apache Software Foundation
    002    //
    003    // Licensed under the Apache License, Version 2.0 (the "License");
    004    // you may not use this file except in compliance with the License.
    005    // You may obtain a copy of the License at
    006    //
    007    // http://www.apache.org/licenses/LICENSE-2.0
    008    //
    009    // Unless required by applicable law or agreed to in writing, software
    010    // distributed under the License is distributed on an "AS IS" BASIS,
    011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    012    // See the License for the specific language governing permissions and
    013    // limitations under the License.
    014
    015    package org.apache.tapestry5.jpa;
    016
    017    import java.net.URL;
    018    import java.util.Map;
    019
    020    import javax.persistence.SharedCacheMode;
    021    import javax.persistence.ValidationMode;
    022    import javax.persistence.spi.PersistenceUnitInfo;
    023    import javax.persistence.spi.PersistenceUnitTransactionType;
    024
    025    /**
    026     * Tapestry's mutable extension of {@link PersistenceUnitInfo} interface used for XML-less configuration
    027     * of persistence units.
    028     *
    029     * @since 5.3
    030     */
    031    public interface TapestryPersistenceUnitInfo extends PersistenceUnitInfo
    032    {
    033        /**
    034         * Set the the fully qualified name of the persistence provider implementation class.
    035         * Corresponds to the <code>provider</code> element in the <code>persistence.xml</code> file.
    036         *
    037         * @param persistenceProviderClassName
    038         *         persistence provider's class name
    039         */
    040        TapestryPersistenceUnitInfo persistenceProviderClassName(String persistenceProviderClassName);
    041
    042        /**
    043         * Set the transaction type of the entity managers. Corresponds to
    044         * the <code>transaction-type</code> attribute in the <code>persistence.xml</code> file.
    045         *
    046         * @param transactionType
    047         *         transition type to set
    048         */
    049        TapestryPersistenceUnitInfo transactionType(PersistenceUnitTransactionType transactionType);
    050
    051        /**
    052         * Set the non-JTA-enabled data source to be used by the persistence provider for accessing data outside a JTA
    053         * transaction. Corresponds to the named <code>non-jta-data-source</code> element in the
    054         * <code>persistence.xml</code> file.
    055         *
    056         * @param nonJtaDataSource
    057         *         data source to set
    058         */
    059        TapestryPersistenceUnitInfo nonJtaDataSource(String nonJtaDataSource);
    060
    061        /**
    062         * Set the JTA-enabled data source to be used by the persistence provider for accessing data outside a JTA
    063         * transaction. Corresponds to the named <code>jta-data-source</code> element in the
    064         * <code>persistence.xml</code> file.
    065         *
    066         * @param jtaDataSource
    067         *         data source to set
    068         */
    069        TapestryPersistenceUnitInfo jtaDataSource(String jtaDataSource);
    070
    071        /**
    072         * Add a managed class name to be used by persistence provider.
    073         * Corresponds to a named <code>class</code> element in the <code>persistence.xml</code> file.
    074         *
    075         * @param className
    076         *         class name to add
    077         * @see #addManagedClass(Class)
    078         */
    079        TapestryPersistenceUnitInfo addManagedClassName(String className);
    080
    081        /**
    082         * Add a managed class to be used by persistence provider.
    083         * Corresponds to a named <code>class</code> element in the <code>persistence.xml</code> file.
    084         *
    085         * @param clazz
    086         *         class to add
    087         * @see #addManagedClassName(String)
    088         */
    089        TapestryPersistenceUnitInfo addManagedClass(Class<?> clazz);
    090
    091        /**
    092         * Defines how the persistence provider must use a second-level cache for the persistence unit.
    093         * Corresponds to the <code>shared-cache-mode</code> element in the <code>persistence.xml</code> file.
    094         *
    095         * @param cacheMode
    096         *         cache mode to set
    097         */
    098        TapestryPersistenceUnitInfo sharedCacheMode(SharedCacheMode cacheMode);
    099
    100        /**
    101         * Set the validation mode to be used by the persistence provider for the persistence unit.
    102         * Corresponds to the <code>validation-mode</code> element in the <code>persistence.xml</code> file.
    103         *
    104         * @param validationMode
    105         *         validation mode to set
    106         */
    107        TapestryPersistenceUnitInfo validationMode(ValidationMode validationMode);
    108
    109        /**
    110         * Add a mapping file to be loaded by the persistence provider to determine the mappings for
    111         * the entity classes. Corresponds to a <code>mapping-file</code> element in the <code>persistence.xml</code> file.
    112         *
    113         * @param fileName
    114         *         mapping file name to add
    115         */
    116        TapestryPersistenceUnitInfo addMappingFileName(String fileName);
    117
    118        /**
    119         * Add a URLs for the jar file or exploded jar file directory that the persistence provider must examine
    120         * for managed classes of the persistence unit. Corresponds to a <code>jar-file</code> element in the
    121         * <code>persistence.xml</code> file.
    122         *
    123         * @param url
    124         *         url to add
    125         */
    126        TapestryPersistenceUnitInfo addJarFileUrl(URL url);
    127
    128        /**
    129         * Add a URLs for the jar file or exploded jar file directory that the persistence provider must examine
    130         * for managed classes of the persistence unit. Corresponds to a <code>jar-file</code> element in the
    131         * <code>persistence.xml</code> file.
    132         *
    133         * @param url
    134         *         url to add
    135         */
    136        TapestryPersistenceUnitInfo addJarFileUrl(String url);
    137
    138        /**
    139         * Add a property. Corresponds to a <code>property</code> element in the <code>persistence.xml</code> file.
    140         *
    141         * @param name
    142         *         property's name
    143         * @param value
    144         *         property's value
    145         */
    146        TapestryPersistenceUnitInfo addProperty(String name, String value);
    147
    148        /**
    149         * Defines whether classes in the root of the persistence unit that have not been explicitly listed
    150         * are to be included in the set of managed classes. Corresponds to the <code>exclude-unlisted-classes</code>
    151         * element in the <code>persistence.xml</code> file.
    152         *
    153         * @param exclude
    154         *         defines whether to exclude or not
    155         */
    156        TapestryPersistenceUnitInfo excludeUnlistedClasses(boolean exclude);
    157
    158        /**
    159         * {@link javax.persistence.spi.PersistenceProvider} allows creating an {@alink javax.persistence.EntityManagerFactory}
    160         * with a default EntityManager properties map. This operation allows contributing default properties for
    161         * EntityManager.
    162         *
    163         * @param properties
    164         *         properties to initialize EntityManagerFactory with
    165         */
    166        TapestryPersistenceUnitInfo setEntityManagerProperties(Map properties);
    167
    168        /**
    169         * @return Returns the supplied EntityManagerFactory properties. Returns null if not set
    170         */
    171        Map getEntityManagerProperties();
    172    }