Downloads Source Javadoc
Author: Unspecified
Home Page:
Version: Unspecified
Release Tag: Unknown
Release Date: Unknown
JVM Required: Unspecified
License: GNU Library General Public License
Categories: None
Dependencies: com.protomatter.pas.base, com.protomatter.pas.cron, com.protomatter.pas.cronmanager, com.protomatter.pas.event, com.protomatter.pas.eventmanager, com.protomatter.pas.init, com.protomatter.pas.jndi, com.protomatter.pas.jndi.spi, com.protomatter.pas.service, com.protomatter.pas.serviceimpl, com.protomatter.pas.servlet
Externals: None

A simple Application Server. It is intended to be used in conjunction with the Apache JServ servlet engine, but should work with pretty-much any servlet engine.
Easy configuration

Everything about PAS can be configured via it's properties file, and you can also import other properties files in-place using the following directive in a properties file:
     Import filename     
This will cause the contents of filename to be read into this file in-place. The imported file can also import other files, but be careful, since circular references are not checked and could result in an infinite loop. Importing other files is a nice way to segment configurations for different projects.

Unified Logging Via Syslog

PAS initializes the {@linkcom.protomatter.syslog} logging system when it starts. Syslog is configured from the PAS properties file like this:
     ##     ## Set the system-wide log mask to at or above     ## the stated level name.     ##     Syslog.level = DEBUG      ##     ## Create a logger that writes to the given file     ## (leave this property out to turn this off)     ##     Syslog.file  = some file      ##     ## Create a logger that writes to either     ## Sytem.out or System.err (leave this property     ## out to turn this off)     ##     Syslog.printWriter  = "out" or "err"      ##     ## Include the name of the thread in syslog output?     ## Default is false.     ##     Syslog.logThreadName = "true" or "false"      ##     ## Include the name of the host in syslog output?     ## Default is false.     ##     Syslog.logHostName = "true" or "false"      ##     ## Use a background thread to actually do the     ## logging?  Default is true.     ##     Syslog.backgroundLogging = "true" or "false"     
This will set the system-wide log mask to at or above "DEBUG", write log entries to the given file, and attach a print writer logger to the System.out or System.err streams.

You can also add and configure any logging class that implements the com.protomatter.syslog.Syslogger interface using the properties file. Simply specify the class of the logger like this:

     Syslog.logger.NAME = CLASSNAME      
Where is a name that's unique among the Syslog.logger.* properties. To pass configuration parameters to it, specify them like this: = key1=val1,key2=val2,...      
Those options will be assembled into a Properties object and passed to the init(...) method of the logger after the default constructor is called. If those steps succeed, the logger is added to Syslog with the addLogger(...) method. The loggers that come with PAS and can be used like this are:
     {@linkcom.protomatter.syslog.TimeRolloverLog com.protomatter.syslog.TimeRolloverLog}     {@linkcom.protomatter.syslog.LengthRolloverLog com.protomatter.syslog.LengthRolloverLog}     {@linkcom.protomatter.syslog.OpenFileLog com.protomatter.syslog.OpenFileLog}     {@linkcom.protomatter.syslog.DatabaseLog com.protomatter.syslog.DatabaseLog}      
Consult the javadoc for each to see what properties can be specified. The PrintWriterLog that also comes with PAS cannot be specified in the properties file because it needs a instance to connect to. Syslog uses a background thread to write log messages to loggers asynchronously so that calls to any of the logging methods will return immediately. Consult the javadoc for the package com.protomatter.syslog for more information on how to use it for logging.

Other Services Provided by PAS

Hierarchical event trees:
{@linkcom.protomatter.pas.event} (interfaces)
{@linkcom.protomatter.pas.eventmanager} (implementation)

Cron facilities:
{@linkcom.protomatter.pas.cron} (interfaces)
{@linkcom.protomatter.pas.cronmanager} (implementation)

JNDI implementation:

JDBC Connection Pools:
{@linkcom.protomatter.jdbc.pool.PASJdbcPoolStartup com.protomatter.jdbc.pool.PASJdbcPoolStartup} (startup class)
{@linkcom.protomatter.jdbc.pool.PASJdbcPoolShutdown com.protomatter.jdbc.pool.PASJdbcPoolShutdown} (shutdown class)

Miscellaneous services:
{@linkcom.protomatter.pas.service} (interfaces)
{@linkcom.protomatter.pas.serviceimpl} (implementation)

PAS and Apache JServ

PAS was designed from the start to work with Apache JServ, though it should work with any servlet engine. PAS is a servlet, and you should configure your servlet engine to initialize it at startup, rather than when the first request to it comes in.

PAS works very well with JServ, and can be used independantly in different servlet zones. This is a very important feature, as it means that one instance of JServ can support multiple PAS instances, one per zone. For this to work, you must have your wrapper.classpath set to only include the JDK's, the JServ jar file, and the JSDK jar file. For each zone, you must then set the "repositories" property in the configuration file for that zone to be the list of all the jar files, zip files and directories you are going to need classes from for anything that you're doing in that zone. This works because JServ uses a separate classloader for each servlet zone.

To configure PAS to run in a given zone, add the following properties to the zone's configuration file:

     ## add PAS to the list of servlets to start when JServ starts     servlets.startup=PAS      ...      ## define the PAS servlet, and give PAS its startup args     servlet.PAS.code=com.protomatter.pas.PASServlet     servlet.PAS.initArgs=properties=/path/to/     
PAS will be started when the zone it's defined in is loaded by JServ.


PAS is free for comercial and non-commercial use. I'd like to know where it's being used, just out of curiosity.

PAS requires the following packages to function properly

JNDI 1.1.1
Available for download from JavaSoft at:

JGL 3.1.0
Available for download from ObjectSpace at:


For support and feedback on PAS, please email Remember that I do this in my spare time, so I may not be able to respond instantly.


The following page lists the available downloads for the release of package 'com.protomatter.pas' tagged 'Unknown'. If you need to work with releases other than 'Unknown', you will need to use the anonymous CVS server to access them.