001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.mx.interceptor;
023:
024: import org.jboss.logging.Logger;
025: import org.jboss.mx.server.Invocation;
026:
027: /**
028: * This interface defines MBean interceptors. All MBean interceptors must
029: * implement this interface.
030: *
031: * @see org.jboss.mx.interceptor.AbstractInterceptor
032: *
033: * @author <a href="mailto:juha@jboss.org">Juha Lindfors</a>.
034: * @version $Revision: 57200 $
035: */
036: public interface Interceptor {
037:
038: /**
039: * Returns the name of this interceptor. Notice that for shared interceptors
040: * this name must be unique among the shared interceptors in the MBean
041: * server.
042: */
043: String getName();
044:
045: /**
046: * Returns true if this interceptor is shared by multiple invokers;
047: * false otherwise. Non-shared interceptors should always return false.
048: * Shared interceptors return false if they have not been registered
049: * to the MBean server yet. Shared interceptors must always return true
050: * after they have been registered to the server.
051: *
052: * @return true if shared;false otherwise
053: */
054: boolean isShared();
055:
056: /**
057: * The <tt>invoke</tt> method is called when the invocation object passes
058: * this interceptor.
059: */
060: Object invoke(Invocation invocation) throws Throwable;
061:
062: /**
063: * Called by the {@link org.jboss.mx.server.MBeanInvoker MBeanInvoker} on
064: * a non-shared interceptors to set a logger reference for this interceptor.
065: * The interceptor implementation may use the invoker's logger for recording
066: * log information. <p>
067: *
068: * Shared interceptors should set up their log facility through other means
069: * as they are invoked by several different MBean invokers. To access the
070: * log implementation of the originating invoker for a particular invocation,
071: * an interceptor may query they invocation context for invoker reference.
072: */
073: void setLogger(Logger log);
074:
075: /**
076: * This method is part of the interceptor's lifecycle. It is
077: * called by the invoker during the initialization of the interceptor
078: * instance. <p>
079: *
080: * For shared interceptors the lifecycle is driven by the MBean registration.
081: * This method is called before the MBean is registered to the server. <p>
082: *
083: * Concrete interceptor implementations can override this method to provide
084: * initialization code that should be executed before the interceptor
085: * is registered. <p>
086: *
087: * Any exception that is propagated from this method to its caller will
088: * cancel the interceptor registration.
089: *
090: * @throws Exception if you want to cancel the interceptor registration
091: */
092: void init() throws Exception;
093:
094: /**
095: * This method is part of the interceptor's lifecycle. It is
096: * called by the invoker during the interceptor initialization process. <p>
097: *
098: * For shared interceptors the lifecycle is driven by the MBean registration.
099: * This method is called after the MBean is registered to the
100: * server as part of the
101: * {@link javax.management.MBeanRegistration#postRegister} execution. <p>
102: *
103: * Concrete interceptor implementations can override this method to provide
104: * initialization code that should be executed once the MBean server and
105: * object name references for this interceptor have been resolved.
106: */
107: void start();
108:
109: /**
110: * This method is part of the interceptor lifecycle. It is
111: * called by the invoker during the interceptor removal. <p>
112: *
113: * For shared interceptors the lifecycle is driven by the MBean
114: * unregistration. This method is called after the MBean is registered to the
115: * server as part of the
116: * {@link javax.management.MBeanRegistration#preDeregister} execution. <p>
117: *
118: * Concrete interceptor implementations can override this
119: * method to provide cleanup code that should be executed before the
120: * interceptor is unregistered. <p>
121: *
122: * Any exception that is propagated from this method to its caller will
123: * cancel the interceptor unregistration.
124: *
125: * @throws Exception if you want to cancel the interceptor unregistration
126: */
127: void stop() throws Exception;
128:
129: /**
130: * This method is part of the interceptor lifecycle. It is called by the
131: * invoker durin the interceptor removal. <p>
132: *
133: * For shared interceptors the lifecycle is driven by the MBean
134: * unregistration. This method is called after the MBean is registered to the
135: * server as part of the
136: * {@link javax.management.MBeanRegistration#postDeregister} execution. <p>
137: *
138: * Concrete interceptor implementations can override this method to provide
139: * cleanup code that should be executed once the interceptor is no longer
140: * registered to the MBean server.
141: */
142: void destroy();
143:
144: }
|