For the server administrator | For the user | For the developer | Other stuff

jwma (java webmail application) version 2.6.3


As with older versions, it provides access to an imap email store. Multiple users can authenticate, read, send and manipulate email and store a list of contacts and email identities. Currently, the assumption is that it will be running on the same machine as a mail exchanger, but extending its use case to allow interaction with a non-local server ought to be possible.

The server administrator configures basic options by editing a simple config file. Here are set protocol (imap or imaps), ports and the default language that's offered to users. Individual users can separately choose the language of the interface and select from a few other options.

Jwma depends on a java webapp server (tested with tomcat7), imap server (tested with dovecot) and smtp server (tested with exim4). It was developed on a Gnu/Debian/Linux machine, but in principle it should run on any OS with a java runtime and interact with alternative server programs with no more than minimal changes. In addition to the stripes framework, javamail is used for interaction with the mail exchanger, jquery for javascript, the wyzz editor for writing html email and jericho-html for parsing html when this is necessary to obtain plain text.

The project is currently maintained by a single person and as such it is tested only on machines setup by him. It can be difficult to distinguish between standard practise and mere individual preference in the configuration of a server and to avoid making coding assumptions based on the latter. If you have a system with tomcat and dovecot running, any problem will require only a quick and trivial fix. But the intention is that jwma should also work with other java webapp and imap servers and indeed on systems with a java environment other than Gnu/Linux. Please report any problems; I'll quickly find a solution to your problem and thus also improve jwma.

For the server administrator

Installation | Upgrading | Configuring | Data storage | Internationalization | Security | the Session | File Permissions


This assumes a machine running a suitable imap server (known to work with dovecot), a smtp server and java webapp server. Download from sourceforge and copy the webmail.war file into the appropriate place for your webapp server (webapps for tomcat) and it will start up and load the login page - if you're upgrading from an earlier version please first check out the next section.

You may need to configure the imap server to allow plain text logins; with dovecot on Debian comment out this line in /etc/dovecot/conf.d/10-auth.conf and restart dovecot:-

disable_plaintext_auth = no
If you have an account on the imap server and it's offering an imap service on port 143, you should be able to login and access your email. From this point see the user guide section.


The jwma.config file has changed, with two new options added. Before starting up this version you must either delete the existing jwma home directory (not just the jwma.config file) or else add these lines to the bottom of the file:-

#1 - session is kept alive or 0 - it times out after 30mins unless the compose message page is open
keep_alive = 1

#log level one of ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
log_level = DEBUG
Changes since version 2.4.6:-

New in 2.5.1:-

New in 2.5.2:-

2.5.3 is a bug fix release:-

New in 2.6:-

2.6.1 is a bugfix release:- 2.6.2 release:- 2.6.3 release:-

If you're upgrading from 2.1 onwards all users must delete and then re-enter their mail IDs, even if they never changed from the default JWMA User<username@localhost> setting. This is necessitated by a rationalization of the way in which mail IDs are stored. On this occasion there are no changes to underlying storage schema, which is not meant to indicate this is likely to happen in the future :-)

If you're upgrading from version 2.0 you need to delete the existing home folder .jwma (or jwma on Windows) to enforce a new default configuration file to be written. Unfortunately the user config and contact storage formats have also changed, so there is no point in saving the .jwma/data folder files. This should never be necessary again (until the next time ~_^)

If you intend to switch to database storage of user configs and contacts (serialization remains as default) and you used database storage with versions 0.98 - 1.01, existing databases must be dropped and recreated.


When the first user logs in, the .jwma (or jwma on Windows) directory is created and a default config file jwma.config written to it. The location of this directory will likely be in the base of the webapp server installation, such as /opt/tomcat/.jwma. If you make changes to the config file, you need to reload the webmail app or restart the app server, to have the changes picked up.

No per user configuration is necessary other than there must be an pre-existing imap account. Jwma passes login details through to the imap server and a jwma account is automatically created for each user the first time they log in. With the default persistence setting, preferences and contacts for each user are stored in two separate files, inside the .jwma/data directory. Before switching to database persistence see the next section.

Data storage

Pro and con:- Before editing the persistence field in jwma.config and restarting the app server, you must create the database and also supply a suitable jdbc driver for your version of postgres or mysql. For java versions below 1.8 this can be put in the tomcat/lib, but later versions seem to require this is placed in the webmail/WEB-INF/lib/ directory.


$>su postgres
postgres$>createuser -P jwma
Enter password for new role: 
Enter it again: 
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n

postgres$>createdb -O jwma "jwma"
nb the password must be webmail
finally create the schema by inserting the empty database in utilities/database:-
psql -d jwma -f utilities/database/jwma.postgres
or if you prefer to do it manually, make it look like this:-
           Table "public.jwma_user"
    Column    |          Type          | Modifiers 
 username     | character varying(20)  | not null
 auto_empty   | boolean                | not null
 auto_quote   | boolean                | not null
 auto_sign    | boolean                | not null
 contact_list | bytea                  | 
 draft_folder | character varying(30)  | not null
 language     | character varying(2)   | not null
 mail_id      | character varying(150) | not null
 processor    | integer                | 
 sent_folder  | character varying(30)  | not null
 sort_order   | integer                | not null
    "jwma_user_pkey" PRIMARY KEY, btree (username)


$>mysql -u root -p; 
mysql>create database jwma; 
mysql>grant all on jwma .* to 'jwma'@'localhost' identified by 'webmail';
mysql>flush privileges;
As with postgres, the schema can be created by inserting the supplied empty database:-
mysql -u root -p jwma < utilities/database/jwma.mysql
or if you wish to do it manually, it must look like this:-
mysql> describe JWMA_USER;
| Field        | Type         | Null | Key | Default | Extra |
| USERNAME     | varchar(20)  | NO   | PRI | NULL    |       |
| AUTO_EMPTY   | bit(1)       | NO   |     | NULL    |       |
| AUTO_QUOTE   | bit(1)       | NO   |     | NULL    |       |
| AUTO_SIGN    | bit(1)       | NO   |     | NULL    |       |
| DRAFT_FOLDER | varchar(30)  | NO   |     | NULL    |       |
| LANGUAGE     | varchar(2)   | NO   |     | NULL    |       |
| MAIL_ID      | varchar(150) | NO   |     | NULL    |       |
| PROCESSOR    | int(11)      | YES  |     | NULL    |       |
| SENT_FOLDER  | varchar(30)  | NO   |     | NULL    |       |
| SORT_ORDER   | int(11)      | NO   |     | NULL    |       |
| CONTACT_LIST | blob         | YES  |     | NULL    |       |


jwma is a genuinely internationalized app; the system administrator can configure the default language (but please note that supplied translations from English are almost certainly flawed - see to do). All users can make their own selection which is recorded in their preference settings, see User Configuration. They do this entirely independently of other users and the default language, although this is always presented at the login screen.

To add another language copy a StripesResources properties file in /webmail/web/WEB-INF/classes to (where xx is something suitably representative), translating the right hand side of = on each line of the file. Add the appropriate xx to the languages list in jwma.config and reload or restart the app server. Please submit a copy of your file for inclusion in the next release.


I've said in the past that this is not a primarily a jwma issue. I'm not sure I still believe that, but it remains the case that authentication is managed by the imap server with jwma merely passing details through to it. When it's running on the same machine, with the mail_host setting being localhost as must be the case with the current version, I don't believe that passing these in plain text is an issue. Nevertheless, there are features built into jwma that have security in mind and also configuration changes that can be made with the same objective.

The user name, but not the password, is stored in the session object. Databases are protected from malicious input, by checking and sanitizing user input for storage.


jwma writes and rotates logs files which will include evidence of any nefarious activity; all login attempts are recorded, together with the source ip address if authentication fails. With tomcat or another app server that runs the app from an exploded .war file, these will be in the .jwma (or jwma on Windows) directory. If the app server runs the app from the war file itself, it's not possible for the code to manipulate settings in the file and I'm not sure where the logs will be. Try looking in the directory from where the app server runs.

As with any web-based service on a public network, it is good practise to monitor these logs; I suggest logwitch for help with this. If you're responsible for a system with a lot of users, it's worth looking out for WARN and ERROR entries such as these:-

ERROR JwmaExceptionHandler - net.sourceforge.stripes.exception.ActionBeanNotFoundException: 
Could not locate an ActionBean that is bound to the URL [/Admin.jwma].

2016-08-05 18:09:07,215 WARN  JwmaAuthenticator - login FAILED for david
2016-08-05 18:09:07,216 WARN  LoginAction - FAILED login from
A single pair of entries similar to the second example may simply be due to a typo, but if you see something similar to the first example I'd recommend having a word with the user in question (there is no Admin.jwma page).

You may wish to make use of the ability to set logging levels in the config file; once you are satisfied that jwma is running smoothly, you could reduce log verbosity. I'd suggest not going any lower than the WARN setting. This option is only effective if your web app server runs the apps from an exploded war file, as does a standard tomcat install for instance.


Presenting the login screen over https avoids the risk of passwords being sniffed. You may want to create a self-signed certificate, using keytool and in the tomcat server.xml file you need to uncomment this section and restart tomcat:-

        keystoreFile="/opt/tomcat/.keystore.pem" keystorePass="changeit"
The dovecot configuration may also need to be tweaked, in /etc/dovecot/conf.d/10-ssl.conf (on Debian) the #ssl = yes line must be uncommented.


A final config change that should be considered from the standpoint of security is to switch from the default imap protocol to imaps; the jwma configuration for this has been dealt with already here. Additionally the java environment must have a certificate in its trusted keystore supplied by the imap server.

First check that there is an imap server listening on port 993:-

david@Badwolf ~ $ telnet localhost 993
Connected to localhost.
Escape character is '^]'.
Next, move to the utilities/imaps/ directory and ensure that InstallCert.txt has the correct settings for your system. With full administrative capabilities (ie user root on Gnu/Linux) run the InstallCert utility:-
Badwolf /opt/tomcat/webapps/webmail/utilities/imaps # java InstallCert 
Loading KeyStore /etc/ssl/certs/java/cacerts...
Opening connection to localhost:993...
Starting SSL handshake...

snip									    snip

Server sent 1 certificate(s):

 1 Subject EMAILADDRESS=root@Badwolf, CN=Badwolf, OU=Badwolf, O=Dovecot mail server
   Issuer  EMAILADDRESS=root@Badwolf, CN=Badwolf, OU=Badwolf, O=Dovecot mail server
   sha1    92 ec 16 b5 7a 50 03 48 f7 d1 fb b3 d2 f1 a7 46 d2 59 22 36 
   md5     83 3e ab ca 06 77 3c ae 79 a7 22 06 46 b9 15 d8 

Enter certificate to add to trusted keystore or 'q' to quit: [1]

  Version: V3
  Subject: EMAILADDRESS=root@Badwolf, CN=Badwolf, OU=Badwolf, O=Dovecot mail server
  Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11

  Key:  Sun RSA public key, 2048 bits

snip									    snip

Added certificate to keystore using alias 'localhost-1'
The first cut is to remove details of any alarming looking exception, which is nevertheless not fatal, at least for me. The second just removes details of the certificate which is successfully added. Once dovecot and then jwma have been restarted, you should see this line in jwma.log:-
2016-08-26 16:28:22,670 INFO  Init - key access_protocol value imaps
It has to be said that this process is somewhat lacking in clarity; if you can document a less obscure method to achieve the same result, please let me have it.

the Session

The default web.xml file specifies a session length of 30 minutes, but with the standard keep_alive setting of 1 this is overriden by javascript pokes from client browser to server. A session is created when a user logs in and we rely on a logout for it to be closed.

This situation is probably fine where there are only a few, educated users and it is also a nice feature to have the INBOX update automatically and indeed pretty essential that the session does not time out while a user is writing a lengthy email. If this is unlikely to scale too well on your install, you can change the setting to 0. The session is still kept open if the user is composing a message (typing on the client does not register on the server!), but if other screens are left inactive the session will be closed after 30 minutes.

File Permissions

If users find that operations such as deleting messages and creating mailboxes fail silently, without a warning in red coloured text, this is probably due to insufficiently permissive access controls to parts of the system involved in mail handling.

It's important to remember that on some Gnu/Linux variants, such as Debian, the users INBOX may actually be a file under /var/mail rather than being located in the home directory. On a recent Debian install deleting messages from the INBOX fails:-

root@raylor # ls -l /var/
total 36
drwxr-xr-x  2 root root  4096 Oct  6 06:21 backups
drwxr-xr-x 14 root root  4096 Oct  3 10:06 cache
drwxr-xr-x 59 root root  4096 Oct  3 10:08 lib
drwxrwsr-x  2 root staff 4096 May 30 06:18 local
lrwxrwxrwx  1 root root     9 Sep 29 15:45 lock -> /run/lock
drwxr-xr-x 13 root root  4096 Oct  6 14:18 log
drwxrwsr-x  2 root mail  4096 Oct  6 06:25 mail
drwxr-xr-x  2 root root  4096 Sep 29 15:45 opt
lrwxrwxrwx  1 root root     4 Sep 29 15:45 run -> /run
drwxr-xr-x  8 root root  4096 Sep 29 16:22 spool
drwxrwxrwt  3 root root  4096 Oct  6 14:18 tmp
Changing permissions fixes this:-
root@raylor # chmod o+w /var/mail/

root@raylor # ls -l /var/
total 36
drwxr-xr-x  2 root root  4096 Oct  6 06:21 backups
drwxr-xr-x 14 root root  4096 Oct  3 10:06 cache
drwxr-xr-x 59 root root  4096 Oct  3 10:08 lib
drwxrwsr-x  2 root staff 4096 May 30 06:18 local
lrwxrwxrwx  1 root root     9 Sep 29 15:45 lock -> /run/lock
drwxr-xr-x 13 root root  4096 Oct  6 14:18 log
drwxrwsrwx  2 root mail  4096 Oct  6 06:25 mail
drwxr-xr-x  2 root root  4096 Sep 29 15:45 opt
lrwxrwxrwx  1 root root     4 Sep 29 15:45 run -> /run
drwxr-xr-x  8 root root  4096 Sep 29 16:22 spool
drwxrwxrwt  3 root root  4096 Oct  6 15:02 tmp
root@raylor # ls -l ~david/mail/
Similar problems with message and folder manipulation outside of the inbox will probably be fixed by attending to permission in the mail or Mail directory in the user's home directory.

For the user

Log in | Main page | User Configuration | Message lists | Reading messages | Sending messages
Rich Text Toolbar | Contacts | Managing folders and mailboxes | The small screen interface

Log in

On a desktop machine if you browse to the address given you by the administrator, you'll get the login screen where you can authenticate with your imap username and password to access your email.

If you tick the Remember box a cookie is written to your browser. Depending on the browser's configuration, the Username field may be pre-filled next time you access the page. The link on the top left is there in case you arrived here using a small screen device; it will take you to the mobile interface.

Main Page

This is where you land after a successful login and where you can quickly return to from the left most link on the navigation bar.

From top working down, you see that the INBOX has 3 messages, one of which has not been read. The already mentioned navigation bar takes you to the other parts of the app as well as returning you here. Next the pre-exisiting folders and mailboxes are displayed. Folders, which can contain mailboxes are shown on the left and Mailboxes which contain messages on the right. Below here are options to delete selected folders or mailboxes, move mailboxes from their logical position inside the INBOX to another folder and create new folders or mailboxes. Finally the icon at bottom right shows that the Trash folder is not empty.

In this state (not empty), the icon is a link that will take you to a list of messages in the Trash folder. The INBOX icon is also a link as are the folders and mailboxes in their respective lists. Be aware that deleting mailboxes and folders removes all messages and sub folders; unlike deleting a message, which actually moves it to the trash folder (see Message lists), there is no warning or second chance.

User Configuration

Select Settings in the navigation bar and you'll be taken to this screen, which initially displays the default settings for each user.

You'll want to replace the Mail identity with one or more of your own email addresses. Note that you cannot delete the default until at least one alternative is in place. This is because it's not possible to send email without this setting.

If you select a different language all the screens (except the login page) will be translated accordingly. Note that by default Trash messages are automatically deleted when you logout; if you stick with this, although deleting messages from other mailboxes actually moves them to Trash, on logging out, they really will be gone.

By default, sent mail is not archived to an Outbox and there is no Draft folder for saving messages (even if there is a mailbox of that name); you'll probably want to select mailboxes for these roles, possibly creating them first back in the app's Main page.

Message display options:-

Options 1. and 2. are reliable.

Options 3. - html display without images mostly works as webmail tries to filter out style options known to mess up it's appearance, but it's possible some will still cause problems. I'd appreciate receiving a copy of these so the issue caused can be fixed.

Option 4 - displaying in line images is also reliable; email with these images seems to be one of two flavors. Firstly a misplaced idea in my opinion of company branding and a waste of bandwidth or a photo added to the email sent from a phone (possibly a similar waste!).

Option 5. (and html email in general) is a poor choice in my opinion, but displaying remote images is not problematical if that's what you want. Suggested reading in this regard. Also note that as described in the Reading messages a section, a sensible user, who selects options 1 or 2 here can quickly switch to option 3 to read an individual html message.

You must press the Update button to make changes stick. Don't forget to do this after changing mail identities.

Message lists

IMPORTANT! - any problem with deleting messages failing silently (no warning in red text) is probably due to this issue. The same applies to an attempt to create a mailbox or folder failing without warning.

Here's an mailbox with 3 messages; looking directly below the navigation bar you see this is the INBOX, but listings of all the mail boxes will appear the same.

You can Select all messages for a mass Delete or Move to; that can also be done on an individual basis by checking boxes on the left as appropriate. Delete is actually a move to Trash except for messages already there, when it really is a delete. Looking at the three individual messages, you see that two have been read R and the third has been answered A. The first message has an attachment, which is indicated with *.

All are sent using as the from address, so there's little point (even if there were more messages!) in changing the sorted by setting to list messages by from address. The setting shown is not the default (rather Date oldest first), when this is changed the selection sticks automatically for all mailboxes and is remembered even if you logout.

Search allows you to create a list of messages from the current mailbox which contains your search term in the body of the message. Clicking on the subject of a message displays it (see Reading messages) and to the right, delivery date and message size are displayed.

Reading messages

The appearance of messages depends on the setting chosen in Settings.

This mail is a phishing attempt; it's the third #3 message in the folder named specimen which means it's the most recent as chosen sort order has no bearing on this. The current message display setting is option 1 geek so there is information about the structure of the message; lamentably as well as being an attempt to steal, there is also no plain text part, so jwma has to parse the marked up html. If the plain text / html toggle is selected, the html is displayed without images, ie equivalent to setting option 3.

If in Settings an unwise user selects 5 allow all images, the messages is displayed as the sender intended (more or less, although some styling may be removed to avoid unwanted changes to the appearance of Jwma itself) and since remote images have been fetched, his email address may now be marked as known to be live in a spammers database.

The screen will be the same for messages in all other mailboxes including the INBOX, except in a mailbox you designated to be Draft, when a compose window will be opened with the saved message already in place.

Top and bottom to the far right are widgets for cycling through the messages in the current mail box and presenting this message in a screen suitable for printing. If clicked, the icon, far right from the subject will reveal (or conceal) the message headers. Here's the headers of the same message, they appear above the body of the message.

If you enabled Automatically quote in User Configuration, the Toggle auto-quote is useful for turning this off if you want to reply without reference to the original mail.

If you tick the With Attachments box, Forward to sends messages on mostly unaltered, leaving the recipients email client to decide how to display them. More on this in the next section.

Here's a second example email, shown both with settings 1 and 2 selected.

Setting 1 displays the plain text part of the message and notes the presence of other parts. Setting 2 omits what might be considered to be this extraneous information. Although supporting html email standards is not of particular concern to jwma, it generally does a pretty fair job at this. This particular email is unusual in that the content of the text/plain and text/hml parts are not identical. Here's the same message in it's full html glory (using setting 5 - allow all images).

Lastly, here's a third mail using setting 2; it has three images attached in line.

With out going to the Settings page, they can be displayed by selecting one of the Display image: links, which temporarily switches you to allowing in line images (setting 4).

Irrespective of display option, attached files and in line images also, are presented as downloadable links.

Sending Messages

As standard Jwma creates and sends messages as plain text

The rich text link replaces the text area with an embedded html editor to allow the creation of html messages.

If you use the Browse button to add a file attachment, two further file selectors will appear automatically, giving the option to attach up to three files. If an attachment is an image file many email clients (including jwma if Setting 4 or 5 are used for reading messages) will diaplay the image as well as creating a download link for it.

Save Draft allows you to save a partially complete message into the folder you configured as described in the User configuration. section. If you have not done this a a warning is displayed. It is not functional if rich text was selected. A work around is to write and save a plain text message; when you reopen it from the draft folder you can switch to rich text and apply the markup as you want.

No attempt is made to display forwarded messages before they are sent on; you see that the subject and recipient have been rewritten and a preamble stating that this is a forwarded message. You can edit this preamble before sending, but apart from removing any attachments (unless you ticked the box as described above) (see With Attachments box note) the original message is included unaltered.

The Rich Text Toolbar

The use and function of most of the supplied tools is obvious from their similarity to those supplied with many other applications -generally select the text to be affected and click the button. Hovering over the buttons will bring up a tooltip for extra clarification. A few do benefit from a little extra information:-

To create a link, enter the text for the link eg download and select it before pressing the link button. This brings up a dialogue box:-
Enter the target URL of the link - eg
Please give a title for the link - eg download link
Should this link open in a new window? - eg press Cancel to open in same window
The insertimage button is used to create a link to a remote image not to load an in line image to the email from a file, which you would do by uploading an attachment.
Enter the target URL of the image - eg
Please give a title for the link - eg jwma logo
This is the email written and ready to send:-

Before we do that here's the result of pressing the htmlmode button, which toggles between the above view and html source code.

Lastly this is how jwma displays this message with Message display option set to 5:-


This simply allows you to store a list of contacts with email addresses. Clicking on the email address takes you to the compose window, with the To field pre-entered.

Managing folders and mailboxes

To create a new top level mailbox type a name such as test mailbox in the input field adjacent to the drop down list and press the Create new button.

You can use the / character to create a nested mailbox. If you enter test folder/test mailbox in the input field, that will create both a new folder and a new mailbox within it.

If you use an already exiting folder name, just a new nested mailbox is created; after pressing Create new with test folder/another mailbox in the input field, the single test folder will now contain two mailboxes.

You can create an empty folder without creating a mailbox at the same time by selecting Folder from the drop down list.

Folders and mailboxes are deleted by checking the appropriate box and pressing the Delete button. Care is needed as without warning all mailboxes nested within a folder are removed as are all messages within a mailbox.

Top level mailboxes and all the messages they contain can be nested in a folder by checking the appropriate box, selecting the folder from the drop down list and pressing the Move to button. Nested mailboxes cannot be moved directly, but they can be deleted after all messages in them have been moved.

The small screen interface

If you access Jwma using your smart phone, you should be automatically directed to an alternative interface, but as a fall back the login screen of each interface allows you to switch manually. Compared to the desktop interface there are optimizations both in layout and in a reduction of the feature set.

These screenshots where taken from a galaxy 2 running cyanogenmod; the mobile interface looks pretty much the same on the iphone.


A successful login takes you directly to the INBOX rather than a folder listing. The folder list is accessible in the same way as on the desktop interface (the first left navigation icon) a major difference being that type 2 mailboxes (ie folders containing mailboxes) and the mailboxes they hold are not accessible. Other differences include the absence of a save draft option, no option to create html mail, message lists are displayed in recent first order and message display being set to plain text (option 2).

There is no contradiction between the two interfaces in that their settings do not clash. Any type 2 mailboxes you created via desktop access remain untouched by small screen access and if you normally read messages using some setting other than plain text, that setting will remain in place for desktop access.

For the developer

To do | Development | Not implemented | FAQs

To do

If you'd like to contribute in any way please get in touch; especially if you want to do something major that you would like included in future releases. This list is not necessarily exhaustive, all patches that add or improve functionality or squash bugs will be considered and you'll be credited for your work. Please see the development section for help getting started.

Please report any problem you have getting jwma to work; chances are it can be quickly resolved.


You'll need a java development environment, a java webapp server and a locally running mail exchanger, which includes an imap server. The imap server needs to be configured with a username and password and needs to accept authentication from a webmail front end in plain text.

Here's some help to get started in two major development environments.


  1. File/New Project/Java Web/Web Application
  2. name the project to be webmail
  3. choose the server and java version, leave context path unaltered as /webmail
  4. don't select a framework
  5. delete all auto created files and folders from the new webmail directory
  6. replace them with the src and web directories from the source archive and the nbproject directory and build.xml file from the netbeans archive, available in the 2.5 source release.


  1. import the code into the Eclipse Workspace
  2. add jar file available in both source and binary releases to Build path

Not implemented

The purpose here is to avoid I need this feature from 0.9x / 1.0x type disappointment. There's some overlap with to do here, but it was not my intention to include every last feature. If it's missing and you want it enough to code it, I'd be interested in including it in a future release even if it was not mentioned in the to do section.


1) Database storage without any hibernate/castor etc?
answer: Yes. I implemented a version with OpenJPA, which increased the .war files size by x4. That would be just about acceptable if the OpenJPA library could be removed in installations using serialization. That's not possible without recompiling as the domain files need to be byte enhanced which then necessitates the presence of OpenJPA at runtime.
Another trial was done with hibernate - no byte enhancement issues, but the .war files size is x8!
Short answer is that writing sql manually is not fun, but performance is much better and this is anyway not a database heavy app.

2) Can I use a database other than mysql or postgres?
answer: Provided there is a jbdc driver available, yes. You would need to add the database into the getConnection() method of and recompile.

Other stuff

Credits | License | Old documentation


Not necessarily in order of merit:-


Earlier versions of jwma (from 0.9x to 1.x) were covered by a BSD style license, which still applies to those files that the program has retained - for instance the files in the images directory. A copy of this file is included in the license directory in the file LICENSE.

Starting with version 2.0, the java source code files were completely rewritten and these are now covered by the GPL3 license a copy of which is included in the same directory in the file GPL.

The licenses of all bundled software including stripes, javamail, jquery, jericho-html and wyzz are acknowledged. There is an explanatory note in the file license/README.

Old documentation

The documentation for the orginal versions (99.x to 1.0) is still available here.

version 2.0
version 2.1
version 2.2
version 2.3
version 2.4