Google

JBoss API: Class EntitySynchronizationInterceptor

org.jboss.ejb.plugins
Class EntitySynchronizationInterceptor

java.lang.Object
  |
  +--org.jboss.ejb.plugins.AbstractInterceptor
        |
        +--org.jboss.ejb.plugins.EntitySynchronizationInterceptor
All Implemented Interfaces:
ContainerPlugin, Interceptor, Service
Direct Known Subclasses:
EntityMultiInstanceSynchronizationInterceptor

public class EntitySynchronizationInterceptor
extends AbstractInterceptor

The role of this interceptor is to synchronize the state of the cache with the underlying storage. It does this with the ejbLoad and ejbStore semantics of the EJB specification. In the presence of a transaction this is triggered by transaction demarcation. It registers a callback with the underlying transaction monitor through the JTA interfaces. If there is no transaction the policy is to store state upon returning from invocation. The synchronization polices A,B,C of the specification are taken care of here.

WARNING: critical code, get approval from senior developers before changing.

Version:
$Revision: 1.37.2.4 $

Revisions:

2001/06/28: marcf

  1. Moved to new synchronization
  2. afterCompletion doesn't return to pool anymore, idea is to simplify design by not mucking with reuse of the instances
  3. before completion checks for a rolledback tx and doesn't call the store in case of a rollback we are notified but we don't register the resource

2001/07/12: starksm

  1. Fixed invalid use of the ctx.transaction in beforeCompletion
  2. Added clearContextTx to make sure clean up of ctx.tx was done consistently
  3. Clean up the EntityContainer cast-fest

2001/07/26: billb

  1. Locking is now separate from EntityEnterpriseContext objects and is now encapsulated in BeanLock and BeanLockManager. Did this because the lifetime of an EntityLock is sometimes longer than the lifetime of the ctx.

2001/08/01: marcf

  1. Updated BeanLock to work in new interceptor and out of InstanceInterceptor so we update here as well to use the new interceptor lock logic and the BeanLock that bill introduced
  2. Make use of clearContextTx in all exceptional cases

2001/08/02: marcf

  1. Moved policy to pluggable framework. Work through the interface of the lock only Use of "endTransaction" and "wontSynchronize" to communicate with the lock

2001/08/07: billb

  1. Moved storeEntity to EntityContainer.
  2. invokeHome is now scheduled
  3. made InstanceSynchronization protected so that I could inherit from it
  4. made a protected method createSynchronization for inheritance purposes.

2001/10/11: billb

  1. do not call cache.release if entity has been removed

2001/10/18: billb

  1. Do not lock bean on an exception
Author:
Marc Fleury, Scott Stark, Bill Burke

Inner Class Summary
protected  class EntitySynchronizationInterceptor.InstanceSynchronization
           
 
Field Summary
protected  int commitOption
          The current commit option.
protected  EntityContainer container
          The container of this interceptor.
protected  long optionDRefreshRate
          The refresh rate for commit option d
protected  java.util.HashSet validContexts
          For commit option D this is the cache of valid entities
 
Fields inherited from class org.jboss.ejb.plugins.AbstractInterceptor
log, nextInterceptor
 
Constructor Summary
EntitySynchronizationInterceptor()
           
 
Method Summary
protected  void clearContextTx(java.lang.String msg, EntityEnterpriseContext ctx, javax.transaction.Transaction tx, boolean trace)
           
protected  javax.transaction.Synchronization createSynchronization(javax.transaction.Transaction tx, EntityEnterpriseContext ctx)
           
 Container getContainer()
           
 void init()
           
 java.lang.Object invoke(MethodInvocation mi)
           
 java.lang.Object invokeHome(MethodInvocation mi)
           
protected  void register(EntityEnterpriseContext ctx, javax.transaction.Transaction tx)
          Register a transaction synchronization callback with a context.
 void setContainer(Container container)
          This callback is set by the container so that the plugin may access it
 
Methods inherited from class org.jboss.ejb.plugins.AbstractInterceptor
destroy, getNext, setNext, start, stop
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

commitOption

protected int commitOption
The current commit option.

optionDRefreshRate

protected long optionDRefreshRate
The refresh rate for commit option d

container

protected EntityContainer container
The container of this interceptor.

validContexts

protected java.util.HashSet validContexts
For commit option D this is the cache of valid entities
Constructor Detail

EntitySynchronizationInterceptor

public EntitySynchronizationInterceptor()
Method Detail

setContainer

public void setContainer(Container container)
Description copied from interface: ContainerPlugin
This callback is set by the container so that the plugin may access it
Overrides:
setContainer in class AbstractInterceptor
Following copied from interface: org.jboss.ejb.ContainerPlugin
Parameters:
con - the container using this plugin

init

public void init()
          throws java.lang.Exception
Overrides:
init in class AbstractInterceptor

getContainer

public Container getContainer()
Overrides:
getContainer in class AbstractInterceptor

createSynchronization

protected javax.transaction.Synchronization createSynchronization(javax.transaction.Transaction tx,
                                                                  EntityEnterpriseContext ctx)

register

protected void register(EntityEnterpriseContext ctx,
                        javax.transaction.Transaction tx)
Register a transaction synchronization callback with a context.

invokeHome

public java.lang.Object invokeHome(MethodInvocation mi)
                            throws java.lang.Exception
Overrides:
invokeHome in class AbstractInterceptor

invoke

public java.lang.Object invoke(MethodInvocation mi)
                        throws java.lang.Exception
Overrides:
invoke in class AbstractInterceptor

clearContextTx

protected void clearContextTx(java.lang.String msg,
                              EntityEnterpriseContext ctx,
                              javax.transaction.Transaction tx,
                              boolean trace)


Copyright © 2000 The JBoss Organization. All Rights Reserved.