Package org.zkoss.zkplus.jpa

## Class OpenEntityManagerInViewListener

- java.lang.Object
- - org.zkoss.zkplus.jpa.OpenEntityManagerInViewListener

- All Implemented Interfaces:
    `ExecutionCleanup`, `ExecutionInit`

      public class OpenEntityManagerInViewListener
      extends java.lang.Object
      implements ExecutionCleanup, ExecutionInit

  Listener to init and cleanup the JPA entityManager automatically

  In WEB-INF/zk.xml, add following lines:

              <listener>
                      <description>Hibernate "OpenEntityManagerInView" Listener</description>
                      <listener-class>org.zkoss.zkplus.jpa.OpenEntityManagerInViewListener</listener-class>
              </listener>

  Applicable to EJB version 3.2.ga or later

  Since:
    3.0.2
  Author:
    Jeff

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `OpenEntityManagerInViewListener()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `cleanup​(Execution exec, Execution parent, java.util.List errs)` | called when an execution is about to be destroyed.
    `protected void` | `handleException​(Execution exec, java.lang.Throwable ex)` | Default exception handler.
    `void` | `init​(Execution exec, Execution parent)` | Called when an execution is created and initialized.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### OpenEntityManagerInViewListener

          public OpenEntityManagerInViewListener()

  - ### Method Detail

    - #### cleanup

          public void cleanup​(Execution exec,
                              Execution parent,
                              java.util.List errs)
                       throws java.lang.Exception

      Description copied from interface: `ExecutionCleanup`
      called when an execution is about to be destroyed.

      If this method throws an exception, the stack trace will be logged, and the error message will be displayed at the client.

      When this method is invoked, the execution is still activated, so you can create components here.

      Specified by:
        `cleanup` in interface `ExecutionCleanup`
      Parameters:
        `exec` - the execution to clean up.
        `parent` - the previous execution, or null if no previous at all
        `errs` - a list of exceptions (java.lang.Throwable) if any exception occurred before this method is called, or null if no exception at all. Note: you can manipulate the list directly to add or clean up exceptions. For example, if exceptions are fixed correctly, you can call errs.clear() such that no error message will be displayed at the client.
      Throws:
        `java.lang.Exception`

    - #### init

          public void init​(Execution exec,
                           Execution parent)
                    throws java.lang.Exception

      Description copied from interface: `ExecutionInit`
      Called when an execution is created and initialized.

      Note: this method is called after exec is activated. In other words, `Executions.getCurrent()` is the same as the exec argument.

      When this method is called, you can retrieve the current page with `ExecutionCtrl.getCurrentPage()`. However, the page is not initialized yet. In other words, `Page.getDesktop()`, `Page.getId()` and `Page.getTitle()` all return null. To get the current desktop, you have to use `Execution.getDesktop()` (from `Executions.getCurrent()`) instead. On the other hand, you can set the page's ID, title or style in this method (to override the declarations in the page definition) by `Page.setId(java.lang.String)`, `Page.setTitle(java.lang.String)` and `Page.setStyle(java.lang.String)`. In additions, `Page.getRequestPath()` and `Page.getAttribute(java.lang.String, int)` are all available.

      Specified by:
        `init` in interface `ExecutionInit`
      Parameters:
        `exec` - the execution being created.
        `parent` - the previous execution in the same (Servlet) request, or null if this is the first execution of the request.
      Throws:
        `java.lang.Exception`

    - #### handleException

          protected void handleException​(Execution exec,
                                         java.lang.Throwable ex)

      Default exception handler. This implementation simply rollback the transaction.

      Application developer might want to extends this class and override this method to do other things like compensate for any permanent changes during the conversation, and finally restart business conversation... what can be done here depends on the applications design.

      Parameters:
        `exec` - the execution to clean up.
        `ex` - the Throwable which is not handled during the execution