01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one
03: * or more contributor license agreements. See the NOTICE file
04: * distributed with this work for additional information
05: * regarding copyright ownership. The ASF licenses this file
06: * to you under the Apache License, Version 2.0 (the
07: * "License"); you may not use this file except in compliance
08: * with the License. You may obtain a copy of the License at
09: *
10: * http://www.apache.org/licenses/LICENSE-2.0
11: *
12: * Unless required by applicable law or agreed to in writing,
13: * software distributed under the License is distributed on an
14: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15: * KIND, either express or implied. See the License for the
16: * specific language governing permissions and limitations
17: * under the License.
18: */
19:
20: package org.apache.axis2.modules;
21:
22: import org.apache.axis2.AxisFault;
23: import org.apache.axis2.context.ConfigurationContext;
24: import org.apache.axis2.description.AxisDescription;
25: import org.apache.axis2.description.AxisModule;
26: import org.apache.neethi.Assertion;
27: import org.apache.neethi.Policy;
28:
29: /**
30: * Every module provides an implementation of this class. Modules are in one of
31: * two states: "available" or "engaged". All modules that the runtime
32: * detects (from the system modules/ directory or from other means) are said to
33: * be in the "available" state. If some service indicates a dependency on this
34: * module then the module is initialized (once for the life of the system) and
35: * the state changes to "initialized".
36: * <p/>
37: * <p/>Any module which is in the "engaged" state can be engaged as needed
38: * by the engine to respond to a message. Currently module engagement is done
39: * via deployment (using module.xml). In the future we may engage modules
40: * programmatically by introducing an engage() method to this interface, thereby
41: * allowing more dynamic scenarios.
42: */
43: public interface Module {
44:
45: // initialize the module
46: public void init(ConfigurationContext configContext,
47: AxisModule module) throws AxisFault;
48:
49: /**
50: * When engaging this module to some service or operation , module will be notify by calling this
51: * method there module author can validate , add policy and do any thing that he want , and he can
52: * refuce the engage as well
53: *
54: * @param axisDescription
55: * @throws AxisFault
56: */
57: void engageNotify(AxisDescription axisDescription) throws AxisFault;
58:
59: /**
60: * Evalute whether it can support the specified assertion and returns true if the assertion can
61: * be supported.
62: *
63: * @param assertion the assertion that the module must decide whether it can support or not.
64: * @return true if the specified assertion can be supported by the module
65: */
66: public boolean canSupportAssertion(Assertion assertion);
67:
68: /**
69: * Evaluates specified policy for the specified AxisDescription. It computes the configuration that
70: * is appropriate to support the policy and stores it the appropriate description.
71: *
72: * @param policy the policy that is applicable for the specified AxisDescription
73: * @throws AxisFault if anything goes wrong.
74: */
75: public void applyPolicy(Policy policy,
76: AxisDescription axisDescription) throws AxisFault;
77:
78: // shutdown the module
79: public void shutdown(ConfigurationContext configurationContext)
80: throws AxisFault;
81: }
|