org.jboss.ejb.plugins
Class CleanShutdownInterceptor

java.lang.Object
  extended by org.jboss.ejb.plugins.AbstractInterceptor
      extended by org.jboss.ejb.plugins.CleanShutdownInterceptor
All Implemented Interfaces:
AllowedOperationsFlags, ContainerPlugin, Interceptor, Service

public class CleanShutdownInterceptor
extends AbstractInterceptor

Track the incoming invocations and when shuting down a container (stop or destroy), waits for current invocations to finish before returning the stop or destroy call. This interceptor can be important in clustered environment where shuting down a node doesn't necessarly mean that an application cannot be reached: other nodes may still be servicing. Consequently, it is important to have a clean shutdown to keep a coherent behaviour cluster-wide. To avoid strange or inefficient behaviour, the facade session bean (if any) should be stopped first thus not blocking invocations in a middle-step (i.e. facade making multiple invocations to "sub-beans": if a "sub-bean" is shut down, the facade will get an exception in the middle of its activity)

Version:
$Revision: 83000 $

Revisions:

14 avril 2002 Sacha Labourey:

Author:
Sacha Labourey.
See Also:

Field Summary
protected  boolean allowInvocations
           
protected  boolean allowRemoteInvocations
           
protected  Container container
           
protected  EjbModule ejbModule
           
protected  String ejbModuleName
           
protected  boolean isDebugEnabled
           
 long readAcquireTimeMs
           
 long runningHomeInvocations
           
 long runningInvocations
           
protected  ReadWriteLock rwLock
           
 long shutdownTimeout
           
 
Fields inherited from class org.jboss.ejb.plugins.AbstractInterceptor
log, nextInterceptor
 
Fields inherited from interface org.jboss.ejb.AllowedOperationsFlags
IN_AFTER_BEGIN, IN_AFTER_COMPLETION, IN_BEFORE_COMPLETION, IN_BUSINESS_METHOD, IN_EJB_ACTIVATE, IN_EJB_CREATE, IN_EJB_FIND, IN_EJB_HOME, IN_EJB_LOAD, IN_EJB_PASSIVATE, IN_EJB_POST_CREATE, IN_EJB_REMOVE, IN_EJB_STORE, IN_EJB_TIMEOUT, IN_INTERCEPTOR_METHOD, IN_SERVICE_ENDPOINT_METHOD, IN_SET_ENTITY_CONTEXT, IN_SET_MESSAGE_DRIVEN_CONTEXT, IN_SET_SESSION_CONTEXT, IN_UNSET_ENTITY_CONTEXT, NOT_ALLOWED
 
Constructor Summary
CleanShutdownInterceptor()
           
 
Method Summary
protected  void containerIsAboutToStop()
           
 void create()
           
 void destroy()
           
protected  void forbidInvocations()
           
 Container getContainer()
           
protected  String getOrigin(Invocation mi)
           
 Object invoke(Invocation mi)
           
 Object invokeHome(Invocation mi)
           
 void onlyAllowLocalInvocations()
           
protected  void purgeRunningInvocations()
           
protected  void revertOrigin(Invocation mi, String origin)
           
 void setContainer(Container con)
          This callback is set by the container so that the plugin may access it
protected  void setOrigin(Invocation mi)
           
 void start()
           
 void stop()
           
 void waitForNoMoreInvocations()
           
 
Methods inherited from class org.jboss.ejb.plugins.AbstractInterceptor
getNext, isAppException, setNext
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

container

protected Container container

ejbModule

protected EjbModule ejbModule

ejbModuleName

protected String ejbModuleName

allowInvocations

protected boolean allowInvocations

allowRemoteInvocations

protected boolean allowRemoteInvocations

isDebugEnabled

protected boolean isDebugEnabled

runningInvocations

public long runningInvocations

runningHomeInvocations

public long runningHomeInvocations

shutdownTimeout

public long shutdownTimeout

readAcquireTimeMs

public long readAcquireTimeMs

rwLock

protected ReadWriteLock rwLock
Constructor Detail

CleanShutdownInterceptor

public CleanShutdownInterceptor()
Method Detail

onlyAllowLocalInvocations

public void onlyAllowLocalInvocations()

waitForNoMoreInvocations

public void waitForNoMoreInvocations()

create

public void create()
            throws Exception
Specified by:
create in interface Service
Overrides:
create in class AbstractInterceptor
Throws:
Exception

start

public void start()
           throws Exception
Specified by:
start in interface Service
Overrides:
start in class AbstractInterceptor
Throws:
Exception

stop

public void stop()
Specified by:
stop in interface Service
Overrides:
stop in class AbstractInterceptor

destroy

public void destroy()
Specified by:
destroy in interface Service
Overrides:
destroy in class AbstractInterceptor

invokeHome

public Object invokeHome(Invocation mi)
                  throws Exception
Specified by:
invokeHome in interface Interceptor
Overrides:
invokeHome in class AbstractInterceptor
Throws:
Exception

invoke

public Object invoke(Invocation mi)
              throws Exception
Specified by:
invoke in interface Interceptor
Overrides:
invoke in class AbstractInterceptor
Throws:
Exception

getContainer

public Container getContainer()
Overrides:
getContainer in class AbstractInterceptor

setContainer

public void setContainer(Container con)
This callback is set by the container so that the plugin may access it

Specified by:
setContainer in interface ContainerPlugin
Overrides:
setContainer in class AbstractInterceptor
Parameters:
con - The container using this plugin.

forbidInvocations

protected void forbidInvocations()

purgeRunningInvocations

protected void purgeRunningInvocations()

getOrigin

protected String getOrigin(Invocation mi)

setOrigin

protected void setOrigin(Invocation mi)

revertOrigin

protected void revertOrigin(Invocation mi,
                            String origin)

containerIsAboutToStop

protected void containerIsAboutToStop()


Copyright © 2009 JBoss, a division of Red Hat, Inc.. All Rights Reserved.