The Mamba application server provides a standalone implementation of the
Simple API for serving both dynamic and static content. It serves static
content such as HTML files and images in much the same way as a traditional
HTTP server would.
However, if dynamic content is required then the Simple API provides a means
to extend the servers functionaly. Serving dynamic content can be achieved
by implementing Service
objects, writing
Velocity templates,
or writing BeanShell scripts.
A more comprehensive explanation
of how to write Service
objects can be found on the
Simple homepage.
Getting the Mamba application server up and running could'nt be simpler.
It requires no administration or configuration and is fully operational
once it is started. Firstly it must be downloaded. The downloaded file
is a "zipped" or "compressed" in the GZIP format. This can be unzipped by
both the WinZip and PKZIP applications for Windows, and by gzip and tar
on Linux or any other UNIX platform.
Within the compressed file there are several directories, these contain
tools that help in the development of Service
objects as well
as various icons and a Java Archive (JAR) files that contain the "executable" byte code.
The JAR files that contain the "executable" byte code can be seen in the
diagram of the directory structure shown below.
|
[+] mamba-1.1 | +---[+] bin | | | +--- mamba | +---[+] class | | | +--- build.xml | +---[+] html | | | +---[+] icons | +---[+] lib | | | +--- beanshell-2.0.jar | | | +--- mamba-1.1.jar | | | +--- simple-2.4.jar | | | +--- velocity-1.3.1.jar | +---[+] log | +--- mapper.properties | +--- server.properties | +--- velocity.properties |
The lib
directory contains JAR files for Mamba, Simple, Velocity, and BeanShell,
there are no unresolved external dependancies.
All that is required to start the server is to edit a Java properties file named
server.properties. Typically you will only need to edit the port number if it is other
that the default port number 80
, however the
the web root (the directory that the files are served from), and the service classpath
(the directory that service classes are located) can also be edited. By default Mamba has
a predefined directory layout and does not require these locations to be specified.
Starting the server on a UNIX or Linux platform can be done using the provided shell script.
The script has been tested on both Solaris and Linux and can be used to start Mamba each
time the system boots. The script is located in the bin
directory and
requires three environment variables to be set. Firstly the MAMBA_HOME environment variable
is used to locate the directory that Mamba has been installed in. This is used when the
script is copied from the bin
directory to another directory, such as the
/etc/init
directory on a Linux system. To clearly illustrate what the
MAMBA_HOME environment variable is used for consider the directory /INSTALL_DIR
on a Linux system. This is the directory where the Mamba archive mamba-1.1.tar.gz was
downloaded and unzipped. So the directory contains a single subdirectory named
mamba-1.1
, which has the structure illustrated in the above diagram. Without
moving the script /INSTALL_DIR/mamba-1.1/bin/mamba
the server can be started
by executing that script, as it will simply assume that the MAMBA_HOME environment variable
is the parent directory by default, which is /INSTALL_DIR/mamba-1.1
. However,
if the mamba
script is moved to /etc/init
so it cant start each
time the system boots the MAMBA_HOME environment variable needs to be set, as the default
value is the parent directory will be incorrect. So simple open the copied file
/etc/init/mamba
and add the line MAMBA_HOME=/INSTALL_DIR/mamba-1.1
to ensure it starts correctly. The two other environment variables are MAMBA_JAVA_HOME and
MAMBA_LIB, which point to the location of your Java Runtime Environment (JRE) and the JAR
files used by Mamba respectively. If your Java Virtual Machine (JVM) is located at a
path other than /usr/bin/java
then the MAMBA_JAVA_HOME environment variable
needs to be set. By default the MAMBA_JAVA_HOME is set to JAVA_HOME or /usr
if that is not set. The value of MAMBA_JAVA_HOME should be such that MAMBA_JAVA_HOME plus
/bin/java
equals the full path to your installed JRE. The table below provides
a short summary of the environment variables and their purpose.
|
Starting Mamba on a Windows platform such as Windows XP or Windows 2000 is a simple
matter of executing a command using the command console. The commands shown below can be
used to start Mamba and can also be used to create a .CMD
or .BAT
file to avoid having to retype the command. For clarity assume that the Mamba archive
mamba-1.1.tar.gz has been downloaded and unzipped in the directory
c:\INSTALL_DIR
.
c:\> cd c:\INSTALL_DIR\mamba-1.1 c:\INSTALL_DIR\mamba-1.1\> set CLASSPATH=lib\simple-2.4.jar c:\INSTALL_DIR\mamba-1.1\> set CLASSPATH=%CLASSPATH%;lib\velocity-1.3.1.jar c:\INSTALL_DIR\mamba-1.1\> set CLASSPATH=%CLASSPATH%;lib\beanshell-2.0.jar c:\INSTALL_DIR\mamba-1.1\> set CLASSPATH=%CLASSPATH%;lib\mamba-1.1.jar c:\INSTALL_DIR\mamba-1.1\> java -Dserver.properties=server.properties mamba.serve.Server |
Before the discussion on configuration proceeds a breif description of
the initialization process is provided. The initialization process for
Mamba is centered on system properties, that is, properties within the
java.lang.System
object. This object can have properties
set using the -D
flag with the JVM, as illustrated above.
The properties used by Mamba are obtained from a Java properties file
identified by the system property server.properties
. This
file contains a set of name and value pairs that are used for
configuration. Although all of the properties within this file can be
specified to the JVM using the -D
flag, storing then in
a Java properties file is preferred.
Once Mamba starts it gathers the properties specified in the
Java properties file and pushes them into the
java.util.System
so that they can be accessed throughout
the system by various objects. The following sections describe the
various configuration details for Mamba.
Mamba is configured directly using the Java properties file
server.properties
, which can be specified using
the -D
flag to the JVM with the property name
server.properties
. The properties
specified in this file will be loaded into the
java.lang.System
object so that they are globaly
accessable to objects within the system. The various properties
that can be set in this file that are specific to the server are
described below.
|
Mapping is the act of mapping a URL to a Service
object.
Those farmiliar with Java Servlets will know that mapping involves
providing a URL string that is matched with incomming HTTP requests
so that a suitable Servlet can be selected to process the request.
The concept of mapping in Mamba is exactly the same. The configuration
of the mapping scheme used is determined by a Java properties file
named mapper.properties
which is stored in the root
directory of your installation, as can be seen in the diagram above.
The mapper.properties
file contains the mapping used to
resolve a request URL to a service implementation. There are various
mapping schemes that can be used by the server each implemented
as a unique Mapper
object. Below is a list
of the current Mapper
implementations provided.
simple.http.load.DefaultMapper
objectsimple.http.load.PrefixMapper
objectsimple.http.load.PatternMapper
objectsimple.http.load.mapper
property, which can be
specified to the JVM using the -D
or using the
server.properties file. Each of the mappers has various advantages,
and each applies a unique mapping technique.
Default Mapper
The DefaultMapper
is used to provide URI mapping
for Java class names using a specific URI path structure. This
uses only the path part of the URI to identify the class name.
The structure used is formed using an initial, optional, class
name followed by a path part. Examples are shown below.
http://hostname/demo/DemoService.class/index.html http://hostname/demo/DemoService.class http://hostname/index.htmlAll of the above path structures are valid. The first shows a reference to the class
demo.DemoService
with the
path part /index.html
. The class is identified
by the ".class" extension, which terminates the name of the
class name. If there is no ".class" this means the URI has no
reference to a class. This does not require the
mapper.properties
file and can adapt to changes
in implemented services.
Prefix Mapper
The PrefixMapper
provides a mapper that is used to
perform mapping using prefix paths. This provides a scheme like
the Servlet context mapping scheme. This Mapper
allows arbitrary path configurations to be mapped directly to
a service class, which can be autoloaded to serve content.
This can break the URI path into three components, the prefix,
the class name, and the relative path. The prefix is the path
part that is used to acquire the service name. A prefix is
a URI directory path, such as /path/
, which is
unique. The relative path is the remaining path, after the
prefix is removed. So a path of /path/bin/README
has the relative path of /bin/README
.
The PatternMapper
provides a mapper that is used
to perform mapping using patterns. This provides a scheme like
the Servlet wild card mapping scheme. This scheme
allows arbitrary path configurations to be mapped directly to
a service class, which can be autoloaded to serve content.
This uses the wild card characters * and ? to specify patterns for matching URI paths with service class names. For example take the pattern *.html, this will match any URI path that ends with .html, such as /index.html or /example.html. Unlike most Servlet engines this allows a ? mark character which specifies a single character. For example, index.??? can be used to match /index.htm or /index.jsp.
*index.??_??.html = example.LocaleService /*secure*.* = example.SecureService
Taking the above example mappings as the Java properties file
loaded, matches for URI paths such as /index.en_US.html and
/index.fr_CA.html will match the LocaleService
.
Any number of wild card characters can be specified and the
order they appear in the Java properties is signifigant.
The first pattern has the lowest priority and the last has
the highest. For example taking the above specification, a
URI path such as /secure/index.en_US.html will match to the
SecureService
as it appears last within the
Java properties file mapper.properties
.
Velocity is configured directly using the Java properties
file velocity.properties
, which contains
various properties that can specified.
Properties in this file influence how templates
are loaded and processed as well as where the log files for
Velocity are kept. Typically there are only two properties that
need to be set within this file, they are described below.
|