Class EntityManagerFactoryImpl

java.lang.Object
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl
All Implemented Interfaces:
EntityManagerFactory, PersistenceUnitUtil, PersistenceUtil, AutoCloseable, JpaEntityManagerFactory

public class EntityManagerFactoryImpl extends Object implements EntityManagerFactory, PersistenceUnitUtil, JpaEntityManagerFactory
Wraps our implementation of EntityManagerFactory Most operations are forwarded to the delegate. This wrapper is used to enable the refreshMetadata functionality which allows you to switch the underlying metadata for an EMF after deploy time.
  • Field Details

  • Constructor Details

    • EntityManagerFactoryImpl

      public EntityManagerFactoryImpl(AbstractSession serverSession)
      Will return an instance of the Factory. Should only be called by EclipseLink.
    • EntityManagerFactoryImpl

      public EntityManagerFactoryImpl(EntityManagerSetupImpl setupImpl, Map properties)
    • EntityManagerFactoryImpl

      public EntityManagerFactoryImpl(String persistenceUnitName, Map<String,Object> properties, List<ClassDescriptor> descriptors)
      Create a dynamic persistence unit which does not use the persistence.xml. Instead all configuration is driven from the provided persistence unit properties and descriptors.
  • Method Details

    • getIdentifier

      public static Object getIdentifier(Object entity, AbstractSession session)
      Returns the id of the entity. A generated id is not guaranteed to be available until after the database insert has occurred. Returns null if the entity does not yet have an id
      Returns:
      id of the entity
      Throws:
      IllegalArgumentException - if the entity is found not to be an entity.
    • isLoaded

      public static Boolean isLoaded(Object entity, AbstractSession session)
      Determine the load state of an entity belonging to the persistence unit. This method can be used to determine the load state of an entity passed as a reference. An entity is considered loaded if all attributes for which FetchType EAGER has been specified have been loaded. The isLoaded(Object, String) method should be used to determine the load state of an attribute. Not doing so might lead to unintended loading of state.
      Parameters:
      entity - whose load state is to be determined
      Returns:
      false if the entity has not been loaded, else true.
    • isLoaded

      public static Boolean isLoaded(Object entity, String attributeName, AbstractSession session)
      Determine the load state of a given persistent attribute of an entity belonging to the persistence unit.
      Parameters:
      entity - containing the attribute
      attributeName - name of attribute whose load state is to be determined
      Returns:
      false if entity's state has not been loaded or if the attribute state has not been loaded, otherwise true
    • isLoaded

      public static boolean isLoaded(Object entity, String attributeName, DatabaseMapping mapping)
      Check whether a named attribute on a given entity with a given mapping has been loaded. This method will check the valueholder or indirect collection for LAZY ForeignReferenceMappings to see if has been instantiated and otherwise check the fetch group.
    • refreshMetadata

      public void refreshMetadata(Map<String,Object> properties)
      ADVANCED: Re-bootstrap this factory. This method will rebuild the EntityManagerFactory. It should be used in conjunction with a MetadataSource to allow mappings to be changed in a running system. All existing EntityMangers will continue to function with the old metadata, but new factories will use the new metadata.
      Specified by:
      refreshMetadata in interface JpaEntityManagerFactory
    • getSessionBroker

      public SessionBroker getSessionBroker()
      INTERNAL: Returns the SessionBroker that the Factory will be using and initializes it if it is not available. This method makes use of the partially constructed session stored in our setupImpl and completes its construction TODO: should throw IllegalStateException if not SessionBroker
      Specified by:
      getSessionBroker in interface JpaEntityManagerFactory
    • getServerSession

      public ServerSession getServerSession()
      INTERNAL: Returns the ServerSession that the Factory will be using and initializes it if it is not available. This method makes use of the partially constructed session stored in our setupImpl and completes its construction
      Specified by:
      getServerSession in interface JpaEntityManagerFactory
    • close

      public void close()
      Closes this factory, releasing any resources that might be held by this factory. After invoking this method, all methods on the instance will throw an IllegalStateException, except for isOpen(), which will return false.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface EntityManagerFactory
    • isOpen

      public boolean isOpen()
      Indicates whether or not this factory is open. Returns true until a call to close() is made.
      Specified by:
      isOpen in interface EntityManagerFactory
    • createEntityManager

      public EntityManager createEntityManager()
      PUBLIC: Returns an EntityManager for this deployment.
      Specified by:
      createEntityManager in interface EntityManagerFactory
    • createEntityManager

      public EntityManager createEntityManager(Map properties)
      PUBLIC: Returns an EntityManager for this deployment.
      Specified by:
      createEntityManager in interface EntityManagerFactory
    • createEntityManager

      public EntityManager createEntityManager(SynchronizationType synchronizationType)
      Specified by:
      createEntityManager in interface EntityManagerFactory
    • createEntityManager

      public EntityManager createEntityManager(SynchronizationType synchronizationType, Map map)
      Specified by:
      createEntityManager in interface EntityManagerFactory
    • createEntityManagerImpl

      protected EntityManagerImpl createEntityManagerImpl(Map properties, SynchronizationType syncType)
    • unwrap

      Gets the underlying implementation of the EntityManagerFactory. This method will return a version of EntityManagerFactory that is based on the available metadata at the time it is called. Future calls to refresh will not affect that metadata on this EntityManagerFactory.
      Specified by:
      unwrap in interface JpaEntityManagerFactory
    • verifyOpen

      protected void verifyOpen()
    • getProperty

      public Object getProperty(String name)
      The method return user defined property passed in from EntityManagerFactory.
    • getBeginEarlyTransaction

      public boolean getBeginEarlyTransaction()
      Return default join existing transaction property, allows reading through write connection.
    • setBeginEarlyTransaction

      public void setBeginEarlyTransaction(boolean beginEarlyTransaction)
      Set default join existing transaction property, allows reading through write connection.
    • getFlushMode

      public FlushModeType getFlushMode()
      Return default property, allows flush before query to be avoided.
    • setFlushMode

      public void setFlushMode(FlushModeType flushMode)
      Set default property, allows flush before query to be avoided.
    • getReferenceMode

      public ReferenceMode getReferenceMode()
      Return default property, allows weak unit of work references.
    • setReferenceMode

      public void setReferenceMode(ReferenceMode referenceMode)
      Set default property, allows weak unit of work references.
    • getCloseOnCommit

      public boolean getCloseOnCommit()
      Return default property to avoid resuming unit of work if going to be closed on commit anyway.
    • setCloseOnCommit

      public void setCloseOnCommit(boolean closeOnCommit)
      Set default property to avoid resuming unit of work if going to be closed on commit anyway.
    • getPersistOnCommit

      public boolean getPersistOnCommit()
      Return default property to avoid discover new objects in unit of work if application always uses persist.
    • getPersistenceUnitUtil

      public PersistenceUnitUtil getPersistenceUnitUtil()
      Return interface providing access to utility methods for the persistence unit.
      Specified by:
      getPersistenceUnitUtil in interface EntityManagerFactory
      Returns:
      PersistenceUnitUtil interface
      Throws:
      IllegalStateException - if the entity manager factory has been closed.
    • setPersistOnCommit

      public void setPersistOnCommit(boolean persistOnCommit)
      Set default property to avoid discover new objects in unit of work if application always uses persist.
    • getCommitWithoutPersistRules

      public boolean getCommitWithoutPersistRules()
      Return default property to avoid discover new objects in unit of work if application always uses persist.
    • setCommitWithoutPersistRules

      public void setCommitWithoutPersistRules(boolean commitWithoutPersistRules)
      Set default property to avoid discover new objects in unit of work if application always uses persist.
    • getFlushClearCache

      public String getFlushClearCache()
      Return the default FlashClearCache mode to be used. Relevant only in case call to flush method followed by call to clear method.
      See Also:
    • setFlushClearCache

      public void setFlushClearCache(String flushClearCache)
      Set the default FlashClearCache mode to be used. Relevant only in case call to flush method followed by call to clear method.
      See Also:
    • shouldValidateExistence

      public boolean shouldValidateExistence()
      Return the default to determine if does-exist should be performed on persist.
    • setShouldValidateExistence

      public void setShouldValidateExistence(boolean shouldValidateExistence)
      Set the default to determine if does-exist should be performed on persist.
    • getCache

      public Cache getCache()
      Access the cache that is associated with the entity manager factory (the "second level cache").
      Specified by:
      getCache in interface EntityManagerFactory
      Returns:
      instance of the Cache interface
      Throws:
      IllegalStateException - if the entity manager factory has been closed
      Since:
      Java Persistence 2.0
      See Also:
    • getProperties

      public Map<String,Object> getProperties()
      Specified by:
      getProperties in interface EntityManagerFactory
      Since:
      Java Persistence API 2.0
      See Also:
    • getDatabaseSession

      public DatabaseSessionImpl getDatabaseSession()
      Description copied from interface: JpaEntityManagerFactory
      Returns the DatabaseSession that the Factory will be using and initializes it if it is not available.
      Specified by:
      getDatabaseSession in interface JpaEntityManagerFactory
    • getCriteriaBuilder

      public CriteriaBuilder getCriteriaBuilder()
      Specified by:
      getCriteriaBuilder in interface EntityManagerFactory
      Since:
      Java Persistence 2.0
      See Also:
    • getMetamodel

      public Metamodel getMetamodel()
      Return an instance of Metamodel interface for access to the metamodel of the persistence unit.
      Specified by:
      getMetamodel in interface EntityManagerFactory
      Returns:
      Metamodel instance
      Throws:
      IllegalStateException - if the entity manager factory has been closed.
      Since:
      Java Persistence 2.0
      See Also:
    • setMetamodel

      public void setMetamodel(Metamodel aMetamodel)
      INTERNAL: Convenience function to allow us to reset the Metamodel in the possible case that we want to regenerate it. This function is outside of the JPA 2.0 specification.
      Since:
      Java Persistence 2.0
    • isLoaded

      public boolean isLoaded(Object entity, String attributeName)
      Determine the load state of a given persistent attribute of an entity belonging to the persistence unit.
      Specified by:
      isLoaded in interface PersistenceUnitUtil
      Specified by:
      isLoaded in interface PersistenceUtil
      Parameters:
      entity - containing the attribute
      attributeName - name of attribute whose load state is to be determined
      Returns:
      false if entity's state has not been loaded or if the attribute state has not been loaded, otherwise true
    • isLoaded

      public boolean isLoaded(Object entity)
      Determine the load state of an entity belonging to the persistence unit. This method can be used to determine the load state of an entity passed as a reference. An entity is considered loaded if all attributes for which FetchType EAGER has been specified have been loaded. The isLoaded(Object, String) method should be used to determine the load state of an attribute. Not doing so might lead to unintended loading of state.
      Specified by:
      isLoaded in interface PersistenceUnitUtil
      Specified by:
      isLoaded in interface PersistenceUtil
      Parameters:
      entity - whose load state is to be determined
      Returns:
      false if the entity has not been loaded, else true.
    • getIdentifier

      public Object getIdentifier(Object entity)
      Returns the id of the entity. A generated id is not guaranteed to be available until after the database insert has occurred. Returns null if the entity does not yet have an id
      Specified by:
      getIdentifier in interface PersistenceUnitUtil
      Returns:
      id of the entity
      Throws:
      IllegalStateException - if the entity is found not to be an entity.
    • getCommitOrder

      public UnitOfWork.CommitOrderType getCommitOrder()
      Return if updates should be ordered by primary key to avoid possible database deadlocks.
    • setCommitOrder

      public void setCommitOrder(UnitOfWork.CommitOrderType commitOrder)
      Set updates should be ordered by primary key to avoid possible database deadlocks.
    • addNamedQuery

      public void addNamedQuery(String name, Query query)
      Specified by:
      addNamedQuery in interface EntityManagerFactory
    • unwrap

      public <T> T unwrap(Class<T> cls)
      Specified by:
      unwrap in interface EntityManagerFactory
    • addNamedEntityGraph

      public <T> void addNamedEntityGraph(String graphName, EntityGraph<T> entityGraph)
      Specified by:
      addNamedEntityGraph in interface EntityManagerFactory