Helma Logo
main list history

Version 8 by hannes on 23. February 2007, 14:47

Version 7 by hannes on 06. June 2006, 21:35

85* Implement global functions wrapJavaMap() and unwrapJavaMap() to masquerade instances of java.util.Map as JS objects and back.
86* Add app.getClassLoader() getter for the app classloader
87* Fix Rhino bug 309957 <https://bugzilla.mozilla.org/show_bug.cgi?id=309957>
88* Introduce createTable() method in CacheMap to make internal table implementation overrideable for subclasses. Implement new WeakCacheMap class that uses java.util.WeakHashMap internally. Use it to fix a memory hog in the RhinoCore java wrapper cache.
89* Implement SingleFileRepository which can be used to add a single global JS or jar file to an application
90* Exit Helma if something important such as binding to a server port fails, rather than just logging the error
91* Fix Helma build script to always recompile all files on build. Bake build date into version string displayed at startup.
92* Add test if SQL connections are alive before reusing it for a new request
93* Implement Prototype.getRepositories() method that returns an array containing the prototype's repositories
94* Make usage of deprecated Thread.stop() dependent on setting of requestTimeoutStop = true|false app property
95* Implement ETag based conditional GET based for files served via sendForward()
96* Consider conditional GET headers in RequestTrans.equals(). This fixes a bug where Mozilla/Firefox displayed an empty page when fetching the same page with different headers within a short timeframe.
97* Fix Last-Modified handler heading which was broken in more than one way.
98* Don't generate ETag headers for error pages.
99* Set response status to 500 (internal server error) for errors reported via ResponseTrans.reportError().
100* Fix bug in persistent sessions involving JS objects

Version 6 by hannes on 06. June 2006, 21:22

45* Implement zero argument writeln() method to write a newline sequence.
66* Implement HopObject.getResource(String filename), returns a helma.framework.repository.Resource object defined for the prototype
67* Implement app.getRepositories() and app.addRepository(String|Repository)
68* Add global variable "global" as a reference to the global object
69* Introduce app.getLogger() and app.getLogger(name) that return a Jakarta commons Log instance. The zero argument method uses "helma.[appname].app" as category name
70* Set node reference to an empty transient node in checkNode() for deleted/invalid HopObjects
71* Make HopObject.get() behaviour more consistent and predictable: Return null for non-existing properties that were previously set or are defined in the type mapping, and undefined for non-existing properties that are not defined in the type mapping.
72* Make ResponseTrans extend java.io.Writer in order to simplify using it with 3rd party templating engines.
73* Rename hop.sh/hop.bat to start.sh/start.bat
74* Change appDir handling:
75** If appDir is not defined in apps.properties, use the last file repository as appdir (used to be the first one)
76** If appDir is defined, add it to the end of the repository list if it isn't explicitly listed as repository.
77** If appDir is defined in apps.properties, use it for the app.dir JS variable.
78** Never automatically create an app's file repositories.
79* Make JS Date to java.util.Date conversion flawless
80* Add String getContent(String encoding) method to Resource interface
81* Implement HopObject.getResources() - returns a JS array containing all resources with the given name defined in the prototype chain.
82* Use res.skinpath to find hrefSkin when post-processing hrefs
83* Implement invocation of global onStop() when the application is stopped, analogous to onStart() when the app is started.
84*  Implement invokation of onInit() for object instanced from db

Version 5 by hannes on 06. June 2006, 19:03

32** Make ImageIOGenerator the default ImageGenerator, JimiGenerator the fallback scenario

Version 4 by hannes on 06. June 2006, 19:03

32Make ImageIOGenerator the default ImageGenerator, JimiGenerator the fallback scenario
39* Set cookie version to 1 and allow Allow days value of zero in order for cookies to be deleted
56* Added helmaTools package
57* Added helmaLib component
58* Implement new welcome application
59* Upgrade to Apache XML-RPC 2.0
60* Implement new XML-RPC endpoint that is more consistent with Helma actions
61* Updated default configuration files to include more current example properties and references to the relevant documentation
62* Implement app.getDbProperties() for db.properties introspection
63* Implement app.getDbSource(name)
64* Implement app.getPrototypes() and app.getPrototype(name) to allow app introspection

Version 3 by hannes on 06. June 2006, 18:56

43* Do not append break tag in res.writeln(), only append a newline character sequence
44 tag in res.writeln(), only append a newline character sequence

Version 2 by hannes on 06. June 2006, 18:55

31** Replaced Quantize by ColorQuantizer, which was freshly ported from the latest ImageMagick sources and updated with the Alpha Channel support that I added earlier to Qantize. This fixes a nasty bug when quantizing images with few colors (e.g. 32 -> 16 which often resultd in only 4 colors) and increases the general quality of color reduction a lot
35* Pass prefix, suffix, default parameters to macro functions and allow them to change them. Implemented by putting these values into a helper class RenderParameters which can easily overridden.
36* Do not log concurrency conflicts. This is often misinterpreted as error which it is not
37* Add dontEnum() function to JavaScript Object prototype. Takes a variable list of String arguments of propertiy names to set to DONTENUM
38* Set cookie version to 1 and allow days value of zero in order for cookies to be deleted
39* Implement unsetCookie(name) that causes a prevously set cookie to be discarded
40* Consider superclasses and interfaces when resolving class to prototype mapping
41* Fix prototype inheritance for wrapped Java objects. get() and has() are not supposed to check the prototype chain. Instead, just register the prototype using setPrototype()
42* Allow passing a java.util.Locale to Date.format() as second argument
43* Do not append
44 tag in res.writeln(), only append a newline character sequence
45* Fix exception handling:
46** Always print source file name and line number
47** Only print stack trace once
48** Always print stack trace
49** Always print stack trace for original exception
50** Also log full error stack trace for exceptions caught in macros
51* Implement HopObject.__proto__ and JavaObject.__proto__ containing prototype object
52* Fix constructor property in HopObject protos to be set to the actual constructor
53* Implement JavaObject.__javaObject__ to contain the original java object in an unscripted wrapper
54* Make sure JS functions in script-extended java objects actually override java methods
55* Use unscripted wrapper rather than HopObject prototype if the prototype for java class is not defined

Version 1 by hannes on 06. June 2006, 18:49

1* Reimplmenent .hac and .hsp support
2* Implement global serialize() and deserialize() functions and add corresponding methods to ScriptingEngine
3* Implement Session.login(username, password)
4* Extract session handling into SessionManager class
5* Refactoring and improvements for embedded XmlDatabase
6* Add logging functions that take an exception object as second argument, use error logging functions for internal errors
7* Many fixes in repository and resource handling
8* Allow Helma to run without listening to any server ports
9* Fix resource ordering for multiple type.properties files
10* Make session cookie IP binding optional (appname.protectedSessionCookie property in apps.properties)
11* Renamed former rootPrototype property to hrefRootProperty, since it defines the root object only as far as href() function is concerned
12* Add rootPrototype and userPrototype properties that allow to set the prototypes for the root and user objects, respectively
13* Implement Application.getRootPrototype() and Application.getRootId() that allow to get the prototype and id of the app's root node
14* Make sure Helma alsways uses absolute path names internally
15* Make Helma logging and log file rotation code scale better
16* Implement ignore-dirs functionality (appname.ignore = dir1,dir2)
17* Implement MultiFileRepository: all subdirectories are treated as top level file repositories (instaed of treating them as prototype dirs)
18* Implement updateable collections
19* Many concurrency and liveness fixes
20* Fix Rhino per-thread-scope support
21* Set JDBC connections to readonly mode depending on the operation we're about to perform
22* Fixes to scheduler
23* Switch to Jakarta Commons FileUpload for file upload handling
24* Introduce uploadSoftfail setting in apps.properties that allows file upload errors to be cought by checking req.data.helma_upload_error
25* Add app.getCronJobs() function that allows to retrieve the currently registered custom cron jobs. This returns a JavaScript object with the function name as property names and the helma.util.CronJob instance as property values.
26* Make Helma run with GCJ
27* Various changes, fixes and enhancements to the imaging code:
28** Added Image.trim(), that trims an image based on a specified pixel, just like in Photoshop
29** saveAs exists in two versions now, one that takes a filename, the other an OutputStream + Mime type
30** Added more possible parameters for the Image() constructor: BufferedImage, Image
31* Only interpret last path element as action if it is not terminated by a "/". This helps us to disambiguify URLs: /foo/ will never be interpreted as action, while /foo will be.
32* Try to autodetect Joins in additionalTables option
33* Make helmadoc work with multiple application repositories