CHANGELOG: Tornado Server (PT0022)

The following items denote all changes made to this product. Latest changes appear at the top of the list. Some old versions of software may be downloaded by clicking on the availability column, however it is recommended that customers always use the latest software.

The latest version of this software may be downloaded here. To keep up with the latest changes and updates, subscribe to the RSS feed for this product here: RSS Feed

VersionAvailabilityChange TypeDetails
6.0.0BugFix performance bottleneck when serving very large files (eg more than 2GB) from the filesystem
6.0.0EnhancementImprove user role checking when accessing an app.
6.0.0BugUpdate ClassData class to understand newer class file format. Tag bytes 15-20 https://en.wikipedia.org/wiki/Java_class_file
6.0.0EnhancementUpdate TableManager to allow for not returning generated keys t.insertRow("");
6.0.0Enhancementpuakma.config setting: AuthenticatorsShowLoginErrors=0 This prevents the default authenticator displaying login not found etc errors
6.0.0EnhancementUpdate HTTP server to no longer show errors when closing connections.
6.0.0BugFix HTTPSessionContext error message when releasing a connection by appId
6.0.0BugEnsure getDataConnection() adds connection to internal connection tracking table.
6.0.0EnhancementAdd new method to TableManager public boolean insertRow(String sGeneratedKeyFieldName) This allows retrieving a specific column as the generated key. eg Postgresql returns the entire row after insert
6.0.0EnhancementNew config parameter HTTPSlowActionMS=5000 This new parameter will output an error to the log when an action exceeds this number of milliseconds to run. This helps find slow running actions on a busy server
6.0.0EnhancementNew task to automatically clean up temp files. This prevents a busy server with long uptime from running out of disk space.
6.0.0EnhancementUpdated TableManager to support postgresql JSON column types
6.0.0EnhancementChanged the way TableManager outputs Dates in JSON. Dates now use column name and ISO format, rather than an object containing the different date formats/parts
6.0.0BugFix an issue in HTMLView and TableManager where queries using an alias were not displaying the alias column name, eg SELECT Name as fname FROM PERSON Would result in the fieldname "Name" being returned rather than "fname"
6.0.0BugSynchronize access to removing finished actions from queue. Update dead action thread cleaner to look for completed actions as well as those with errors
6.0.0EnhancementAdded new method in ActionRunner: public void streamToClient(byte[] buf, boolean bFlush) throws IOException This allows data to be streamed to a client, with independent buffer flushing
6.0.0BugFix issue in mailer task, incorrect join on mailheader/mailbody caused mailer to use excessive cpu when many pending emails
6.0.0New FeatureAdd new functionality to allow a specific keystore to be bound to a specific HTTP SSL port. HTTPSSLKeyRing8443=../config/yourstore.jks HTTPSSLKeyRingPW8443=######
6.0.0BugFix an issue in DocumentMultiItem where if the first value in a multi-valued control contained a comma, it was split into individual values.
6.0.0EnhancementAdded ISO date format to JSON output from TableManager (datefieldname.iso)
6.0.0BugFix an issue in AGENDA which would cause the task to abort when cleaning dead actions. 2021-09-17:17:16:41 Exception in thread "Thread-6" 2021-09-17:17:16:41 java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 2021-09-17:17:16:41 at java.util.Vector.elementAt(Unknown Source) 2021-09-17:17:16:41 at puakma.addin.agenda.AGENDA.cleanDeadThreads(AGENDA.java:535)
6.0.0BugFix an issue in url parsing where parameters contained an unescaped "://"
6.0.0EnhancementUpdate mail sending code to not send single LF characters for compliance with RFC 822bis. Reported error: "550 5.6.11 SMTPSEND.BareLinefeedsAreIllegal; message contains bare linefeeds, which cannot be sent via DATA and receiving system does not support BDAT"
6.0.0EnhancementAdded new class to allow BOOSTER to talk TLSv1.2 to back end servers
6.0.0EnhancementChanged StringBuffers to StringBuilders to improve performance
6.0.0EnhancementAltered Util.splitString() to return an ArrayList rather than a Vector to improve performance
5.0.0EnhancementAdd trust store functionality to allow TLS authentication over SSL.
5.0.0EnhancementVarious tweaks to improve the function of the cluster task.
5.0.0EnhancementUpdated FileData with new attribute transferEncoding. Some user agents send data encoded in formats such as "base64". FileData stores the data exactly as it was uploaded, it's up to the action to process it.
5.0.0BugFixed an issue where the server would attempt to determine its own IP address. In some cases this continually timed out (like inter-task messaging) and caused the server appear to run very slowly. The address is now determined once on server startup and cached.
5.0.0BugAdded call to requestQuit() for scheduled actions that have exceeded the server run time, AGENDAMaxRunSeconds. This asks the scheduled action to shut down gracefully.
5.0.0EnhancementChanged the way application classloaders work so that there is only one classloader per application (.pma). This means AGENDA, WIDGIE and HTTP can all use the same object(s) which makes the use of singletons possible. It also dramatically reduces the number of objects in play and memory footprint.
5.0.0EnhancementChanged the way the field $ActionTimeMS is calculated. Previously would just calculate the runtime of the last action, now includes the time taken for global actions to run as well. This gives a better overall performance picture.
5.0.0EnhancementAction URLs now support a slash in the design element name, eg /grp/app.pma/actionname/something.xyz This now allows files fetched via an action to reference other files relative to that action. It also means browsers will default to something.xyz when saving a file to disk. The actionname may come before or after the slash.
5.0.0BugReloading of puakma.config was not working correctly. If a key was removed the old properties file was not being cleared and the removed property remained. Added a specific .clear() prior to the load.
5.0.0EnhancementForced all JDBC Statements to open in read only, eg: stmt = cx.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); Improves performance noticably on postgresql.
5.0.0EnhancementRemoved SQL calls with "SELECT COUNT(*) ...". Specifying a column rather than * makes the calls faster.
5.0.0EnhancementUpdated RequestPath object to now be able to deal with protocol / host / port in a full URL. eg: String sURL = "http://junk.com:8080/test/x.pma/Somepage?OpenPage&Id=3"; RequestPath r = new RequestPath(sURL); r.getURL()
5.0.0BugFixed NullPointerException in SessionContext if the InternetAddress object was not set.
5.0.0New FeatureAdded support for the html5 'multiple' attribute on file controls. eg <input name="kml" type="file" value="" multiple="1"/> Updated server code to allow multiple files to be attached to the same item. DocumentFileItem dfi = (DocumentFileItem)di; int iCount = dfi.getFileCount(); FileData f = dfi.getFileData(0); f.fileName; f.mimeType; f.file;
5.0.0BugNumeric DocumentItems were being rounded prematurely based on the Locale. Changed code to setMaximumFractionDigits to Integer.MAX_VALUE
5.0.0BugAdded setLastTransaction() to the session object when calling .getSession() from in a widget. Long running widgets could lose their session when it timed out.
5.0.0BugModify RequestPath so that ?&logout parameters would be correctly removed. Also Changed the behaviour so that Url parameters must begin with a ?. Previously, if a ? was missing, the first & was incorrectly treated as the beginning of the parameter list.
5.0.0EnhancementMAILER now allows new puakma.config variable: MAILERSocketTimeoutSeconds=60 The default socket timeout has also been changed from 30 seconds to 60.
5.0.0BugFixed an issue where a NullPointerException would be thrown if a null system connection was attempted to be released.
5.0.0New Featureptags are now supported in xsl stylesheet rendering. This allows <P@ST string table entires to be easily included.
5.0.0New FeatureAdd new functionality for a string table to allow for internationalization of text. New p-tags <P@ST name="Login" @P> and session methods to programattically retrieve i18n strings. NOTE: System database schema will need to be updated!! Any apps using the new stringtable functionality will not run on an old server version (<5.0.0).
5.0.0BugUpdated json.jar, JSONView object to output quoted attribute names, eg {"page":3}
5.0.0BugRefactored the database pooling so that the server will use less threads over time. On some servers the thread count would continue to increase.
5.0.0New FeatureNew console command "show threads" to show all threads running. Helps to debug a runaway thread count
5.0.0BugWhen a list was populated with a decimal value (eg 3.44) only the integer component was compared to the list (eg 3).
5.0.0BugWhen calling: Vector v = pSession.getAllKeywordValues("YourKeywordName", false); now also sorts by the data attribute as well as the order attribute. Results in a more consistent sort order and the same ordering as the webdesign app.
5.0.0New FeatureAdded callback method for HTMLView. This allows logic to determine if a row should be included in the view or not. Also allows other attributes to be added on the fly. New interface HTMLViewCallback. public boolean htmlViewCallback(TableManager t);
5.0.0BugWhen using the console to refresh the actions list, the completed message would incorrectly appear as an error when it should have been information.
5.0.0BugFixed an issue where a session was reestablished via the ltpa token but the default locale and timezone was not set.
5.0.0BugFix an issue in ActionDocument.isEditMode() would return false when no ?action was provided, eg /yourapp.pma/pagename yet the pge was displayed in edit mode
5.0.0New FeatureAdded new stats item stats.loginsperhour Useful metric to locate busy periods for the server
5.0.0BugFix possible race condition in pmaThreadPoolManager when pool is shutting down an infinite loop may be created as one thread trys to top up the pool while another removes threads.
5.0.0BugRemoved the AGENDA code that dropped the system session when a scheduled action had finished processing. This was causing widgets in a separate thread to fail to locate the correct session.
5.0.0BugUpdated WIDGIE so that multiple requests can be initiated by the same calling thread, even though those requests may continue to run as background threads after the request has completed. Previously the first request to complete would remove the session reference from WIDGIE
5.0.0EnhancementUpdate LDAPAuthenticator to be able to use multiple ldap sources in case of server failures. eg: LDAPURL=ldaps://ldap1,ldaps://ldap2
5.0.0EnhancementAdd new property for ldap authenticator: LDAPConnectTimeoutSeconds=5 Note that there is a bug in the JDK which causes the connection to fail when using ssl connections, tested on 1.6.0_16 and 1.6.0_22 If an ssl connection is detected, the timeout is removed
5.0.0New FeatureNew class puakma.addin.http.document.JSONView This class is used to provide an easy means of converting SQL resultsets into JSON. Internally provides the paging and limiting. For simple use with MyTableGrid: JSONView vw = new JSONView(pSession, "SELECT * FROM PERSON", SystemContext.DBALIAS_SYSTEM); vw.setCallback(this); write(vw.asMyTableGrid(lPage, lFrom, ROWS_PER_PAGE, sSortColumn, bSortAscending)); See /system/admin.pma
5.0.0BugSTATS task was incorrectly counting errors per hour
5.0.0BugForced a clearing of the parsed document parts so that if a (eg) 500 error occurs, the 500 page is presented correctly.
5.0.0EnhancementConsole Command "session [username]" now returns the locale and timezone info
5.0.0EnhancementAdded two new puakma.config variables: SessionDefaultLocale=en_AU SessionDefaultTimeZone=Australia/Sydney so that new sessions logging in will get a default timezone/locale.
5.0.0BugAdded performance improvement to pmaThreadManager so that when running a single thread with lots of very small tasks performance is improved.
5.0.0EnhancementAdded more logic to TableManager so that it will output shortdate, shortdatetime, longdate and longdatetime fields into xml for dates. This means the xsl can just use these new fields to output the correct format for different locales, eg d/m/y, m/d/y, etc
5.0.0EnhancementUpdated the Util.formatDate() method to now accept "shortdate", "shortdatetime", "longdate", "longdatetime" as formatting options.
5.0.0EnhancementUpdated pmaDefaultAuthenticator to also use the EmailAddress field for authentication when the login used looks like an email address.
5.0.0BugMultiple tweaks to improve/fix byteserving (206 partial content). Discovered while attempting to load iPad video.
5.0.0EnhancementUpdated the page rendering code so that the initial parse is cached. This saves reparsing a page each time it is requested. Benchmarks suggest original parse took ~15ms and now takes ~1ms on subsequent requests. Should also mean the number of new objects (String manipulation) created per request is also reduced, thus also improving garbage collection.
5.0.0BugIn some circumstances a checkbox (or listbox) would not render its selected values correctly if one of the options/selections contained a comma
5.0.0EnhancementRemoved javax.naming.AuthenticationException from being logged as an error when a user tries to log in using the LDAPAuthenticator. Makes the server log cleaner/smaller on busy servers
5.0.0EnhancementAdded code to remove the message "Invalid address: []" from the server log. Occurs when a list of email recipients contains a blank address
5.0.0New FeatureAdded new AddIn SETUP. This creates the system database and populates tables etc. Should be loaded as the first addin. Other addins will load when this one completes. Initially used for the Tornado faced web booster esso to make for easy setup.
5.0.0BugAGENDA task was incorrectly writing the options string back to the database which resulted in extraneous commas and the options string becoming too long.
5.0.0BugTweak to puakma.js. jsSetFieldValue() was incorrectly matching on the .text and .value of select-one fields. Changed behaviour to first match on .value then if no match try .text.
5.0.0New FeatureAdded the ability for the server to track its statistics internally in a per minute, per hour etc basis. Updated the admin.pma app to display these stats. There is a new server AddIn task called STATS that captures server specific metrics like cpu and memory usage. This is a precursor to an update to Web Booster.
5.0.0EnhancementAdded statistics to server addin tasks. New Stats API for AddIn developers. 'stats' console command
5.0.0EnhancementAdded the command that failed when sending an email. Previously the log would show '500 syntax error'. Now also shows the command that caused the syntax error for troubleshooting purposes.
5.0.0OtherChanged MAILER's greeting to HELO instead of EHLO. Some mail servers may have extended smtp disabled and this would cause a send failure.
5.0.0EnhancementAdded some extra checking and error logging to releasing database connections. This is in response to an application that was getting a data connection and attempting to release as a system connection.
5.0.0EnhancementUpdate the LDAPAuthenticator to allow the firstname and lastname attributes to be customised: LDAPFNameAttribute=givenName LDAPLNameAttribute=sn
5.0.0Enhancement<P@Username @P> tag now supports fname and lname to return the user's firstname and lastname.
5.0.0OtherRemoved call to System.gc() in connection pooler. Under a heavily loaded server was getting java.lang,OutOfMemoryException "excessive GC".
5.0.0New FeatureNew output to show the full state of the database pool, now including the state of each connection. This is displayed with 'tell http dbpool status' from the server console eg: jdbc:mysql://localhost:3306/dltrack (root) 0/3/50 inUse=0 hits=31 1. Created:16-Sep 16:54:37 Last:16-Sep 16:54:37 Hits:3 Avg.Use:9.82sec 2. Created:16-Sep 16:54:37 Last:16-Sep 16:55:05 Hits:2 Avg.Use:13.71sec 3. Created:16-Sep 16:54:44 Last:16-Sep 16:55:06 Hits:26 Avg.Use:0.08sec ==>> MySQL 5.0.84 jdbc_ver=5.0 This will help to troubleshoot open database connections from badly behaving applications
5.0.0New FeatureAdded new method to HTMLView to allow its use by ajax style views. This change allows the next/prev/jumpto links to call a javascript method rather than link directly to a url. HTMLView vw = new HTMLView(ActionDocument, "SearchPlant.xsl", sSQL, SharedFunctions.CONNECTION_NAME, null, null); vw.setJavascriptNextPreviousMethod("doSearch(%%START%%, %%MAX%%, '%%JUMPTO%%', '%%VIEW%%');"); The items surrounded in the %% allow the view to call the method with the appropriate parameters
5.0.0BugReviewed the MAILER code to ensure statements and results are closed properly. Oracle was complaining that these were being left open.
5.0.0BugRemoved the retry functionality in the db connection pooler when a database connection cannot be retrieved. This was in some circumstances causing a "java.lang.OutOfMemoryError: GC overhead limit exceeded" with the repeated calls to System.gc()
4.6.5 ClickNew FeatureUpdated many internal parts to support the Oracle database (10g). Also updated admin, webdesign and setup apps to support the same.
4.6.5 ClickEnhancementUpdated HTMLView to avoid a NPE when a style sheet did not exist in he design collection and one could not be made from the XML buffer.
4.6.5 ClickNew FeatureNew console command "clear roles *" to remove all roles from all active sessions. This is useful for when an application's security changes and all sessions need to be clear to pick up the new security settings
4.6.5 ClickBugUpdated HTMLVIew code. When a URL did not include a '?' (eg "http://server/app.pma/AccountView") parameters were appended to the URL. Added code to check for a '?' and add one first if missing. This ensures valid urls.
4.6.5 ClickEnhancementMoved the server cache from the http server task into the pmaSystem object. This means the server cache is now accessible from all server addin tasks, not just the http task. Also made the method calls the same as for adding session objects. The cache is now accessed through the SystemContext object (pSystem) eg: pSystem.getGlobalObject("SomeKey"); pSystem.addGlobalObject("SomeKey", obj); pSystem.removeGlobalObject("SomeKey");
4.6.5 ClickNew FeatureNow allows composite design elements. For example, if a web app has 7 css resources these can now be pulled in at runtime to a single resource. Simply mark the resource as a composite resource and enter a list of design element names where the css/javascript would normally go. Any resource prefixed with a '/' will be loaded from the filesystem. Requires a new webdesign app to set the design element's CompositeElement=1 parameter
4.6.5 ClickEnhancementAdded new methods to TableManager to allow the easier setting of null column values. eg TableManager.setFieldDateNull("SomeField")
4.6.5 ClickBugAdded code to the SOAPClient executeInternal() method so that the soap reply package is available for debugging
4.6.5 ClickEnhancementSimplified the constructor to create a new tablemanager object by removing the need to pass a SystemContext object. This can be derived from the SessionContext. public TableManager(HTTPSessionContext pSession, String sConnectionName, String sTableName)
4.6.5 ClickEnhancementCreated new method pSystem.removeDatabasePool(sPoolAlias); This now allows connections to be forcibly removed from the pool. This is important as sometimes if a connection was set up with an incorrect username/password the connection remained in the pool with invalid credentials.
4.6.5 ClickBugModified the public Connection getDataConnection(String sDriverClass, String sDBURL, String sDBURLOptions, String sDBName, String sDBUserName, String sDBPassword) method so that when server only connections are made (eg sDBName is "") the previous pooler for that item is removed. This helps the webdesign app correctly create a new database if on an earlier attempt the connections credentials were incorrect.
4.6.5 ClickEnhancementBy default files served off the filesystem were given a future expiry date of half the time between now and when the file was last modified. Added a new puakma.config variable: HTTPMaxExpirySeconds=3600 The default value is 3600 (1 hour).
4.6.5 ClickBugHTMLControl ctrl = ActionDocument.getHTMLControl("TemplateStatus"); ctrl.setType(HTMLControl.ITEM_TYPE_RADIO); ctrl.setItemAttribute("cols", "9"); In the above scenario, the cols attribute would have no effect on the number of columns displayed in the control.
4.6.5 ClickBugUpdated pdx importing routine. Was causing sporadic issues with the import of dates which would be out by a random number of seconds when the time was midnight exactly.
4.6.5 ClickEnhancementThe agenda task runs actions as "CN=SYSTEM". Added code to the pmaSystem class to avoid sending a request to the authentication chain to determine the group memberships of this account. Previously some authenticators (LDAP) would show an error when a scheduled action was run.
4.6.5 ClickNew FeatureAdded new puakma.config setting LogFileMaxSizeKB=999999 This new setting will control the log file size. Set this to a positive integer value and the log file will not be allowed to grow past this size. When the log exceeds this limit, the file will be renamed to filename.log.1 and a new log file will be created as the current log. This means that if you specify a 1KB limit you will have 2KB of logs in two files, with the primary (active) log not exceeding 1024 bytes.
4.6.5 ClickBugAdd protection code for NullPointers in AGENDA if the Options field on the scheduled action is null.
4.6.5 ClickNew FeatureAdded boolean and IF(cond, if_true, if_false) method to FormulaCalculator.
4.6.5 ClickEnhancementUpdated Util.adjustDate() to reduce spurious object creation.
4.6.5 ClickNew FeatureAdded two new methods on HTTPSessionContext: Date dt = getSSOExpiryDate() and getSSOExpiryDate(dtDate) This controls how long the SSO token lives for. Previously the token was cleared when the browser was closed. The oprevious functionality will remain by default, unless an application specifically calls this method.
4.6.5 ClickBugUpdated MailTransferThread code to add a socket timeout before sending a HELO. This was causing threads to hang and clog up the mail queue when connecting to non-responsive mail servers
4.6.5 ClickEnhancementAdded two new config variables for controlling default locale and timezone of new user sessions. SessionDefaultLocale=en_AU SessionDefaultTimeZone=Australia/Sydney The default locale should have the language and country seperated with an underscore. Alternatively, only a language can be specified eg "en". This new functionality allows for a server based in one timezone with all users based in another.
4.6.5 ClickEnhancementAdded new method ActionDocument.getAllHTMLControls("FieldName"); This allows multiple controls on the page to have the same name and now all can be accessed programmatically instead of only the first one.
4.1.23BugAdded a default contexrt class loader to all http actions and scheduled actions. This allows software such as Apache axis2 to work correctly
4.1.23New Featurei18n. Add the ability to set a TimeZone on a users session. pSession.setTimeZone(TimeZone tz); This aids with date/time conversions and internationalisation
4.1.23New Featurei18n. Add the ability to set a Locale on a users session. pSession.setLocale(Locale loc); This aids with date/time formatting and internationalisation
4.1.23New FeatureHTMLControl.setAttribute(sAttributeName, sValue); Provide the ability to programatically add attributes to html p-tags. This allows extra attributes to be easily added to the tag at runtime by an action
4.1.23EnhancementUpdated LDAPAuthenticator to work more reliably, particularly with Novell NDS
4.1.23EnhancementNew method HTMLControl.setItemAttribute("someattr", "abcd"); Allows an attribute to be added/changed at runtime in a p-tag
4.1.23EnhancementWhen the http server sends a 304 (not modified) reply, don't add the Expires and Last-Modified headers. Previously these were set to one hour ahead of the current time which was in most cases an incorrectly short period
4.1.23New FeatureHTTPMinifyJS=1 This allows javascript files stored on the filesystem to be automatically 'minified' (@see JSMin) to reduce their size. Note that served item must have a text/javascript mimetype in order to be minified. This setting is separate from the individual design element minification inside a .pma
4.1.23EnhancementAdd updated JSMin from http://www.inconspicuous.org/projects/jsmin/JSMin.java to util package
4.1.23BugFixed an issue in HTMLView where if the ORDER BY clause was not specified in uppercase, the alpha navigation would not be displayed.
4.1.23EnhancementChanged method signature of storeGlobalObject() to accept only a CacheableItem ratehr than a plain Object. If anything other than a CacheableItem was passed it would be ignored anyway. HTTPSessionContext pSession.storeGlobalObject(CacheableItem arg0)
4.1.23BugAdded NullPointerException protection to HTMLDocument.prepare() when the HTMLDocument was created with no session object in the constructor, eg new HTMLDocument()
4.1.23BugUpdate MAILER task so that when a SMTP server replies with a 4xx it is treated as a transient error and will be retried.
4.1.23BugAdded .finish() method to stream based .pmx export. Without this incomplete zip files were being created
4.1.23BugAdded method HTMLDocument.renderDocument(false); to HTMLDocument. This method appeared in the base class but was never overridden in the subclass. Calls to this method would previously always set the document content to null.
4.1.23BugIf new roles were added to an application after the applicatyion had been accessed, the new roles would never appear. This was due to roles being cached the first time an application is accessed. Now when a new user accesses the application, the cached is cleared and the database is queried for roles
4.1.23EnhancementUpdate pmaSerial to support stream based exports.
4.1.23New FeatureAdded getOutputStream() to ActionRunner. This allows actions to get hold of the output stream and reply to the client directly
4.1.23EnhancementChange the default initial number of pooled database connections to zero. This has the effect of not holding open any connections to the database server just to keep the pool open. Also added a cleanup thread to the dbpool manager so that open connections are closed on a more regular schedule. Previously the pool was only cleaned when a connection was requested.
4.1.23EnhancementRemoved the automatically generated name="xyz" from <P@Form @P> tags to be xhtml compliant
4.1.23EnhancementFiles served from the filesystem now served with a 304 Not Modified if the disk based resource has not changed (and the browser sends an "If-Modified-Since:" header. This change greatly improves overall page load time.
4.1.23EnhancementAdded new method pmaSession.getCookieString(String sCookieName, String sPath, String sDomain) to now accept an additional parameter for session cookie name. This allows third party addins to use this mechanism to track and manage their own sessions/cookies.
4.1.23EnhancementChanged HTTPSessionContext and TableManager to report the URI for error logging rather than "pmaSession" or "TableManager". This will make it easier to track down application specific errors in customer .pma's
4.1.23EnhancementChange HTTP serving code to better deal with extra http headers including Last-Modified and Expires. Add new method to HTMLDocument public void setExtraHeaderValue(String sName, String sValue, boolean bReplaceExistingHeader) for setting ad hoc HTTP header values
4.1.23Enhancementconsole command 'tell widgie status' now outputs entries in alphabetical order
4.1.23New FeatureNew utility class puakma.util.math.formulacalculator.FormulaCalculator Thanks to Shahedur Rahman for the creation of this utility class which works in a similar way to the JavaScript eval() method. FormulaCalculator takes a formula as a String and evaluates the result as a double. It also includes moany other features, including functions the ability to use variables. Usage: FormulaCalculator fc = new FormulaCalculator(); fc.setFormula("5*4"); double d = fc.getResult();
4.1.23EnhancementModified the custom classloaders to now define Packages as classes are loaded. This allows this.getClass().getPackage().getName() to work correctly.
4.1.23New FeatureAdd functionality to HTMLControl class so that individual options in a list may have their own html attributes added, eg add a "style=\"color: #f00;\"" to selected options. HTMLControl c = ActionDocument.getHTMLControl(sFieldName); if(c!=null) { c.setAdditionalTagAttributes(new String[]{"style=\"color: #f00;\"", "special=\"1\""}); } The array corresponds to the control's choices.
4.1.23New FeatureAdd new attributes to <data> section in TableManager, host="" and protocol="" this is to allow sites on different servers to reference another server and have the URLs generated in XSL to correctly reference the target server. example: HTMLView hv.setDefaultProtocol("http://"); HTMLView hv.setDefaultHost(ActionDocument.getItemValue("@host")); In the XSL these attributes are referenced as <xsl:value-of select="/data/@protocol" /> and <xsl:value-of select="/data/@host" />
4.1.23EnhancementAdd "Expires: " and "Last-Modified: " HTTP headers to page and action output. So that pages are not cached incorrectly in browsers and web proxies.
4.1.23EnhancementUpdated Tornado Mime file detection code as Safari 3 now does not report the content-type of files it cannot determine the type of (eg .pmx files). Previously these files would appear on the document as regular text items
4.1.23BugUpdated ActionRunner.write(String) method to work with byte arrays internally rather than String.length(). This is because sometimes the byte representation would be longer than String.length() (as it counts chars, not bytes) and would cause an ArrayOutOfBoundsException
4.1.23BugUpdated RequestPath.getFullPath() so that a ? is always outputif the URI has an action or parameters component.
4.1.23EnhancementChange the AGENDA task to support th epassing of parameter to scheduled actions, eg 'tell agenda run /system/webdesign.pma/RefreshDesign?appid=4
4.1.23BugFixed problem in HTMLDocument class. Deprecated getHTMLDocumentItem was always returngin a valid object even when a control did not exist. This was causing a NullPointerException.
4.1.23EnhancementAdd some length check in HTTPLogger so that User-Agent strings are bounds checked to be less than 120 chars. Malicious http requests were causing log error as the field was too big for the database
4.1.23EnhancementChange the output of the 'show' console command to output the results in alphabetical order. This makes finding specific keys much easier
4.1.23DeprecatedHTMLDocumentItem is now deprecated. This was a badly named class from day 1 so it has been renamed as HTMLControl. This should reduce confusion between DocumentItems and HTMLDocumentItems. Existing code should continue to work correctly, however all references to the deprecated class should be removed from applications
4.0.0BugFixed an issue where POSTing a <P@Date field which existed on a computedpage was not being correctly converted to a date type.
4.0.0EnhancementChange HTTPMaxURI= to allow a value of -1 This enables unlimited URI length. Previously this had to be a positive value. Default remains 512
4.0.0New FeatureNew class HTMLTreeNode. This class is used to render records into a tree structure.
4.0.0EnhancementUpdated HTMLView to allow setRowsPerView(-1). This ensures all records are output and no enclosing table (class="viewTable") is output.
4.0.0New FeatureAllow the 'group' value of an application path to be set to '*'. This acts as a wildcard to allow the same application to respond to any url with a different group. eg: In web design, set up an application '/*/app.pma' In a browser the same application will be served when any similar URI is requested, such as '/123/app.pma', '/qwerty/app.pma' etc. This function allows the group portion of an application to be used to carry a variable.
4.0.0BugAdded System.setProperty("networkaddress.cache.ttl", "0"); so that DNS caching would be disabled. See http://i2p.net/pipermail/i2p/2004-March/000162.html "Sun's Java network libraries use an internal DNS cache that, by default, lasts *FOREVER*!"
4.0.0New FeatureAdd new attribute to <P@Radio and <P@Checkbox p-tags, displayas="table". This instructs the server code to render radio buttons and check boxes into a table. The resulting table has a css class name of "inputContainer" to allow it to be styled.
4.0.0BugAdd protection to logging methods to ensure that if something other than an ErrorDetect object (or null object) is passed as the last parameter, the logging mechanism will behave gracefully. eg: pSystem.doError("my message", objCustomOrNull);
4.0.0BugUpdate DBConnectionPooler so that connections that were specified with bad credentials are not kept in the pool. This allows the credentials to be changed and the pool re-established
4.0.0EnhancementUpdated TableManager added getFieldType(sFieldName) to return the type of field stored inside TM.
4.0.0EnhancementSmall perf tweak in TableManager to use di.isNull() instead of di.getValue()==null This will save a small amount of memory thrashing.
4.0.0BugFix an issue with pmaThreadPoolManager where threads in the manager were not being quit when the pool manager was quit.
4.0.0New FeatureAllow design elements to be tagged for a "MinifyLevel". The allows javascript etc source to be stripped by the server of \r \n \t comments extra spaces etc. 0 = no minify 1 = leave comments 2 = maximum
4.0.0New FeatureAdd the ability to tag individual design elements to allow anonymous access. This change allows portions of an application to be made available to anonymous users. A new DesignBucket parameter has been added "anonymousaccess" = "1" enables anonymous access to a particular design element
4.0.0EnhancementUpdated the SharedClassLoader to look in the current application for classes first. The old behaviour was to look through the /lib folder etc first before loading classes in the current application. This change should make general server performance faster.
4.0.0EnhancementExposed pmaSerial.exportRow() public void exportRow(String sTableName, ResultSet rs, OutputStream out) throws Exception This allows Tornado apps to utilise the built-in RDBMS export functionality. This method exports the current row to compressed xml.
4.0.0EnhancementUpdated SharedClassLoader and pmaClassLoader to better handle OutOfMemory conditions
4.0.0New FeatureCreated new class puakma.addin.http.TornadoServlet this will be the controlling servlet that will enable Tornado to be run inside a J2EE servlet container
4.0.0EnhancementChange logic used to encrypt keys in puakma.config such that any key ending in an underscore will be encrypted. This allows programmers to store passwords etc in the config file in an encrypted form. eg: SomeKey_=Xxxxx will be automatically encrypted on the next server restart.
4.0.0New FeatureUpdate mailer to respond to server console commands: tell mailer status tell mailer queue clear tell mailer queue clear all Now displays the mail queue and provides the ability to clear only dead messages or all messages in the queue
4.0.0New FeatureAdd new puakma.config variable "HTTPMaxUploadBytes" to control how big the largest post to the server may be. eg: HTTPMaxUploadBytes=157286400 will allow up to 150MB to be uploaded (entire http payload)
4.0.0EnhancementAdded extra protection for java.lang.OutOfMemoryError in SharedActionClassLoader when loading items from a zip/jar file
4.0.0New FeatureAdd new system role "DenyAccess". Authenticated users with this role are denied access to the application
4.0.0EnhancementThe "ResourceAccess" role check has been enhanced to correctly detect when a user is accessing a resource, even if "?OpenResource" is not specified in the URL. Also included a small performance increase when accessing resources so the login/authentication check is bypassed if the user is accessing a resource and they have the "ResourceAccess" role
4.0.0BugWhen a field contained a value with commas, a combo/list field would not correctly select the entry as Tornado though the field contained a multi-value value.
4.0.0BugRewrite the makeListTag() method in HTMLDocumentItem. This change is to improve the rendering of list tags (combos) where there are multiple matches for entries in the list. In this case, multiple combo entries were marked as "selected", thus the browser would always select the bottom most option.
4.0.0BugMoved where the check to send the session cookie was placed. A URI of /grp/app.pma&logout would not correctly log out the session.
4.0.0New FeatureAdded new ShajAuthenticator. Used to authenticate users and groups against operating system users and groups. See http://opensource.cenqua.com/shaj for installation information. In puakma.config Authenticators=puakma.security.ShajAuthenticator ShajDomain=yourdomain[optional]
4.0.0BugAdjusted output of auto generated xsl stylesheets
4.0.0BugWhen Tornado produced a 500 internal server error, the connection was not always dropped cleanly. Now forces a Connection: close when a 500+ error occurs
4.0.0BugRemove an internal byte buffer copy when calling this.setContent(bytebuffer); in an action. This reduces the amount of memory used when a large byte buffer is set. Note that this change now means a reference to the byte buffer so care should be taken reusing the buffer in the action code.
4.0.0BugWhen an action encounters an OutOfMemory error, halt the request do not attempt to serve a 500 error page. This stops the server causing repeated OutOfMemory errors and grinding to a halt
4.0.0New FeatureWhen a browser requests an application without specifying the design element (eg /grp/app.pma) the server now responds with a redirect to the default URL for that application. Previous functionality was such that the server would fabricate the correct URI and continue with the request. This older behaviour meant that browsers would not correctly serve relative content because they would request the content relative to /grp rather than /grp/app.pma/
4.0.0EnhancementReduce database pool maximum default from 500 to 100 connections per pool. Add new settings to puakma.config to control database pooler: SystemDefaultPoolSize=100 SystemDefaultPoolTimeoutSeconds=10 SystemDefaultPoolExpireSeconds=1800 These settings are applied to each database pool. The next release will include the ability to set the database pool on a per pool basis.
4.0.0EnhancementFor actions that repeatedly get the same connection(s), implemented a connection setting cache. This stores the settings (eg dbname, username, password) in an internal cache rather than querying the system database for these settings each time a connection is requested. This has the net effect of reducing the overall database I/O for actions that repeatedly use the same connections, increasing overall performance markedly for these types of actions.
3.56BugChanged 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
3.56BugUpdated 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
3.56EnhancementUpdate SharedActionClassloader to preload all action code (as well as libraries) this will allow actions to call other actions
3.56BugFixed a bug in Tornado's HTTP stack that caused a stack overflow when a byte range request was made with an invalid range.
3.56EnhancementUpdated 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.
3.56EnhancementUpdated 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
3.56EnhancementUpdated 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");
3.56OtherPresized all StringBuffers to improve memory allocation and reduce thrashing
3.56EnhancementUpdated AgendaAction so that when a deep excetion is thrown (Throwable such as OutOfMemoryException or invalid class version) it will be caught and logged correctly
3.56EnhancementUpdated 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
3.56BugTableManager.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"
3.56EnhancementAllow p-tags (eg <P@Text @P>) to be split across multiple lines and contain tab characters.
3.56OtherMove Tornado development to new IDE platform Eclipse 3.2.1. Visit all source with compile warnings and remove warnings.
3.56EnhancementUpdate TableManager to include a specific Connection.commit(). This was included so Oracle will fire its triggers immediately on operations such as INSERT.
3.56BugUpdated write() and writeln() methods on actions so that null parameters won't cause a 500 internal server error. null writes are now ignored
3.56New FeatureUpdate 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.
3.56OtherChange 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.
3.56OtherChange the server being reported in the http headers to "Server: Tornado/ver.num"
3.56BugFixed 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
3.56BugUpdate 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.
3.56BugFix an issue in LDAPAuthenticator that allowed a login with no password
3.56BugWhen 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.
3.56New FeatureNew 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"}, ", ");
3.56EnhancementUpdate ActionDocument.getParameterInteger("x") to allow commas in the value. eg a parameter value of "&x=1,422" will now return 1422 instead of 0.
3.56EnhancementUpdate HTMLView to output better html. Remove 'width="100%"' from table attribute
3.56BugUpdate 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"
3.56EnhancementChanged 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.
3.56OtherSmall perf tweaks in various modules to presize StringBuffer() objects to something larger than is set in the default constructor.
3.56New FeatureAbility 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.
3.56EnhancementUpdate 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
3.56BugUpdate Util.isInteger(String) to now check for comma delimited numbers (eg "23,000")
3.56EnhancementUpdate 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"
3.56New FeatureAdd 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.
3.56EnhancementUpdated TableManager with a new method public String[] getColumnNames() which will return all the column names from the last successful call to populateDocument(...).
3.56EnhancementUpdated TableManager to work better with Oracle. JDBC objects are now released in a more reliable fashion
3.56EnhancementUpdated 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.
3.56EnhancementAdded method getParameter() to RequestPath to enable easy access to URI parameters
3.45DeprecatedRemoved evaluation checking code ready for move to Open Source
3.45New FeatureAdded $Login resource to res/$Login in puakma.jar. This file will be served if a login page in /puakma.pma cannot be found. In practice this will occur if a customer renames or removes /puakma.pma
3.45EnhancementThe Ltpa single sign on token now sends an expiry date based on the session timeout value (minutes). This stops the Ltpa token being maintained the whole time the browser session active, improving security.
3.45BugWhen an application (.pma) specified a custom login page and the default access was not to allow anonymous access, the brower would be sent into an infinite redirect loop. Fixed to now show the custom login screen.
3.45EnhancementRemove misleading error message "$Login" could not be found when logging into an application with no default login page set.
3.45EnhancementUpdated HTMLView so that when &JumpTo is used for a item longer than 1 character (eg "Smith") the correct letter in the view navigation is highlighted ("S")
3.45EnhancementUpdated checkbox, radio button, list box and combo box code so that in read mode the values appear rather than the alias. eg "Apples|1" would previously display "1" in read mode, now "Apples" is shown.
3.45New FeatureNew class puakma.util.URLReader used to get/send data via http to a remote server. Setter methods may be used to use the current user's session ID or ltpa token info for SSO purposes. URLReader u = new URLReader("http://www.puakma.net/someapp.pma"); u.setUserNamePassword("joeuser", "password"); try { byte buf[] = u.send(null, false); System.out.println(new String(buf)); } catch(Exception e) { System.out.println(e.toString()); e.printStackTrace(); }
3.45DeprecatedloginSession, isUserInGroup, populateSession in pmaAuthenticator interface. All these methods now accept an additional URI parameter as the last parameter in the method calls. If you have written a custom authenticator it will need to be updated
3.45New FeatureUser logins may now optionally be based on application group rather than serverwide. Use HTTPGroupLevelLogin=1 in puakma.config to make user logins specific to the application group. This feature is useful if you want users to log in to various applications using a different identity yet from the same workstation.
3.45EnhancementUpdated auto generation of XSL stylesheets to included code for summing fields and counting the number of rows in the document
3.45EnhancementWhen the server generates an xsl stylesheet, output code for clicking a row to open a custom page
3.45EnhancementChanged the default field length for editable <P@Date fields. When no size is specified, defaults to length of the format= attribute, plus two characters
3.45EnhancementServer now issues a "Connection: close" http header if the server is in shutdown mode. This ensures that browsers do not keep their connections open when a server is being restarted or shutdown
3.45New FeatureAdded new item to Document "$ActionTimeMS" which stores the number of milliseconds it took for the action to run.
3.45New Feature<P@Path @P> tag now supports a value attribute to allow retrieval of components of the path, eg for the URI "/apps/crm.pma" the tag <P@Path value="group" @P> will return "apps". Possible values are: Group, Application, Action, DesignElementName, Parameters, FileExt
3.45EnhancementWIDGIE: When a widget calls getSession() and a system session is created, changed the default session timeout to 1 minute
3.45New FeatureNew method to retrieve the names of all design elements: public String[] getAllDesignElementNames(int iDesignType); String sNames[] = pSession.getAllDesignElementNames(DesignElement.DESIGN_TYPE_RESOURCE);
3.45DeprecatedRemoved deprecated Thread method calls destroy() from pmaThreadPoolManager and pmaThread.
3.45DeprecatedRemoved unused puakma.addin.console package from puakma.jar
3.45BugBusinessWidget getSession() sometimes did not return a valid session, such as when the widget callback was in operation. getSession() should now always return a valid session, either user specific or system
3.45New FeatureImplemented AUTH LOGIN in MAILER to allow authenticated relaying. This works when smarthost is enabled. Relevant puakma.config keys are: MAILERSmartHost=mail.wnc.net.au MAILERSmartHostUserName=smtpuser MAILERSmartHostPassword=thepassword
3.45BugEscaped correctly all &nbsp; &#160; etc which get loaded into textareas. These get double-escaped as &amp;nbsp; and &amp;#160;
3.45Bugpuakma.util.Util.clearTime() was incorrectly setting the hour to 12 in some cases. This has been updated to always set the hour to 0
3.45EnhancementAltered HTMLView to work with embedded select statements. This enhancement should also boost performance slightly due to the removal of SELECT COUNT(*) ... prior to the resultset being traversed
3.45Enhancementp-tags of all types now get their choices set. This allows choices to be maintained veen when eg; the programmer changes the item type from a computed to a list. <P@Computed name="x" useKeyword="kw" @P>
3.45BugUpdated http logging code to not output null when a header value was not found. eg: "%{Referer}i" when no referer header was present
3.45New FeatureWhen SystemDebugLevel=5, mime uploads are streamed to a debugmime_999999.tmp file in the [installbase]/temp dir.
3.45BugAdd null checking in Document.addItemOnCreate() and Document.hasItem()
3.45Bugpuakma.util.Util.adjustDate() was incorrectly setting the millisecond component of the returned date
3.45BugAltered http logging code to truncate header values that include a CRLF. This would under some circumstance show the following log error: Could not write to log file 'RDB_TABLE=HTTPSTAT'. ERROR: value too long for type character varying(100)
3.45New FeaturePermissions may now include other roles. To add a permission that refers to another role, enclose the role name in square brackets, eg [Managers] This feature is useful for cascading permissions
3.45EnhancementThe console command 'session username' now displays the name of each of the objects stored on the session.
3.45New FeatureNew console command 'clear roles username' to remove the roles a user has. This is useful to force a session to get repopulated with new security settings, such as if the admin has changed their group memberships, rather than logging out then in again.
3.45New FeatureNew console command 'clear objects username' to remove any session objects stored on a user session.
3.45New FeatureArbitrarily hide chunks of html code in pages. New p-tags <P@HideStart name="x" value="true" @P> and <P@HideEnd name="x" @P>. Tags may be nested. Hiding is controlled through ActionDocument.setItemValue("x", "true"); All content between the p-tags is hidden, including other p-tags and html text
3.45EnhancementAdd boolean support to Document object. Document.getItemBooleanValue(sItemName); and Document.setItemValue(sItemName, true); and Document.replaceItem(sItemName, true);
3.45New FeatureNow support URL u = classLoader.getResource("dir/file.txt") for jar files loaded as Shared Code.
3.45EnhancementIn SOAPClient.execute(iTimeoutMins), only set the timeout in the http header when a value greater than or equal to zero is passed. .execute() has a default of 1 minute
3.45EnhancementAdded protection code to stop web clients setting an arbitrarity long session timeout value.
3.45New FeatureAllow outbound mail to be sent with return receipt and high importance. This is controlled by docEmail.replaceItem("ReturnReceipt", "1"); docEmail.replaceItem("Importance", "1"); prior to calling docEmail.send()
3.45New Feature'tell http dbpool status' now shows database type, version and jdbc driver version. eg: ------ DB POOL STATUS ------ (3) jdbc:mysql://localhost:3306/puakmablog (root) 1 2/500 inUse=0 hits=2 ==>> MySQL 4.1.14-standard jdbc_ver=3.1 jdbc:postgresql://localhost:5432/goldingfccdev (postgres) 1 1/500 inUse=0 hits=5 ==>> PostgreSQL 8.0.3 jdbc_ver=8.0 jdbc:mysql://localhost:3306/puakma (puakma) 0 1/500 inUse=0 hits=239 ==>> MySQL 4.1.14-standard jdbc_ver=3.1 ----------------------------
3.45BugFixed issue where action classloader was cleared on a change of java code, however did not clear correctly if that java code was a scheduled action
3.45New FeatureAdded new method boolean puakma.util.Util.isInteger(String). This will help parse url parameters to determine if a valid integer has been passed and helps avoid sql injection attacks
3.45BugCorrected incorrect alias for hsqldb task to puakma.addin.db.HSQLDB
3.45BugAdded extra sleep() and System.gc() to HSQLDB task on shutdown so that the database will restart correctly without locking files open
3.36BugFixed an issue on the windows platform where the installer would import the pmx files incorrectly during installation
3.36OtherAdded /example/journal.pma to install package
3.36EnhancementHTMLView now works correctly for hsqldb data sources. Offset was always 1 (due to old hsqldb restriction). Offset of 0 is first record in set. eg "SELECT LIMIT 0 25 * FROM TABLENAME"
3.36Enhancementhttphostmap.config should now use only lowercase entries as keys. Previously some parts of the server code forced lower, while others did not. Now all is lowercase.
3.36EnhancementChanged pmaMain in startup.jar to default to ../config/puakma.config when no startup parameters are passed. This allows "java -jar startup.jar" to be executed to start the server.
3.36New FeatureWhen running with hsqldb addin, all pmx files in the [install]/temp folder will be imported. This release adds SOAPDesigner.pma to the list of default apps
3.36New Feature'tell hsqldb pwreset' is now available via the console to reset the sysadmin password if it is forgotten. Previously resetting a forgotten sysadmin password was difficult.
3.36BugFixed an issue with puakma.util.Util.getHTTPContent() where the trailing two CRLFs were not being consumed correctly for chunked transfer-encoding
3.36BugFixed issue with pmaSerial isPrimaryKey() throwning a NullPointerException on data export
3.36EnhancementAGENDA will now forcibly remove a badly behaved (stalled) action if it fails to be interrupted 20 times.
3.36EnhancementUpdated puakma.util.ObjectStore to return all keys in the store. This is useful to iterate through the entire store. Enumeration en = ObjectStore.getAllKeys();
3.36BugFix a bug in widgie where slow loading web services try to load multiple times.
3.36EnhancementTweaks to MAILER to show more detailed status when sending mail. Now use SystemHostName= in HELO instead of MailDomain=. Corrected date format to "Date: EEE, d MMM yyyy HH:mm:ss Z" in mail header. Added socket timeout of 30 seconds. Now correctly wait for 2xx reply before beginning mail transaction.
3.36BugWhen sending large file attachments with server generated emails, sometimes (eg when used with surfcontrol) the attachments would become truncated. Lines are now wrapped at 57 bytes (pre base64 encoding)
3.36BugFixed issue with .pmx and .pdx file imports when the export file had a very large number of records (eg >20000). This would cause the server to run out of memory on import and the import would not succeed.
3.36BugFix a bug in the TableRowInputStream where null valued columns were not being correctly recreated as nulls.
3.36OtherRemoved the Sun base64 encoder/decoder from the TripleDESCoder class, to avoid lines wrapping (\r\n) when encoded in base64.
3.36EnhancementAllow firstchoice="----" to be used as a property on list tags. This means programmers can get the choices from a keyword while having a custom first choice in the list.
3.36New FeatureCreated ability to import/export data. Updated pmaSerial and TableRowInputStream to support a format other than .pmx. New file type for exporting data is .pdx
3.36BugWhen a date item appears on a computed page and the pages is saved, the ActionDocument.getItemDateValue() returned a null.
3.36EnhancementSOAPClient now correctly responds to 403 (not authorized) replies from server and throws a SOAPAuthorizationException
3.36Enhancementp-tags (list, radio, checkbox) can now have a new option MissingValueText="The value is not in the list". This allows multioption fields to be dynamically expanded to include the current field value. An empty string value will use the value itself as the display value. Omitting this option maintains previous functionality.
3.36Enhancementpuakma.pma: Added "500" page for displaying internal server errors. Updated login page style so no filesystem stylesheets are used.
3.36BugWhen calling replaceItem() on a multi item type (eg SendTo field after calling doc.send() ), the internal value was not reset correctly.
3.36EnhancementAdded an explicit socket flush to streamToClient(byte[]). This change means small replies to the client get sent immediately instead of being buffered by the server.
3.36EnhancementImproved error logging from MAILER for failed smtp messages
3.36EnhancementSOAPClient now throws more informational exceptions. public Object execute() throws SOAPFaultException, IOException
3.36New FeatureAdded convenience methods to SOAPClient when adding parameters of primitive types, eg: public void addParameter(int iParam). Previously only Object parameters could be added.
3.36New FeatureNew overridable widget method widgetCallback(). This is called internally every x milliseconds (default 60 seconds) by the widget. Useful to do any periodic widget processing such as refresh lists. See also setCallbackMS(int iNewCallbackIntervalMS)
3.36New FeaturepSession.getDesignObject() is now supported from Widgets and Scheduled actions
3.36BugWhen a Widget is being initialized, calls to getSession() fail since there is no session associated with the loading. Added code to create a system session for use during init.
3.36BugWhen automatically creating a new xsl stylesheet, code was calling setString on an int field (DesignType) causing an infinite loop. Changed to setInt(). This was only an issue for PostgreSQL 8+
3.36BugHTTPSTAT system table was not recording http referers correctly.
3.36BugWhen the design type was not specificed in a URI (eg ?OpenPage) Tornado would return the first matching design element of that name. Tornado will now only choose from Pages, Actions or Resources.
3.36EnhancementWhen calling ActionDocument.getItemValue(sFieldName) on a Date type, the system formatted date was returned. Tornado now returns the format specified in the Date p-tag, or the system date format if the p-tag format is not found.
3.36EnhancementRequest responses in the range 300-399 would send a 188byte payload. This standard reply has been removed from all replies in this range which will improve server performance. For example a page with 20 images that have not been modified would result in the server sending a total payload of (HTTP 304 replies) 20*188=3,760bytes.
3.36BugIf a user enters a URL to a login page, the redirect item may not be set. This causes the login page to remain on the screen after login (showing a ?SavePage in the URL). This fix will redirect any logins of this type to the default start location for the application, eg "/group/app.pma"
3.36EnhancementUpdated Util.logStackTrace to pass Throwable as the first parameter instead of Exception.
3.36EnhancementUpdated runActionOnDocument to catch(Throwable) instead of catch(Exception) to allow catching of errors from failed Vortex (Eclipse) compilations. This change also means these errors are caught correctly and the http request completes instead of halting.
3.36EnhancementHTTP Logging for Tornado now uses Apache mod_log customisable format http://httpd.apache.org/docs/2.0/mod/mod_log_config.html. Default format is Common Log Format with Virtual Host "%v %h %l %u %t \"%r\" %>s %b" Use HTTPLogFormat= to configure the log format
3.36EnhancementAdded workaround for browsers (eg Internet explorer) that submit the named anchor in the URI. For example, see: http://ray.camdenfamily.com/index.cfm/2005/10/8/IIS6-Bug-with-CFLOCATION This change affects the RequestPath object.
3.36New FeatureAbility to put objects into documents. ActionDocument.setItemValue("itemname", new CustomObject()); Useful for passing objects between global actions and regular actions
3.22New Featurelong lValue = pSession.getKeywordIntegerValue(sKey); Convenience method to convert keyword values into long
3.22BugpSession.runActionOnDocument() was throwing a nullpointer exception when the rPath property of the passed document was null. This now defaults to the rPath of the session when null.
3.22EnhancementUpdated error message when database connections are not released. Now dispays the database name.
3.22New FeatureAbility to attempt to stop long running scheduled actions. New puakma.config variable AGENDAMaxRunSeconds=999 No value means allow to run forever. When a scheduled action runs over its alotted time interrupt() is called on the thread. This may not actually stop the thread. All methods for destructively stopping threads have been deprecated.
3.22BugChange Ltpa token generation to accept a charset parameter in the constructor. This ensure tokens are decoded with the correct charset.
3.22Enhancementpuakma.util.Util.logStackTrace now logs the entire stack trace to one log event instead of seperate log entries
3.22EnhancementAdd additional parsing to TableManager XML output so that non-printable chars do not appear in XML (0x00 - 0x1f, excluding \r \n \t)
3.22OtherChanged internal database calls to retrieve design elements, data connections, keywords etc to use PreparedStatements to ensure no SQL injection attacks can be performed. This change also allows single quotes in dbconnection, design element and keyword names (albeit not recommended). For examples of injection attacks, see here: http://www.unixwiz.net/techtips/sql-injection.html
3.22DeprecatedActionDocument.setDocumentItemChoices() has been deprecated. The choices storage area has been moved to the item rather than its control. This change may impact some existing applications that build selection fields (combo, radio, check, list) on the fly. The choices data is now stored with the item rather than the control.
3.22EnhancementAltered auto generation of xsl stylesheets to also output thead and tbody tags.
3.22New Featurelong l = ActionDocument.getParameterInteger("paramName"); Convenience method for getting url parameters without the need for a clumsy try/catch block.
3.22BugAdd new logic to prevent classloaders being dropped when something other than java code is saved to the design collection. Also only clear session objects when a classloader is dropped.
3.22BugTableManager would incorrectly return a 0 on (for example) integer columns where the value of the column was actually NULL
3.22New FeatureAllow access to resources even though the user does not have the AllowAccess role. New role ResourceAccess is checked for those with no access. If the request is for a resource and the user has the role the request is granted. This allows login screens etc to include resources (js, css, images etc) from the current application.
3.22New FeaturePermissions can now include "!*" which means any logged in user, eg not anyone.
3.22New FeatureAbility to send System.err messages to a log file. Previously java.lang.OutOfMemoryException and other low level exceptions were only printed to the console.
3.22New FeatureEncrypt sensitive properties in the puakma.config file. Previously passwords were stored in clear text which raised security concerns for some customers.
3.22New FeatureSupport encrypted db connection passwords in the system database
3.22New FeatureAbility to tag a page to a parent to allow better templating of UI design. All layout can be placed on the parent with the specific code on the child. the content of the child is placed in the <P@ChildPage @P> tag on the parent.
3.22OtherAdded puakma.config parameter NoConsole=1 to stop the console thread polling for keyboard input. Zombie processes on Linux were causing 100% CPU utilisation and the server polled for input. This is a reimplementation of AllowConsole=1 which was removed in an earlier release.
3.22New FeatureProvide the ability to compare the contents of two documents for equality. This enables the RefreshDesign task to check for changes in tables, attributes etc. puakma.system.Document doc; boolean bSame = doc.equals(docOther);
3.22BugFixed export/importing PMX files where the time component of date values would always be set to 00:00:00.
3.22EnhancementChanged HTTP addin status to report sizes in MB instead of KB
3.22BugWIDGIE would not stop widgets on shutdown. Added new command 'tell widgie reload' to force reloading of widgets.
3.22New FeatureNew singleton class ObjectStore. This provides an ad hoc method of storing objects in memory, particularly useful for HTTPHeaderProcessors to maintain state between requests.
3.22OtherChanged compile options to no longer include debug info and produce optimized code.
3.22Enhancement<P@TextArea now outputs &lt; and &gt; as the value of the textarea. This will allow editing of html content in a text area.
3.22BugIn some circumstances puakma.util.Util.getMIMELine() would throw a StringIndexOutOfBoundsException
3.22New FeatureNew P-tag "ComputedPage". <P@ComputedPage name="pgSub2" value="p2" @P> This will automatically retrieve a page called p2 from the design collection and insert it in the current page (in place of the tag). In your action code, add: ActionDocument.setItemValue("pgSub2", "p3"); which will cause the server to insert page p3 in that spot instead. This is very useful for hiding or showing navigation panels etc based on user's rights, eg: if(pSession.hasUserRole("Admin")) { ActionDocument.setItemValue("navPanel", "NavigationAdmin"); } else { ActionDocument.setItemValue("navPanel", "NavigationStandard"); }
3.22BugWhen CoderB64 was passed a zero length array, an exception was thrown.
3.22BugWhen HTMLDocumentItem setValue() is passed a null, a NullPointerException is thrown when the control was rendered. Fixed.
3.22New FeatureUpdated HTMLDocumentItem to accept a new type of void. This allows controls to be programmatically set to void which will stop them showing on the HTML page. eg: HTMLDocumentItem hdiDelete = ActionDocument.getHTMLDocumentItem("btnDelete"); if(hdiDelete!=null) hdiDelete.setType(HTMLDocumentItem.ITEM_TYPE_VOID);
3.22Bugpuakma.util.Util.makeDate(sDate, sFormat) caused a NullPointerException if sDate was null. This is now trapped internally and the method returns a null Date if sDate is null.
3.22BugCookies, Views and parameters now do not create items on the ActionDocument when the page is parsed. This was causing legitimate items to be overwrittem with <P@cookies or <P@Parameters of the same name.
3.22New FeatureImplement CGI scripting. Allows CGI scripts and executables to run from /cgi-bin/
3.22EnhancementUpdated RunProgram to accept additional parameter of InputStream to allow commands to be piped into a process.
3.17BugMAILER has been updated to specify Content-Transfer-Encoding: 8bit in the mime header to preserve fidelity of utf-8 mail messages
3.17New FeatureNew utility class to run external programs puakma.util.RunProgram. This makes running external programs (eg native executables) very simple.
3.17EnhancementUpdated SharedActionClassLoader to now load ALL libraries. The LoadLibrary= and AlwaysLoad= parameters have now been deprecated. The first time an application (.pma) is accessed, the SharedActionClassLoader will load all the libraries.
3.17BugWhen serving files off the filesystem, URL parameters and actions caused the server to be unable to find the file. eg "/lib/somefile.htm?src=xy" Actions and parameters are now removed when looking for the file.
3.17BugWhen large files are being uploaded and the client disconnects before the upload is completed, files were not cleaned up in the temp folder.
3.17EnhancementAdded new utility class paukma.util.parsers.html.HTMLParser for processing HTML text documents.
3.17EnhancementUpdated MAILER to send plain text as well as HTML text in a multipart email. The new HTMLParser is responsible for removing all HTML tags, newlines, linefeeds, tabs and extraneous spaces. This provides support for mail clients that do not support HTML text.
3.17EnhancementAltered Document.send() logic so that if a recipient appears multiple times, the email will be sent only once. For example if a recipient is in the SendTo field and the CopyTo field, they will receive only one copy of the email, althought the received email will have their name listed in both fields.
3.17BugNew SharedActionClassLoader: When using addSessionObject() and getSessionObject(). Classes of a specific nature (eg those created by the programmer and attached as a library) fail with a class cast exception. This is because the old classloader was created only for the life of the action then discarded. Note that the new classloader is destroyed when the application's design is changed, removing any session objects loaded by that classloader.
3.17EnhancementUpdated RequestPath class to allow /group/app.pma?param1=x&param2=y Previously the server would have assumed that "param1=x" was a design element reference
3.17BugFix the RequestPath object to better parse URIs. Previously /app.pma/Design?OpenPage and /app.pmaXDesign?OpenPage returned the same page.
3.17OtherChanged RequestPath property szDesignElement to DesignElementName. This may break applications that use this property directly.
3.17Enhancement<P@Form @P> tags may now have addtional parameters for javascript, target frames etc. The name="formname" may also be overridden
3.17EnhancementNew method pSession.getLoginName() will now return the name used to log in with.
3.17EnhancementImprove internationalization with correct byte transformations.
3.17EnhancementAlter AGENDA code so that servers that have run with an incorrect future time will perform correctly when the time is reset to the present.
3.17OtherHTTP headers now display X-License: when the server has not been licensed.
3.17BugTableManager and HTMLView and Util altered to correctly output utf-8 XML text for international characters and XSL transforms.
3.17BugSOAPClient and WIDGIE updated to output valid utf-8 XML packages
3.17BugWhen sending a SOAP request where a parameter contains a zero length array, an ArrayIndexOutOfBounds exception was thrown and the web service could not be accessed.
3.17EnhancementgetResourceAsStream() now supported for jar files stored as libraries in a web application. This enables technology like Velocity to run correctly.
3.17BugChanged Ltpa token generation code to use codepage 850. This allows special characters in (eg Danish) names to be generated correctly.
3.17OtherChanged TableManager to use Types.BINARY instead of Types.BLOB to maintain compatibility with Postgresql. Changes to the 8.x release of the Postgresql driver means that BYTEA fields are treated differently to OID. Why postgres uses two types for storing binary data is somewhat of a mystery.
3.17New FeatureAbility to show on the server console detailed information about sessions. New console command: session [username] This is very useful for troubleshooting user roles.
3.17EnhancementUpdated pmaAuthenticator adding new method populateSession(sCanonicalName). This will fix the SSO problem where a user logging in with a ltpa token does not get the firstname/lastname set. This method added to the authenticator will fill the new session with the correct firstname/lastname.
3.17New FeatureSupports logging in session by Ltpa_Token. When a user connects to the server with a valid ltpa token, login in the session automatically. Note: Firstname/Lastname may be incorrectly set since the authenticator is not called, especially if the name in the ltpa token is something like "upsonb/webWise" instead of "Brendon Upson/webWise".
3.17EnhancementRemoves spurious calls to login in user by Authorization http header. Small performance increase.
3.17BugWhen the database server is stopped and restarted, the loggin mechanism did not correctly reconnect to the database server.
3.17New FeatureUpdated /system/admin.pma to allow management of files in the html_public folder
3.17Enhancement'tell http cache flush' now does not reset the cache statistics. 'tell http cache reset' now specifically resets the counters.
3.17BugWhen an action was run from a URL and the url specified ?Execute (or any other command except ?OpenAction) the raw action class file would be returned to the browser.
3.17EnhancementUpdated byterange serving to now support multiple ranges in one request. This is used by Adobe acrobat reader plugin. Multiple ranges are sent as a multipart/mime reply.
3.17BugEnsure UseKeywords="" option for lists outputs keywords in the order of keywordorder, then data. Changed ORDER BY clause.
3.17EnhancementpmaSerial now has the ability to not export sources. pmaSerial.setExportSources(boolean bAllowSource Export). This is useful for exporting a pmx directly without the source code. Also added new constructor to specify this in one shot.
3.17EnhancementAdded new methods to TableManager setFieldNull("FieldName") to set null values in the database. setFieldInteger("FieldName", sValue) and setFieldNumeric("FieldName", sValue). This is because Postgresql is fussy about the data types sent to the driver.
3.17EnhancementChanged core installation to include newer mysql 3.1 jdbc (com.mysql.jdbc.Driver) and postgresql 8.0 jdbc drivers
3.17BugAlter design element fetching code so that calls to application resources are case-insensitive. For example on some database servers /app.pma/PageName?OpenPage and /app.pma/pagename?OpenPage will not fetch the same database resource.
3.17BugWhen a 'reload [taskname]' command is issued, sometimes an indexoutofbounds exception is issued due to maintenance of the running addin list.
3.17EnhancementDo a full stacktrace when an action encounters an error
3.11New FeatureTurn off ETag generation via puakma.config variable HTTPGenerateETags=0
3.11New FeatureAbility to disable byteserving via puakma.config variable HTTPAllowByteServing=0
3.11BugFixed bug in list rendering when no choices= and no datasource= were supplied. This resulted in a spurious error being written to the log.
3.11New FeatureAllow the use of short names to load addin tasks. eg Now admins can type 'load http' instead of 'load puakma.addin.http.HTTP'.
3.11BugModified the checking for task shutdown. in some cases addins were not shutting down correctly on server restart, meaning the server would restart with old addin threads still running
3.11New FeatureAdded capability for Byteserving. This allows Puakma do stream content faster when accessed with tools such as getright. Does not currently support multi-range byte serving as used by Adobe Acrobat reader PDF browser plugin.
3.01New FeatureServer generates automatic ETag headers based on Base64 MD5 fingerprint of content.
3.01EnhancementRemoved redundant field "LastUsed" from DBCONNECTION table. Note: This may break pmx importing.
3.01New FeatureEmbedded hsqldb database
3.01New FeatureAbility for check/radio/list fields to get their choices from the db, without using an openaction.
3.01New FeatureAutomatic generation of Ltpa tokens in http header as Set-Cookie: lines. This will ensure those logging on to the server can seamlessly access Domino and Websphere sources without logging on again.
3.01EnhancementEnsure Set-Cookie header for session tokens is sent only once. This improves page cacheability, reduces bandwidth and improves performance.
3.01BugOn incorrect login password field retains incorrect password. Should be blanked
3.01New FeatureAdd ability for custom HTTP header processors. These may process the request before the HTTP server sees the request. This will also allow SSO plugins to be possible.
3.01EnhancementAllow mailbody table to accept RAWMIME as an option
3.01EnhancementAlter combo field rendering etc to internally use stringbuffers to improve rendering speed
3.01New FeatureAdd streamToClient() method to Actions to allow the direct transmission of bytes to the browser. This is useful for sending very big files.
3.01EnhancementAdd startup files to a new startup.jar to allow easier upgrades. Single file instead of multiple class files.
3.01EnhancementAlter pmaMain code to enable a server restart and reload of all classes cached in the JVM. This will allow a 'restart server' command issued at the console to pick up a new puakma.jar correctly
2.1 build 304OtherMoved to release management software