<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2017-05-06 
 | 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="20170506" />
    <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: 2017-05-06<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.7.5<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.7.1.html" title="1.7.1"><span class="none"></span>1.7.1</a>  </li>
    <li><a href="../release-notes/1.7.2.html" title="1.7.2"><span class="none"></span>1.7.2</a>  </li>
    <li><a href="../release-notes/1.7.3.html" title="1.7.3"><span class="none"></span>1.7.3</a>  </li>
    <li><a href="../release-notes/1.7.4.html" title="1.7.4"><span class="none"></span>1.7.4</a>  </li>
    <li><a href="../release-notes/1.7.5.html" title="1.7.5"><span class="none"></span>1.7.5</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="../svn.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="http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/" 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>

<div class="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>

<div class="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>

<div class="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>
</div></div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
<div class="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>
</div>
</html>
        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>Copyright &copy;2004&#x2013;2017
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>