<!--
  ~ 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>
<link href="../css/axis-docs.css" rel="stylesheet" type="text/css"
media="all" />
</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:axis-dev@ws.apache.org?subject=[Axis2]">axis-dev@ws.apache.org</a></i>.
(Subscription details are available on the <a href=
"http://ws.apache.org/axis2/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>
