001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */
019: package org.apache.axis2.engine;
020:
021: import org.apache.axis2.context.ConfigurationContext;
022: import org.apache.axis2.context.ConfigurationContextFactory;
023: import org.apache.axis2.AxisFault;
024: import org.apache.axis2.description.AxisService;
025:
026: /**
027: * This class provide a very convenient way of creating server and deploying services.
028: * Once someone call start method it will fire up configuration context and start up the listeners.
029: * One can provide repository location and axis.xml as system properties.
030: */
031:
032: public class AxisServer {
033:
034: protected ConfigurationContext configContext;
035: protected ListenerManager listenerManager;
036: private boolean startOnDeploy;
037: private boolean started = false;
038:
039: /**
040: * If you do not want Axis2 to start the server automatically then pass the "false" else "true"
041: * @param startOnDeploy : boolean
042: */
043: public AxisServer(boolean startOnDeploy) {
044: this .startOnDeploy = startOnDeploy;
045: listenerManager = new ListenerManager();
046: }
047:
048: /**
049: * Server will start automatically if you call deployService
050: */
051: public AxisServer() {
052: this (true);
053: }
054:
055: /**
056: * Will make Java class into a web service
057: * @param serviceClassName : Actual class you want to make as a web service
058: * @throws AxisFault : If something went wrong
059: */
060: public void deployService(String serviceClassName) throws AxisFault {
061: if (configContext == null) {
062: configContext = getConfigurationContext();
063: }
064: AxisConfiguration axisConfig = configContext
065: .getAxisConfiguration();
066: AxisService service = AxisService.createService(
067: serviceClassName, axisConfig);
068: axisConfig.addService(service);
069: if (startOnDeploy) {
070: start();
071: }
072: }
073:
074: /**
075: * Will create a configuration context from the avialable data and then it
076: * will start the listener manager
077: * @throws AxisFault if something went wrong
078: */
079: protected void start() throws AxisFault {
080: if (configContext == null) {
081: configContext = getConfigurationContext();
082: }
083: if (!started) {
084: listenerManager.startSystem(configContext);
085: started = true;
086: }
087: }
088:
089: /**
090: * Stop the server, automatically terminates the listener manager as well.
091: * @throws AxisFault
092: */
093: public void stop() throws AxisFault {
094: if (configContext != null) {
095: configContext.terminate();
096: }
097: }
098:
099: /**
100: * Set the configuration context. Please call this before you call deployService or start method
101: *
102: * @param configContext ConfigurationContext
103: */
104: public void setConfigurationContext(
105: ConfigurationContext configContext) {
106: this .configContext = configContext;
107: }
108:
109: /**
110: * Creates a default configuration context if one is not set already via setConfigurationContext
111: *
112: * @return ConfigurationContext
113: * @throws AxisFault
114: */
115: public ConfigurationContext getConfigurationContext()
116: throws AxisFault {
117: if (configContext == null) {
118: configContext = createDefaultConfigurationContext();
119: }
120: return configContext;
121: }
122:
123: /**
124: * Users extending this class can override this method to supply a custom ConfigurationContext
125: * @return ConfigurationContext
126: * @throws AxisFault
127: */
128: protected ConfigurationContext createDefaultConfigurationContext()
129: throws AxisFault {
130: return ConfigurationContextFactory
131: .createConfigurationContextFromFileSystem(null);
132: }
133: }
|