<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.9.2 at 2021-08-01 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20210801" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis2 &#x2013; Apache Axis2 Web Administrator's Guide</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />
      <script type="text/javascript" src="../js/apache-maven-fluido-1.6.min.js"></script>
<meta name="generator" content="HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /><meta http-equiv="content-type" content="" />      </head>
    <body class="topBarDisabled">
      <div class="container-fluid">
      <div id="banner">
        <div class="pull-left"><a href="http://www.apache.org/" id="bannerLeft"><img src="http://www.apache.org/images/asf_logo_wide.png"  alt="Apache Axis2"/></a></div>
        <div class="pull-right"><a href=".././" id="bannerRight"><img src="../images/axis.jpg" /></a></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li id="publishDate">Last Published: 2021-08-01<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.8.0<span class="divider">|</span></li>
        <li class=""><a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
      <li class=""><a href="../index.html" title="Axis2/Java">Axis2/Java</a><span class="divider">/</span></li>
    <li class="active ">Apache Axis2 Web Administrator's Guide</li>
        </ul>
      </div>
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
<ul class="nav nav-list">
          <li class="nav-header">Axis2/Java</li>
    <li><a href="../index.html" title="Home"><span class="none"></span>Home</a>  </li>
    <li><a href="../download.html" title="Downloads"><span class="none"></span>Downloads</a>  </li>
    <li><a href="javascript:void(0)" title="Release Notes"><span class="icon-chevron-down"></span>Release Notes</a>
      <ul class="nav nav-list">
    <li><a href="../release-notes/1.6.1.html" title="1.6.1"><span class="none"></span>1.6.1</a>  </li>
    <li><a href="../release-notes/1.6.2.html" title="1.6.2"><span class="none"></span>1.6.2</a>  </li>
    <li><a href="../release-notes/1.6.3.html" title="1.6.3"><span class="none"></span>1.6.3</a>  </li>
    <li><a href="../release-notes/1.6.4.html" title="1.6.4"><span class="none"></span>1.6.4</a>  </li>
    <li><a href="../release-notes/1.7.0.html" title="1.7.0"><span class="none"></span>1.7.0</a>  </li>
    <li><a href="../release-notes/1.8.0.html" title="1.8.0"><span class="none"></span>1.8.0</a>  </li>
      </ul>
  </li>
    <li><a href="../modules/index.html" title="Modules"><span class="none"></span>Modules</a>  </li>
    <li><a href="../tools/index.html" title="Tools"><span class="none"></span>Tools</a>  </li>
          <li class="nav-header">Documentation</li>
    <li><a href="../docs/toc.html" title="Table of Contents"><span class="none"></span>Table of Contents</a>  </li>
    <li><a href="../docs/installationguide.html" title="Installation Guide"><span class="none"></span>Installation Guide</a>  </li>
    <li><a href="../docs/quickstartguide.html" title="QuickStart Guide"><span class="none"></span>QuickStart Guide</a>  </li>
    <li><a href="../docs/userguide.html" title="User Guide"><span class="none"></span>User Guide</a>  </li>
    <li><a href="../docs/jaxws-guide.html" title="JAXWS Guide"><span class="none"></span>JAXWS Guide</a>  </li>
    <li><a href="../docs/pojoguide.html" title="POJO Guide"><span class="none"></span>POJO Guide</a>  </li>
    <li><a href="../docs/spring.html" title="Spring Guide"><span class="none"></span>Spring Guide</a>  </li>
    <li class="active"><a href="#"><span class="none"></span>Web Administrator's Guide</a>
  </li>
    <li><a href="../docs/migration.html" title="Migration Guide (from Axis1)"><span class="none"></span>Migration Guide (from Axis1)</a>  </li>
          <li class="nav-header">Resources</li>
    <li><a href="../faq.html" title="FAQ"><span class="none"></span>FAQ</a>  </li>
    <li><a href="../articles.html" title="Articles"><span class="none"></span>Articles</a>  </li>
    <li><a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink" title="Wiki"><span class="none"></span>Wiki</a>  </li>
    <li><a href="../refLib.html" title="Reference Library"><span class="none"></span>Reference Library</a>  </li>
    <li><a href="../apidocs/index.html" title="Online Java Docs"><span class="none"></span>Online Java Docs</a>  </li>
          <li class="nav-header">Get Involved</li>
    <li><a href="../overview.html" title="Overview"><span class="none"></span>Overview</a>  </li>
    <li><a href="../git.html" title="Checkout the Source"><span class="none"></span>Checkout the Source</a>  </li>
    <li><a href="../mail-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a>  </li>
    <li><a href="../release-process.html" title="Release Process"><span class="none"></span>Release Process</a>  </li>
    <li><a href="../guidelines.html" title="Developer Guidelines"><span class="none"></span>Developer Guidelines</a>  </li>
    <li><a href="../siteHowTo.html" title="Build the Site"><span class="none"></span>Build the Site</a>  </li>
          <li class="nav-header">Project Information</li>
    <li><a href="../team-list.html" title="Project Team"><span class="none"></span>Project Team</a>  </li>
    <li><a href="../issue-tracking.html" title="Issue Tracking"><span class="none"></span>Issue Tracking</a>  </li>
    <li><a href="https://github.com/apache/axis-axis2-java-core/" class="externalLink" title="Source Code"><span class="none"></span>Source Code</a>  </li>
    <li><a href="../thanks.html" title="Acknowledgements"><span class="none"></span>Acknowledgements</a>  </li>
          <li class="nav-header">Apache</li>
    <li><a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License"><span class="none"></span>License</a>  </li>
    <li><a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship"><span class="none"></span>Sponsorship</a>  </li>
    <li><a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks"><span class="none"></span>Thanks</a>  </li>
    <li><a href="http://www.apache.org/security/" class="externalLink" title="Security"><span class="none"></span>Security</a>  </li>
  </ul>
          <hr />
          <div id="poweredBy">
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
  <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a>
              </div>
          </div>
        </div>
        <div id="bodyColumn"  class="span10" >
<html xmlns="http://www.w3.org/1999/xhtml">


<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 class="externalLink" 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>
<section>
<h2><a name="Contents"></a>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>
<section>
<h3><a name="Introduction"></a>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>
<section>
<h4><a name="Log_on_to_the_Administration_Site"></a>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 src="images/adminlogin.jpg" alt="" /></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 src="images/parameters.jpg" alt="" /></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 src="images/admin.jpg" alt="" /></p>
<a name="adminoptions" id="adminoptions"></a>
</section></section><section>
<h3><a name="Administration_Options"></a>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>
</section><section>
<h3><a name="Apache_Axis2_Web_Application_Home_Page"></a>Apache Axis2 Web Application Home Page</h3>

<p align="center"><b><img src="images/clip_image006.jpg" alt="" /></b></p>
<a name="upservice" id="upservice"></a>
</section><section>
<h3><a name="Upload_Services"></a>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 src="images/clip_image010.jpg" alt="" /></p>
<a name="heading1" id="heading1"></a>
</section><section>
<h3><a name="Available_Services"></a>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><b>Faulty services</b> 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 src="images/adminmain.jpg" alt="" /></p>
<a name="servgroups" id="servgroups"></a>
</section><section>
<h3><a name="Available_Service_Groups"></a>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 src="images/servicegroups.jpg" alt="" /></p>
<a name="avmodules" id="avmodules"></a>
</section><section>
<h3><a name="Available_Modules"></a>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 src="images/modules.jpg" alt="" /></p>
<br />
<a name="globalmodules" id="globalmodules"></a>
</section><section>
<h3><a name="Globally_Engaged_Modules"></a>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>
</section><section>
<h3><a name="Available_Phases"></a>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 src="images/viewphases.jpg" alt="" /></p>
<br />
<a name="globalchains" id="globalchains"></a>
</section><section>
<h3><a name="Global_Chains"></a>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 src="images/globalchain.jpg" alt="" /></p>
<br />
<a name="operationchains" id="operationchains"></a>
</section><section>
<h3><a name="Operation_Specific_Chains"></a>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 src="images/select_service_for_handler.jpg" alt="" /></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
<i>version</i></p>

<p align="center"><img src="images/serviceHandlers.jpg" alt="" /></p>
<br />
<a name="engaginmodule" id="engaginmodule"></a>
</section><section>
<h3><a name="Engaging_Modules"></a>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 src="images/moduleengage.jpg" alt="" /></p>
<a name="turnoffservice" id="turnoffservice"></a>
</section><section>
<h3><a name="Deactivate_Service"></a>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 src="images/inactivate.jpg" alt="" /></p>
<br />
<a name="turnonservice" id="turnonservice"></a>
</section><section>
<h3><a name="Activate_Service"></a>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 src="images/activate.jpg" alt="" /></p>
<br />
<a name="editservicepara" id="editservicepara"></a>
</section><section>
<h3><a name="Edit_Service_Parameters"></a>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 src="images/editserviecpara.jpg" alt="" /></p>
<br />
<a name="viewhierarchy" id="viewhierarchy"></a>
</section><section>
<h3><a name="View_Hierarchy"></a>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>
</section>
</html>
        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>Copyright &copy;2004&#x2013;2021
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>