Helma Logo
main list history
previous version  overview  next version

Version 8 by hannes on 29. September 2009, 09:11

This page docuents new features in Helma 1.7. As Helma 1.7 hasn't been released yet, this page is incomplete and work-in-progress.

### Case sensitive HopObject property names

Property names in HopObjects are now case sensitive. This means that obj.foo, obj.Foo and obj.FOO no longer point to the same property. This feature should help to enforce good programming habits and speed up property access.

### Programmatically generated collections

Helma 1.7 defines a new static method on HopObject constructors that allows to [generate HopObject collections via JavaScript][Creating collections programmatically]. The method is called HopObject.getCollection() and takes a single JavaScript object as argument. It returns a HopObject that is equivalent to the one you would get by defining it as a collection in a type.properties file.

### Programmatically defined HopObject mappings

There is a new and experimental definePrototype function that allows to [define prototype mappings via JavaScript][defining HopObject mappings programmatically]. In its current implementation, there is a global function called definePrototype() that takes two arguments: The prototype name, and a JavaScript object describing the type mapping.

### Apache Commons Daemon support

Helma 1.7 introduces [Apache Commons Daemon](http://commons.apache.org/daemon/) support, making it possible to run the embedded Jetty server on port 80 for ordinary users on Unix and running Helma as service on Unix and Windows systems. There also is a [Debian/Ubuntu package](https://launchpad.net/~hannesw/+archive/ppa/) that indorses Commons Daemon jsvc utility to install Helma as service.

### Lazy collection loading

* HopObject.list(), when called without arguments, no longer fetches all contained objects.

* HopObject.list(start, length) (when called with start and length arguments) prefetches the requested object range.

* Large object collections with more than 1000 elements divide their list of child ids into multiple segments where each segment is loaded individually.

### Query parameter argument to HopObject.href()

HopObject.href() now takes a JavaScript object as optional second argument after the action name. The argument's properties will be encoded to a query string and added to the returned URL. The object may also contain nested objects, which will be encoded using the `outer[inner]` format. For example, the following call:

    root.href('', {foo: 'bar', nested: {x: 1}});

returns `/?foo=bar&nested[x]=1`, which is parsed back to the original object structure when received by Helma.

### Profiler

Helma 1.7 features a profiler for measuring function runtime and invocation frequency. Profiling data is written to the event log and the response's debug area. To enable the profiler set the the `rhino.profile` app property to `true`. More information can be found on the [Profiler] page.