ServerInterceptorChain.java |
/* * JBoss, the OpenSource J2EE webOS * * Distributable under LGPL license. * See terms of license at gnu.org. * */ package org.jboss.remoting; import org.jboss.remoting.transport.Connector; import javax.management.MBeanRegistration; import javax.management.MBeanServer; import javax.management.ObjectName; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * ServerInterceptorChain.java * * * Created: Fri May 2 10:36:51 2003 * * @author <a href="mailto:d_jencks@users.sourceforge.net">David Jencks</a> * @version 1.0 * * @jmx.mbean description="ServerInvocationHandler that represents a chain of ServerInterceptors" * * @jboss.xmbean */ public class ServerInterceptorChain implements MBeanRegistration, ServerInvocationHandler { private MBeanServer server; private Connector connector; private ObjectName connectorName; private String subsystem; private List interceptorNames; private List interceptors; public ServerInterceptorChain() { } // ServerInterceptorChain constructor /** * Get the Connector value. * @return the Connector value. * not managed */ public Connector getConnector() { return connector; } /** * Set the Connector value. * @param newConnector The new Connector value. * not managed */ public void setConnector(Connector newConnector) { this.connector = newConnector; } /** * Get the ConnectorName value. * @return the ConnectorName value. * * @jmx.managed-attribute description="Object name of the Connector we register with" * type="ObjectName" * access="read-write" */ public ObjectName getConnectorName() { return connectorName; } /** * Set the ConnectorName value. * @param newConnectorName The new ConnectorName value. * * @jmx.managed-attribute */ public void setConnectorName(ObjectName newConnectorName) { this.connectorName = newConnectorName; } /** * Get the Subsystem value. * @return the Subsystem value. * @jmx.managed-attribute description="Name of the subsystem we work for" * type="String" * access="read-write" */ public String getSubsystem() { return subsystem; } /** * Set the Subsystem value. * @param newSubsystem The new Subsystem value. * * @jmx.managed-attribute */ public void setSubsystem(String newSubsystem) { this.subsystem = newSubsystem; } /** * Get the Interceptors value. * @return the Interceptors value. * not managed */ public List getInterceptors() { return interceptors; } /** * Set the Interceptors value. * @param newInterceptors The new Interceptors value. * not managed */ public void setInterceptors(List newInterceptors) { this.interceptors = newInterceptors; } /** * Get the InterceptorName value. * @return the InterceptorName value. * @jmx.managed-attribute description="List of object names of the ServerInterceptors we delegate to" * type="List" * access="read-write" */ public List getInterceptorNames() { return interceptorNames; } /** * Set the InterceptorName value. * @param newInterceptorName The new InterceptorName value. * * @jmx.managed-attribute */ public void setInterceptorNames(List newInterceptorNames) { this.interceptorNames = newInterceptorNames; } // Implementation of javax.management.MBeanRegistration /** * The <code>preRegister</code> method * * @param MBeanServer a <code>MBeanServer</code> value * @param objectName an <code>ObjectName</code> value * @return an <code>ObjectName</code> value * @exception Exception if an error occurs */ public ObjectName preRegister(MBeanServer server, ObjectName objectName) throws Exception { this.server = server; return objectName; } /** * The <code>postRegister</code> method * */ public void postRegister(Boolean success) { } /** * The <code>preDeregister</code> method * * @exception Exception if an error occurs */ public void preDeregister() throws Exception { } /** * The <code>postDeregister</code> method * */ public void postDeregister() { } //JBoss lifecycle methods /** * The <code>start</code> method * * @exception Exception if an error occurs * * @jmx.managed-operation description="JBoss lifecycle method to set up the interceptor chain from the list of interceptor object names" */ public void start() throws Exception { List interceptors = new ArrayList(); for (Iterator i = interceptorNames.iterator(); i.hasNext(); ) { ObjectName iname = (ObjectName)i.next(); ServerInterceptor si = (ServerInterceptor)server.getAttribute(iname, "Instance"); interceptors.add(si); } // end of for () this.interceptors = interceptors; //register with connector if (connector != null) { connector.addInvocationHandler(subsystem, this); } // end of if () else { server.invoke(connectorName, "addInvocationHandler", new Object[] {subsystem, this}, new String[] {String.class.getName(), ServerInvocationHandler.class.getName()}); } // end of else } /** * The <code>stop</code> method * * @exception Exception if an error occurs * * @jmx.managed-operation description="JBoss lifecycle method to tear down the list of interceptors" */ public void stop() throws Exception { //register with connector if (connector != null) { connector.removeInvocationHandler(subsystem); } // end of if () else { server.invoke(connectorName, "removeInvocationHandler", new Object[] {subsystem}, new String[] {String.class.getName()}); } // end of else interceptors.clear();//??????? } // Implementation of org.jboss.remoting.ServerInvocationHandler /** * The <code>addListener</code> method * * @param invokerCallbackHandler an <code>InvokerCallbackHandler</code> value */ public void addListener(InvokerCallbackHandler invokerCallbackHandler) { } /** * The <code>removeListener</code> method * * @param invokerCallbackHandler an <code>InvokerCallbackHandler</code> value */ public void removeListener(InvokerCallbackHandler invokerCallbackHandler) { } /** * The <code>setMBeanServer</code> method * * @param MBeanServer a <code>MBeanServer</code> value */ public void setMBeanServer(MBeanServer MBeanServer) { } /** * The <code>invoke</code> method * * @param invocationRequest an <code>InvocationRequest</code> value * @return an <code>Object</code> value * @exception Throwable if an error occurs */ public Object invoke(InvocationRequest invocation) throws Throwable { InterceptorIterator iterator = new InterceptorIterator(interceptors.iterator(), invocation); return iterator.invokeNext(); } /** * The <code>setInvoker</code> method * * @param serverInvoker a <code>ServerInvoker</code> value */ public void setInvoker(ServerInvoker serverInvoker) { } public static class InterceptorIterator { private final Iterator iterator; private final InvocationRequest invocation; public InterceptorIterator(final Iterator iterator, final InvocationRequest invocation) { this.iterator = iterator; this.invocation = invocation; } public Object invokeNext() throws Throwable { return ((ServerInterceptor)iterator.next()).invoke(this, invocation); } } } // ServerInterceptorChain
ServerInterceptorChain.java |