<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
<meta http-equiv="content-type" content="" />
<title>Apache Axis2 Web Administrator's Guide</title>
</head>
<body lang="en" xml:lang="en">
<h1 align="center">Apache Axis2 Web Administrator's Guide</h1>
<p>This document gives you detailed information on the
administration console of the Apache Axis2 Web application. Apache
Axis2 Administration is all about configuring Apache Axis2 at run
time, where the configuration is transient.</p>
<p><i>Send your feedback to: <a href=
"mailto:java-dev@axis.apache.org?subject=[Axis2]">java-dev@axis.apache.org</a></i>.
(Subscription details are available on the <a href="../mail-lists.html">Axis2 site</a>.)
Kindly prefix every email subject with [Axis2].</p>
<h2>Contents</h2>
<ul>
<li><a href="#Intro">Introduction</a>
<ul>
<li>
<p><a href="#login">Login into Administration Site</a></p>
</li>
</ul>
</li>
<li><a href="#adminoptions">Administration Options</a>
<ul>
<li>
<p><a href="#tools">Tools</a></p>
<ul>
<li><a href="#upservice">Upload Service</a></li>
</ul>
</li>
<li>
<p><a href="#syscomponents">System components</a></p>
<ul>
<li><a href="#heading1">Available services</a></li>
<li><a href="#servgroups">Available service groups</a></li>
<li><a href="#avmodules">Available modules</a></li>
<li><a href="#globalmodules">Globally engaged modules</a></li>
<li><a href="#phases">Available phases</a></li>
</ul>
</li>
<li>
<p><a href="#executionchains">Execution chains</a></p>
<ul>
<li><a href="#globalchains">Global chains</a></li>
<li><a href="#operationchains">Operation specific chains</a></li>
</ul>
</li>
<li>
<p><a href="#engaginmodule">Engage module</a></p>
</li>
<li><a href="#services">Services</a>
<ul>
<li><a href="#turnoffservice">Deactivate Service</a></li>
<li><a href="#turnonservice">Activate Service</a></li>
<li><a href="#editservicepara">Edit service parameters</a></li>
</ul>
</li>
<li>
<p><a href="#context">Contexts</a></p>
<ul>
<li><a href="#viewhierarchy">View Hierarchy</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<a name="Intro" id="Intro"></a>
<h3>Introduction</h3>
<p>The Apache Axis2 Web application has three main sections:
'Services' lists all the available services deployed in this
server, 'Validate' checks the system to see whether all the
required libraries are in place and views the system information,
and 'Administration' is the Axis2 Web Administration module which
is the console for administering the Apache Axis2 installation.</p>
<p>The Axis2 Web Administration module provides a way to configure
Axis2 dynamically. It's important to note that this dynamic
configuration will NOT be persistent, i.e., if the servlet
container is restarted, then all the dynamic configuration changes
will be lost.</p>
<a name="login" id="login"></a>
<h4>Log on to the Administration Site</h4>
<p>Once Apache Axis2 is successfully installed, the Web application
can be accessed (see <a href="installationguide.html">Installation
Guide</a> for instructions). From the <a href="#homepage">Axis2 Web
Application Home page</a> you can go to the Administration page by
clicking the 'Administration' link. The Login page shown below will
appear requesting the user name and password. The default user name
is 'admin' (without quotes) and default password is 'axis2'
(without quotes).</p>
<p align="center"><img alt="" src="images/adminlogin.jpg" /></p>
<p>You can change the user name and password values by changing the
following two parameters in the axis2.xml as required.</p>
<p align="center"><img alt="" src="images/parameters.jpg" /></p>
<p>If the log on is successful, you will see the screen below. This
is where you can view the configuration and the status of the
running system and dynamically configure it.</p>
<p align="center"><img alt="" src="images/admin.jpg" /></p>
<a name="adminoptions" id="adminoptions"></a>
<h3>Administration Options</h3>
<div style="margin-left: 2em"><a name="tools" id=
"tools"><b>Tools</b></a>
<ul>
<li><a href="#upservice">Upload Service</a></li>
</ul>
<a name="syscomponents" id="syscomponents"><b>System
components</b></a>
<ul>
<li><a href="#heading1">Available services</a></li>
<li><a href="#servgroups">Available service groups</a></li>
<li><a href="#avmodules">Available modules</a></li>
<li><a href="#globalmodules">Globally engaged modules</a></li>
<li><a href="#phases">Available phases</a></li>
</ul>
<a name="executionchains" id="executionchains"><b>Execution
chains</b></a>
<ul>
<li><a href="#globalchains">Global chains</a></li>
<li><a href="#operationchains">Operation specific chains</a></li>
</ul>
<b><a href="#engaginmodule">Engage module</a></b><br />
<ul>
<li>For all Services</li>
<li>For a Service Group</li>
<li>For a Service</li>
<li>For an Operation</li>
</ul>
<a name="services" id="services"><b>Services</b></a>
<ul>
<li><a href="#turnoffservice">Deactivate service</a></li>
<li><a href="#turnonservice">Activate service</a></li>
<li><a href="#editservicepara">Edit service parameters</a></li>
</ul>
<a name="context" id="context"><b>Contexts</b></a>
<ul>
<li><a href="#viewhierarchy">View Hierarchy</a></li>
</ul>
</div>
<a name="homepage" id="homepage"></a>
<h3>Apache Axis2 Web Application Home Page</h3>
<p align="center"><strong><img alt="" src=
"images/clip_image006.jpg" /></strong></p>
<a name="upservice" id="upservice"></a>
<h3>Upload Services</h3>
<p>You can upload packaged Apache Axis2 service archive files using
this page. This can be done in two simple steps:</p>
<ul>
<li>Browse to the location and select the axisService archive file
you wish to upload</li>
<li>Then click Upload</li>
</ul>
<p align="center"><img alt="" src="images/clip_image010.jpg" /></p>
<a name="heading1" id="heading1"></a>
<h3>Available Services</h3>
<p>The functionality of the 'Available Services' option is almost
the same as the functionality of the 'Services' option on the Axis2
Web Application Home page, where it displays a list of deployed
services and their operations. As an additional feature, the
'Available Services' page lists details of modules that are engaged
to the deployed services and their operations on a global, service
or on an operation level.</p>
<p>Using the 'Disengage' link, you can disengage the corresponding
module as long as the module is not globally engaged (i.e., engaged
to all the services and operations).</p>
<p>Click on a specific service and it will give you the WSDL file
of that particular service.</p>
<p><strong>Faulty services</strong> of this system will also be
listed on this page. Click on a faulty service to view a page that
lists the exception stack trace of the exception, which caused the
service to be faulty.</p>
<p align="center"><img alt="" src="images/adminmain.jpg" /></p>
<a name="servgroups" id="servgroups"></a>
<h3>Available Service Groups</h3>
<p>Service group is a logical collection of related services, and
the 'Available Service Groups' link will list all the available
service groups in the system.</p>
<p align="center"><img alt="" src="images/servicegroups.jpg" /></p>
<a name="avmodules" id="avmodules"></a>
<h3>Available Modules</h3>
<p>To view the available modules in the 'modules' directory of the
repository, click 'Available Modules'. This will show you all the
available modules in the system. Those modules can be engaged
dynamically.</p>
<p align="center"><img alt="" src="images/modules.jpg" /></p>
<br />
<a name="globalmodules" id="globalmodules"></a>
<h3>Globally Engaged Modules</h3>
<p>Click the 'Globally Engaged Modules' to view the globally
engaged modules, if any. If a module is engaged globally, then the
handlers that belong to that module will be executed irrespective
of the service.</p>
<a name="phases" id="phases"></a>
<h3>Available Phases</h3>
<p>The 'Available Phases' link will display all the available
phases. In Axis2, there are two levels of phases:</p>
<ul>
<li>System predefined phases (not allowed to be changed)</li>
<li>User defined phases</li>
</ul>
<p>The main difference between these two levels is that system
predefined phases will be invoked irrespective of the services,
while the user defined phases will be invoked when the dispatcher
finds the operation. Note that it is essential for module
developers and service writers to have a good understanding of
phases and phase ordering.</p>
<p align="center"><img alt="" src="images/viewphases.jpg" /></p>
<br />
<a name="globalchains" id="globalchains"></a>
<h3>Global Chains</h3>
<p>The 'Global Chains' link will display all the Global Execution
Chains. The most interesting feature of the Axis2 Web
Administration Module is that it provides a very basic method of
viewing the global phase list and handlers inside the phases
depending on both the phase and handler orders. This kind of
information is extremely useful in debugging the system, as there
is no other way to list out handlers in the global chains. If you
engage a new module, the new handlers will be added to the global
chains and will be displayed on this page.</p>
<p align="center"><img alt="" src="images/globalchain.jpg" /></p>
<br />
<a name="operationchains" id="operationchains"></a>
<h3>Operation Specific Chains</h3>
<p>The 'Operation Specific Chains' link can be used to view the
handlers corresponding to a given service in the same order as it
is in the real execution chain.</p>
<p align="center"><img alt="" src=
"images/select_service_for_handler.jpg" /></p>
<br />
<p>Select the service of whose service handlers you wish to view
from the list, and click 'View' to view the handlers. The page
below shows the service handlers of the service
<em>version</em></p>
<p align="center"><img alt="" src=
"images/serviceHandlers.jpg" /></p>
<br />
<a name="engaginmodule" id="engaginmodule"></a>
<h3>Engaging Modules</h3>
<p>The 'Engaging Modules' link allows you to engage modules either
globally (to all services), to a service group, to a service, or to
an operation depending on the module implementation. If the module
was designed to engage the handlers globally, then the handlers in
the module can be included in any phase in the system. It can be
either a system predefined phase or a user defined phase.</p>
<p>On the other hand, if the module was implemented in such a way
that it is going to be deployed to a service or to an operation,
then the module cannot be included in any of the <a href=
"#phases">System Predefined Phases</a>. Thus it can only be
included in <a href="#phases">User Defined Phases</a>.</p>
<p>Immediately after engaging the module, you can see the status of
the engagement indicating whether it is engaged properly or
not.</p>
<p align="center"><img alt="" src="images/moduleengage.jpg" /></p>
<a name="turnoffservice" id="turnoffservice"></a>
<h3>Deactivate Service</h3>
<p>The 'Deactivate Service' link under the 'Services' list will
lead to the page below. The Deactivate service functionality
provides a way to remove unnecessary services from the running
system, but the removal is transient--which means that if you
restart the system, the service will be active.</p>
<p>To deactivate a service, select a service from the list, select
the 'Deactivate service' check box, and then click 'Deactivate'..
The 'Clear' button will clear the 'Deactivate service' check
box.</p>
<p align="center"><img alt="" src="images/inactivate.jpg" /></p>
<br />
<a name="turnonservice" id="turnonservice"></a>
<h3>Activate Service</h3>
<p>The 'Activate Service' link under the 'Services' list will lead
to the page below. The Activate service functionality provides a
way to activate services while the system is running, but the
activation is transient-- which means that if you restart the
system, the service will be inactive.</p>
<p>To activate a service, select a service from the list, select
the 'Activate Service' check box, then click 'Activate'. The
'Clear' button will clear the 'Activate service' check box.</p>
<p align="center"><img alt="" src="images/activate.jpg" /></p>
<br />
<a name="editservicepara" id="editservicepara"></a>
<h3>Edit Service Parameters</h3>
<p>This functionality provides a way to change the parameters in a
service or its operations. These changes will be transient too,
which means if you restart the system, the changes will not be
reflected.</p>
<p>The 'Edit Parameters' link under the 'Services' list (on the
navigation bar) will link to the page where you can select the
services of which you want to edit the parameters. Once the service
is selected, click 'Edit Parameters'.. This will open the page
shown below.</p>
<p align="center"><img alt="" src=
"images/editserviecpara.jpg" /></p>
<br />
<a name="viewhierarchy" id="viewhierarchy"></a>
<h3>View Hierarchy</h3>
<p>By listing the current context hierarchy, the 'View Hierarchy'
link provides a means to look at the system state at run time. This
will list out all the available service group contexts, service
contexts, operation contexts, etc.</p>
</body>
</html>
