blob: 4071f73456b7127aadede1cf1b40b4ab71148f79 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2009 Oracle. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* The API for this class and its comments are derived from the JPA 2.0 specification
* which is developed under the Java Community Process (JSR 317) and is copyright
* Sun Microsystems, Inc.
*
* Contributors:
* dclarke - Java Persistence 2.0 - Proposed Final Draft (March 13, 2009)
* Specification and licensing terms available from
* http://jcp.org/en/jsr/detail?id=317
*
* EARLY ACCESS - PUBLIC DRAFT
* This is an implementation of an early-draft specification developed under the
* Java Community Process (JCP) and is made available for testing and evaluation
* purposes only. The code is not compatible with any specification of the JCP.
******************************************************************************/
package javax.persistence.spi;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
/**
* Interface implemented by the persistence provider.
*
* It is invoked by the container in Java EE environments and by the Persistence
* class in Java SE environments to create an EntityManagerFactory.
*
* It is also invoked by the PersistenceUtil implementation to determine the
* load status of an entity or entity attribute.
*/
public interface PersistenceProvider {
/**
* Called by Persistence class when an EntityManagerFactory is to be
* created.
*
* @param emName
* The name of the persistence unit
* @param map
* A Map of properties for use by the persistence provider. These
* properties may be used to override the values of the
* corresponding elements in the persistence.xml file or specify
* values for properties not specified in the persistence.xml
* (and may be null if no properties are specified).
* @return EntityManagerFactory for the persistence unit, or null if the
* provider is not the right provider
*/
public EntityManagerFactory createEntityManagerFactory(String emName, Map map);
/**
* Called by the container when an EntityManagerFactory is to be created.
*
* @param info
* Metadata for use by the persistence provider
* @return EntityManagerFactory for the persistence unit specified by the
* metadata
* @param map
* A Map of integration-level properties for use by the
* persistence provider (may be null if no properties are
* specified). If a Bean Validation provider is present in the
* classpath, the container must pass the ValidatorFactory
* instance in the map with the key
* "javax.persistence.validation.factory".
*/
public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map);
/**
* If the provider determines that the entity has been provided by itself
* and that the state of the specified attribute has been loaded, this
* method returns LoadState.LOADED. If the provider determines that the
* entity has been provided by itself and that either entity attributes with
* FetchType EAGER have not been loaded or that the state of the specified
* attribute has not been loaded, this methods returns LoadState.NOT_LOADED.
* If a provider cannot determine the load state, this method returns
* LoadState.UNKNOWN. The provider's implementation of this method must not
* obtain a reference to an attribute value, as this could trigger the
* loading of entity state if the entity has been provided by a different
* provider.
*
* @param entity
* @param attributeName
* name of attribute whose load status is to be determined
* @return load status of the attribute
*/
public LoadState isLoadedWithoutReference(Object entity, String attributeName);
/**
* If the provider determines that the entity has been provided by itself
* and that the state of the specified attribute has been loaded, this
* method returns LoadState.LOADED. If a provider determines that the entity
* has been provided by itself and that either the entity attributes with
* FetchType EAGER have not been loaded or that the state of the specified
* attribute has not been loaded, this method returns return
* LoadState.NOT_LOADED. If the provider cannot determine the load state,
* this method returns LoadState.UNKNOWN. The provider's implementation of
* this method is permitted to obtain a reference to the attribute value.
* (This access is safe because providers which might trigger the loading of
* the attribute state will have already been determined by
* isLoadedWithoutReference. )
*
* @param entity
* @param attributeName
* name of attribute whose load status is to be determined
* @return load status of the attribute
*/
public LoadState isLoadedWithReference(Object entity, String attributeName);
/**
* If the provider determines that the entity has been provided by itself
* and that the state of all attributes for which FetchType EAGER has been
* specified have been loaded, this method returns LoadState.LOADED. If the
* provider determines that the entity has been provided by itself and that
* not all attributes with FetchType EAGER have been loaded, this method
* returns LoadState.NOT_LOADED. If the provider cannot determine if the
* entity has been provided by itself, this method returns
* LoadState.UNKNOWN. The provider's implementation of this method must not
* obtain a reference to any attribute value, as this could trigger the
* loading of entity state if the entity has been provided by a different
* provider.
*
* @param entity
* whose loaded status is to be determined
* @return load status of the entity
*/
public LoadState isLoaded(Object entity);
}