PAMWeb is a simple application framework and a set of pluggable modules for
quickly constructing web applications. The main goal is to provide a proper
infrastructure for the development of independent ready-made application
modules as well a comprehensive set of such modules that a programmer can assemble
or plug into their application. For example, almost all web sites and applications
need some form of user profile management with login/logout/register functionality
as well as some form of permissions management where users are allowed access only
to certain resources. A web site will often have a FAQ section, a news section, perhaps
some only message boards etc. All these pieces of functionality can be abstracted
into separate, configurable modules.
Such modules can be presented as portlets in a portal environment, or assembled
in a standard web application.
The architecture is a classic 3-tier. A shortcoming is that the persistent
layer is somewhat sloppy compared to such excellent tools as Hibernate for
example. However, it can be replaced as its API is not intrusive.
UI layer is using TICL, which allows for very concise and flexible expression
on style, layout and behavior.
The framework includes a simple meta-model for dynamic typing of objects. Ralph
Johnson document a Type Object pattern some time ago. This follow this
idea, easily expressible in Java. Dynamic types are like records created at run-time
and attached to persistent objects. Each dynamic type is made up from a set
of dynamic properties, each typed on its own. A dynamic property has an editor
and a viewer associated with it. Etc.
The user management module is fairly complete and advanced. It has been used
in several commercial projects. It includes a sophisticated permissions management
sub-system that has proven practicle and flexible.
The forums module is quite flexible as well. Combined with the categorization module,
the message/forum abstractions are general enough to solve most content management
PAMWeb is available only in source form, from the following Subversion URL:
Use your favorite Subversion client to access it. Let us know if you are using it!