com.isomorphic.jpa

## Class EMFProviderCMT

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

- All Implemented Interfaces:
    EMFProviderInterface

      public class EMFProviderCMT
      extends java.lang.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 and Description
    --- | ---
    `java.lang.String` | `entityManagerFactoryRef` Name of the reference to managed entity manager factory.
    `java.lang.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 and Description
    `EMFProviderCMT()` Creates new EMF provider.
    `EMFProviderCMT(java.util.Properties config)` Creates new EMF provider.
    `EMFProviderCMT(java.lang.String entityManagerRef, java.lang.String entityManagerFactoryRef)` Creates new EMF provider with specified context reference names.

  - ### Method Summary

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

- - ### Field Detail

    - #### entityManagerRef

          public java.lang.String entityManagerRef

      Name of the reference to container managed entity manager.

    - #### entityManagerFactoryRef

          public java.lang.String entityManagerFactoryRef

      Name of the reference to managed entity manager factory.

  - ### Constructor Detail

    - #### 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(java.util.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(java.lang.String entityManagerRef,
                                java.lang.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 Detail

    - #### get

          public javax.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 javax.persistence.EntityManager getEntityManager()
                                                           throws javax.persistence.PersistenceException

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

    - #### returnEntityManager

          public void returnEntityManager(javax.persistence.EntityManager em)

      Does nothing - container will close `EntityManager`.
      Specified by:
        `returnEntityManager` in interface `EMFProviderInterface`
      Parameters:
        `em` - `EntityManager` which should be closed.

    - #### getTransaction

          public java.lang.Object getTransaction(javax.persistence.EntityManager em)
                                          throws java.lang.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:
        `javax.persistence.PersistenceException` - if unable to acquire or open transaction.
        `java.lang.Exception` - if unable to acquire or open transaction.

    - #### commitTransaction

          public void commitTransaction(java.lang.Object tx)
                                 throws java.lang.Exception

      Does nothing - container will commit transaction.
      Specified by:
        `commitTransaction` in interface `EMFProviderInterface`
      Parameters:
        `tx` - `Object` transaction to be commited.
      Throws:
        `java.lang.Exception` - occured while committing transaction.

    - #### rollbackTransaction

          public void rollbackTransaction(java.lang.Object tx)

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