Puakma Tornado Server

Puakma Tornado Server 3.56

100% Java application server and web development framework. Includes installer and embedded relational database. Install and setup in less than 2 minutes!




  • Updated WIDGIE (WidgetItem) to catch Throwable rather than Exception. This ensure badly compiled classes (eg java.lang.Error throws) are caught. Previously the WIDGE task would cease execution


  • Changed the default order that design elements are exported from the system tables when exporting a .pmx. This ensures that libraries are exported first which means that when loading a large .pmx, AGENDA and WIDGIE can load their items and be sure that the libraries have already been loaded into the system tables


  • Update SharedActionClassloader to preload all action code (as well as libraries) this will allow actions to call other actions


  • Fixed a bug in Tornado's HTTP stack that caused a stack overflow when a byte range request was made with an invalid range.


  • Updated pmaThreadPoolManager adding new method requestQuit(). Also updated addins that use pmaThreadPoolManager to call this method as they shut down. The addition of this method allows Tornado applications that require multi-threading to use this class.


  • Updated the way puakma.util.Util.logStackTrace() works when passing a trace depth of -1. Now it prints a proper stacktrace to the log rather than listing each line individually. Update HTTPRequestManager to now use -1 when calling the method. This should result in better and more concise logging


  • Updated TableManager to allow the easy retrieval of byte values from a database. eg: t.populateDocument("SELECT * FROM TOOL WHERE ToolID="+lToolID); byte buf[] = t.getFieldBytes("ToolData");


  • Updated AgendaAction so that when a deep excetion is thrown (Throwable such as OutOfMemoryException or invalid class version) it will be caught and logged correctly


  • Presized all StringBuffers to improve memory allocation and reduce thrashing


  • Updated the server logging to enable rolling of server logs daily. puakma.log can sometimes get quite large on a busy server. New puakma.config settings are: LogNameDateFormat=yyyyMMdd LogFile=../logs/puakma_*.log The rollign of logs works the same as it does for the http and compression logs


  • TableManager.makeChoices() now does not output a "null" in the list when a column value in the database is null. An empty String "" is output instead. Previously the following output would be generated: "col1,col2,null|alias" the behaviour now is: "col1,col2,|alias"


  • Allow p-tags (eg <P@Text @P>) to be split across multiple lines and contain tab characters.


  • Update TableManager to include a specific Connection.commit(). This was included so Oracle will fire its triggers immediately on operations such as INSERT.


  • Move Tornado development to new IDE platform Eclipse 3.2.1. Visit all source with compile warnings and remove warnings.


  • Updated write() and writeln() methods on actions so that null parameters won't cause a 500 internal server error. null writes are now ignored


  • Update authentication mechanism so custom login pages may have a field called "$BypassAuthenticators". The addition of this field allows an application to process it's own logins via a save action, none of the Authenticators will be called by the server.


  • Change in pmaDefaultAuthenticator. Logins are failed when the username is > 120 chars. This is to stop buffer overflow attempts being echoed to the screen and written to the log.


  • Change the server being reported in the http headers to "Server: Tornado/ver.num"


  • Fixed an issue with inserting computed pages when an aliased application is requested. eg Browser requests http://www.yourhost/ and that host name is configured to serve /agroup/someapp.pma The request path property on the session object was not being updated with the new path


  • Update AGENDA task to check for running and queued actions when a run is forced from the console command 'tell agenda run /app.pma/sched_action_name'. This stops multiple instances of the same scheduled action running.


  • Fix an issue in LDAPAuthenticator that allowed a login with no password


  • When a URL is specified in the browser address bar in a different case to how it is stored in the database, the keywords functionality (eg useKeyword="xyz" in a p-tag) did not work.


  • Update ActionDocument.getParameterInteger("x") to allow commas in the value. eg a parameter value of "&x=1,422" will now return 1422 instead of 0.


  • New class puakma.util.LDAPQuery. This new class allows a simple method of querying LDAP objects. eg: LDAPQuery ldap = new LDAPQuery(sURL, sBase, null, sUser, sPW); String s[] = ldap.makeChoicesArray("(objectClass=person)", new String[]{"sAMAccountName", "distinguishedName"}, ", ");


  • Update HTMLView to output better html. Remove 'width="100%"' from table attribute


  • Update X500Name to correctly preserve the order of name parts. Removed internal use of Hashtable to record parts of names. Hashtable caused an alphabetic sort on parts, eg "OU=Users/OU=Brisbane" would be returned backward "OU=Brisbane/OU=Users"


  • Changed default server output content-type for text/html to utf-8. This will better support multi-lingual systems. Server now assumes all binary data stored in the DESIGNBUCKET is utf-8 encoded.


  • Small perf tweaks in various modules to presize StringBuffer() objects to something larger than is set in the default constructor.


  • Ability to disable an application (.pma). webdesign app now supports through "Application Settings" the ability to disable an application. This means no access via a web browser and AGENDA and WIDGIE will not load scheduled actions or widgets from a disabled application. This new feature is useful for setting on templates so that actions and widgets do not run. This app parameter is ignored during design refresh, ie not carried through from the template.


  • Update Util.isInteger(String) to now check for comma delimited numbers (eg "23,000")


  • Update system call to isUserInGroup to check all authenticators for a user's group membership. This helps when authenticators are chained together. Previously only the first authenticator would be checked for group memberships


  • Add new authenticator LDAPAuthenticator to handle authentication for LDAP sources. Configured to work with Microsoft Active Directory. More puakma.config options to allow configuration with different LDAP schemas.


  • Update X500Name object to allow for multiple components of the same type, eg "CN=Bob Smith/OU=Dev/OU=South Park/DC=wnc/DC=net/DC=au"


  • Updated TableManager with a new method public String[] getColumnNames() which will return all the column names from the last successful call to populateDocument(...).


  • Updated HTMLView to support Oracle. Oracle does not support the LIMIT clause so provided a way to manually simulate the limit functionality. Add code to better release JDBC objects.


  • Updated TableManager to work better with Oracle. JDBC objects are now released in a more reliable fashion


  • Added method getParameter() to RequestPath to enable easy access to URI parameters