Class ThreadLocalListener

java.lang.Object
org.zkoss.zkplus.util.ThreadLocalListener
All Implemented Interfaces:
org.zkoss.zk.ui.event.EventThreadCleanup, org.zkoss.zk.ui.event.EventThreadInit, org.zkoss.zk.ui.event.EventThreadResume

public class ThreadLocalListener extends Object implements org.zkoss.zk.ui.event.EventThreadInit, org.zkoss.zk.ui.event.EventThreadCleanup, org.zkoss.zk.ui.event.EventThreadResume

Listener to make sure servlet thread and ZK event thread got the same ThreadLocal values. You have to declare this listener in WEB-INF/zk.xml as follows.


        <listener>
                <description>ThreadLocal Synchronization Listener</description>
                <listener-class>org.zkoss.zkplus.util.ThreadLocalListener</listener-class>
        </listener>
 

Besides that, you have to specify what ThreadLocal variables you want to sync. They are also specified in WEB-INF/zk.xml file in the form as below.


  <preference>
    <name>ThreadLocal</name>
    <value>
                        class1=field1,field2,...;
                        class2=field1,field2,...;
                        ...
    </value>
  </preference>
 

For example, to support synchronizing Spring's thread bounded resources, you have to specify the following ThreadLocal variables:


        <preference>
                <name>ThreadLocal</name>
                <value>
                org.springframework.transaction.support.TransactionSynchronizationManager=resources,synchronizations,currentTransactionName,currentTransactionReadOnly,actualTransactionActive;
                org.springframework.orm.hibernate3.SessionFactoryUtils=deferredCloseHolder;
                org.springframework.transaction.interceptor.TransactionAspectSupport=transactionInfoHolder; <!-- ver. 2+ -->
                <!--org.springframework.transaction.interceptor.TransactionAspectSupport=currentTransactionInfo; ver. 1.28 -->
                </value>
        </preference>
 

In additions to using the application preference, you can specify it in the library property called zkplus.util.ThreadLocalListener.fieldsMap. The preference has the higher priority.

Another example, when you specify the Spring's bean as scope="session", you have to specify the following ThreadLocal variables since Spring 2.0 use RequestContextHolder to handle the bean's scope.


        <preference>
        <name>ThreadLocal</name>
        <value>
                org.springframework.web.context.request.RequestContextHolder=requestAttributesHolder,inheritableRequestAttributesHolder;
        </value>
 
Since:
2.4.1
Author:
henrichen
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    abortResume(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
     
    void
    afterResume(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
     
    void
    beforeResume(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
     
    void
    cleanup(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt, List errs)
     
    void
    complete(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
     
    boolean
    init(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
     
    void
    prepare(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • ThreadLocalListener

      public ThreadLocalListener()
  • Method Details

    • prepare

      public void prepare(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
      Specified by:
      prepare in interface org.zkoss.zk.ui.event.EventThreadInit
    • init

      public boolean init(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
      Specified by:
      init in interface org.zkoss.zk.ui.event.EventThreadInit
    • cleanup

      public void cleanup(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt, List errs)
      Specified by:
      cleanup in interface org.zkoss.zk.ui.event.EventThreadCleanup
    • complete

      public void complete(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
      Specified by:
      complete in interface org.zkoss.zk.ui.event.EventThreadCleanup
    • beforeResume

      public void beforeResume(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
      Specified by:
      beforeResume in interface org.zkoss.zk.ui.event.EventThreadResume
    • afterResume

      public void afterResume(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
      Specified by:
      afterResume in interface org.zkoss.zk.ui.event.EventThreadResume
    • abortResume

      public void abortResume(org.zkoss.zk.ui.Component comp, org.zkoss.zk.ui.event.Event evt)
      Specified by:
      abortResume in interface org.zkoss.zk.ui.event.EventThreadResume