Package com.isomorphic.jpa

# Class EMFProviderCMT

java.lang.Object
com.isomorphic.jpa.EMFProviderCMT

All Implemented Interfaces:
  `EMFProviderInterface`

public class EMFProviderCMT extends Object implements EMFProviderInterface
EMF provider for Container Managed Transactions (CMT).

Use this provider if you want to use JPA data source in EJB environment (accessing JPA data source from enterprise bean). Values from jpa.entityManager and jpa.entityManagerFactory properties are used to locate `EntityManager` and `EntityManagerFactory` in container's environment context via JNDI. For this implementation to work persistence-context-ref and persistence-unit-ref should be declared for enterprise bean in /META-INF/ejb-jar.xml. For example:

     <?xml version="1.0" encoding="UTF-8"?>
     <ejb-jar
          version = "3.0"
          xmlns = "http://java.sun.com/xml/ns/javaee"
          xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
          <enterprise-beans>
              <session>
                  <ejb-name>TestEJB</ejb-name>
                  <persistence-context-ref>
                      <persistence-context-ref-name>REFERENCE_TO_ENTITY_MANAGER</persistence-context-ref-name>
                      <persistence-unit-name>PERSISTENCE_UNIT_NAME</persistence-unit-name>
                  </persistence-context-ref>
                  <persistence-unit-ref>
                      <persistence-unit-ref-name>REFERENCE_TO_ENTITY_MANAGER_FACTORY</persistence-unit-ref-name>
                      <persistence-unit-name>PERSISTENCE_UNIT_NAME</persistence-unit-name>
                  </persistence-unit-ref>
             </session>
         </enterprise-beans>
     </ejb-jar>

`getTransaction()` will return instance of `EJBContext` located in "java:comp/EJBContext" in JNDI. Transaction will be committed by container. To roll back transaction `EJBContext.setRollbackOnly()` is used.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `String`
  `entityManagerFactoryRef`
  Name of the reference to managed entity manager factory.
  `String`
  `entityManagerRef`
  Name of the reference to container managed entity manager.

  ### Fields inherited from interface com.isomorphic.jpa.EMFProviderInterface

  `ENTITY_MANAGER, ENTITY_MANAGER_FACTORY, JPA_ENTITY_MANAGER, JPA_ENTITY_MANAGER_FACTORY, JPA_PERSISTENCE_UNIT_NAME, JPA_TRANSACTION, PERSISTENCE_UNIT_NAME, TRANSACTION`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `EMFProviderCMT()`
  Creates new EMF provider.
  `EMFProviderCMT(String entityManagerRef, String entityManagerFactoryRef)`
  Creates new EMF provider with specified context reference names.
  `EMFProviderCMT(Properties config)`
  Creates new EMF provider.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `commitTransaction(Object tx)`
  Does nothing - container will commit transaction.
  `jakarta.persistence.EntityManagerFactory`
  `get()`
  Returns `EntityManagerFactory` found in container's environment context.
  `jakarta.persistence.EntityManager`
  `getEntityManager()`
  Returns `EntityManager` found in container's environment context.
  `Object`
  `getTransaction(jakarta.persistence.EntityManager em)`
  Returns `EJBContext` found in container's environment context.
  `void`
  `returnEntityManager(jakarta.persistence.EntityManager em)`
  Does nothing - container will close `EntityManager`.
  `void`
  `rollbackTransaction(Object tx)`
  Sets rollback flag for transaction by `tx.setRollbackOnly()`.

- ## Field Details

  - ### entityManagerRef

    public String entityManagerRef
    Name of the reference to container managed entity manager.

  - ### entityManagerFactoryRef

    public String entityManagerFactoryRef
    Name of the reference to managed entity manager factory.

- ## Constructor Details

  - ### EMFProviderCMT

    public EMFProviderCMT()
    Creates new EMF provider. Values from jpa.entityManager and jpa.entityManagerFactory properties are used to locate `EntityManager` and `EntityManagerFactory` in container's environment context.

  - ### EMFProviderCMT

    public EMFProviderCMT(Properties config)
    Creates new EMF provider. Values from provided properties entityManager and entityManagerFactory are used to locate `EntityManager` and `EntityManagerFactory` in container's environment context.
    Parameters:
      `config` - `Properties` for provider configuration.

  - ### EMFProviderCMT

    public EMFProviderCMT(String entityManagerRef, String entityManagerFactoryRef)
    Creates new EMF provider with specified context reference names.
    Parameters:
      `entityManagerRef` - `String` name of context reference to entity manager.
      `entityManagerFactoryRef` - `String` name of context reference to entity manager factory.

- ## Method Details

  - ### get

    public jakarta.persistence.EntityManagerFactory get()
    Returns `EntityManagerFactory` found in container's environment context.
    Specified by:
      `get` in interface `EMFProviderInterface`
    Returns:
      `EntityManagerFactory` can be used to acquire meta-data (for JPA 2.0) or implement "application managed entity manager" pattern.

  - ### getEntityManager

    public jakarta.persistence.EntityManager getEntityManager() throws jakarta.persistence.PersistenceException
    Returns `EntityManager` found in container's environment context.
    Specified by:
      `getEntityManager` in interface `EMFProviderInterface`
    Returns:
      `EntityManager` for persistence operations.
    Throws:
      `jakarta.persistence.PersistenceException` - if unable to acquire `EntityManager`.

  - ### returnEntityManager

    public void returnEntityManager(jakarta.persistence.EntityManager em)
    Does nothing - container will close `EntityManager`.
    Specified by:
      `returnEntityManager` in interface `EMFProviderInterface`
    Parameters:
      `em` - `EntityManager` which should be closed.

  - ### getTransaction

    public Object getTransaction(jakarta.persistence.EntityManager em) throws Exception
    Returns `EJBContext` found in container's environment context.
    Specified by:
      `getTransaction` in interface `EMFProviderInterface`
    Parameters:
      `em` - `EntityManager` needed if joining to existing transaction or null.
    Returns:
      `Object` Transaction for persistence operations.
    Throws:
      `jakarta.persistence.PersistenceException` - if unable to acquire or open transaction.
      `Exception` - if unable to acquire or open transaction.

  - ### commitTransaction

    public void commitTransaction(Object tx) throws Exception
    Does nothing - container will commit transaction.
    Specified by:
      `commitTransaction` in interface `EMFProviderInterface`
    Parameters:
      `tx` - `Object` transaction to be commited.
    Throws:
      `Exception` - occured while committing transaction.

  - ### rollbackTransaction

    public void rollbackTransaction(Object tx)
    Sets rollback flag for transaction by `tx.setRollbackOnly()`.
    Specified by:
      `rollbackTransaction` in interface `EMFProviderInterface`
    Parameters:
      `tx` - `Object` transaction to be rolled back.