001: package com.jcorporate.expresso.kernel;
002:
003: /* ====================================================================
004: * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
005: *
006: * Copyright (c) 1995-2003 Jcorporate Ltd. All rights reserved.
007: *
008: * Redistribution and use in source and binary forms, with or without
009: * modification, are permitted provided that the following conditions
010: * are met:
011: *
012: * 1. Redistributions of source code must retain the above copyright
013: * notice, this list of conditions and the following disclaimer.
014: *
015: * 2. Redistributions in binary form must reproduce the above copyright
016: * notice, this list of conditions and the following disclaimer in
017: * the documentation and/or other materials provided with the
018: * distribution.
019: *
020: * 3. The end-user documentation included with the redistribution,
021: * if any, must include the following acknowledgment:
022: * "This product includes software developed by Jcorporate Ltd.
023: * (http://www.jcorporate.com/)."
024: * Alternately, this acknowledgment may appear in the software itself,
025: * if and wherever such third-party acknowledgments normally appear.
026: *
027: * 4. "Jcorporate" and product names such as "Expresso" must
028: * not be used to endorse or promote products derived from this
029: * software without prior written permission. For written permission,
030: * please contact info@jcorporate.com.
031: *
032: * 5. Products derived from this software may not be called "Expresso",
033: * or other Jcorporate product names; nor may "Expresso" or other
034: * Jcorporate product names appear in their name, without prior
035: * written permission of Jcorporate Ltd.
036: *
037: * 6. No product derived from this software may compete in the same
038: * market space, i.e. framework, without prior written permission
039: * of Jcorporate Ltd. For written permission, please contact
040: * partners@jcorporate.com.
041: *
042: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
043: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
044: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
045: * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
046: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
047: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
048: * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
049: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
050: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
051: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
052: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
053: * SUCH DAMAGE.
054: * ====================================================================
055: *
056: * This software consists of voluntary contributions made by many
057: * individuals on behalf of the Jcorporate Ltd. Contributions back
058: * to the project(s) are encouraged when you make modifications.
059: * Please send them to support@jcorporate.com. For more information
060: * on Jcorporate Ltd. and its products, please see
061: * <http://www.jcorporate.com/>.
062: *
063: * Portions of this software are based upon other open source
064: * products and are subject to their respective licenses.
065: */
066:
067: import com.jcorporate.expresso.kernel.exception.ConfigurationException;
068:
069: /**
070: * Lifecycle interface of an Expresso component. This should be implemented
071: * by any serious Expresso service that wishes to benefit from a component
072: * based architecture. Although there are other lifecycle events available
073: * in other interfaces, these are the basic lifecycle events that most
074: * components will utilize in one way or another.
075: *
076: * @author Michael Rimov
077: */
078: public interface ComponentLifecycle {
079:
080: /**
081: * Initialize the component, this is called before the component receives
082: * any configuration information.
083: */
084: public void initialize();
085:
086: /**
087: * Configure the service. This is where any parameter settings will take
088: * place.
089: *
090: * @param newConfig a read only dynabean containing all the needed configuration.
091: * @throws IllegalArgumentException newConfig is null or the types in it are
092: * not what is expected by the Component
093: * @throws ConfigurationException if for some reason the Component cannot cope
094: * with the configuration sent to it. If this exception is thrown then ZERO
095: * reconfiguration takes place. Configure() must be an all or nothing 'transaction'
096: */
097: public void configure(Configuration newConfig)
098: throws ConfigurationException;
099:
100: /**
101: * <p>Reconfigures the service during runtime without having to restart the
102: * container.<p>
103: * <p>Reconfigure is done this way vs. bean/property setters because sometimes
104: * components need special property setting orders and it is not easily possible
105: * to determine what order to set things in. This is the responsibility
106: * of the component</p>
107: * <p>reConfigure() should be done in a transactional manner.... by that, we mean
108: * that if the reconfiguration fails, the component should revert to its previous
109: * state and continue operation</p>
110: *
111: * @param newConfig a read only dynabean containing all the needed configuration.
112: * @throws IllegalArgumentException newConfig is null or the types in it are
113: * not what is expected by the Component
114: * @throws ConfigurationException if for some reason the Component cannot cope
115: * with the configuration sent to it. If this exception is thrown then ZERO
116: * reconfiguration takes place. Configure() must be an all or nothing 'transaction'
117: */
118: public void reconfigure(Configuration newConfig)
119: throws ConfigurationException;
120:
121: /**
122: * Called upon destruction of the service. This may or may not have anything
123: * to do with container shutdown or reloading.
124: */
125: public void destroy();
126: }
|