Mach-II 1.6 Progress with Beta Coming Soon

It's been a while since Team Mach-II briefed users on the progress of Mach-II 1.6 -- probably too long.  Before I get into the details, I want to personally mention that I'm extremely excited about this release for many reasons.  I'd like to thank Kurt Wiersma (our resident geek) for all his hard work on 1.6 and playing devil's advocate with me when it came to features, architecture and final implementation.  Coding with constant input creates better code than solo coding.  I look forward to working on Mach-II 2.0 (we've got great things in store).

We've added many major features:

  • Mach-II caching appears to be the flashy new feature.  We're offering a very flexible implementation that allows you to either use basic caching strategies (time span or LRU) or the ability to write your own caching strategy.  The possibilities for developer extended caching is pretty much limitless as the architecture allows you to go as far as hooking into open-source Java project EhCache or a distributed memory caching system like MemCache (which is used at sites like Slashdot and LiveJournal).  The caching feature offers controller-level caching which was hard accomplish before 1.6, however it does not replace the need to add caching at other layers of your application such as in the model layer or at the database.
  • Mach-II logging is a feature that has been requested for a long time as it allows developers new ways of debugging a Mach-II application by using the one of the bundled loggers or creating their own.  We wanted to get this feature into the Mach-II 1.5 release, but due to time limitations it was pushed into the 1.6 release.  However, it is probably a good thing as 1.5 introduced new property datatypes (structs, arrays, Property.cfc).  The new Property.cfc was so new at the time that we never envisioned using a Property.cfc as a way for setup and configuration a Mach-II specific feature.  The logging feature is configured by declaring the MachII.logging.LoggingProperty as a property in your xml configuration file.  This approach allows us to offer greater flexibility to develoeprs for configuring and extending the logging system.  We also went in the same direction for caching and use the MachII.caching.CachingProperty for setup and configuration of the caching features.
  • The publish-subscriber listener invoking (broadcasting messages) is a new feature that has gotten some people very excited.  Broadcast style listeners decouple listeners from the event handlers whereas using the <notify> command couples listeners to event handlers.  The "broadcast" layer of abstraction would allow you to register an audit / logging layer by merely adding it as a subscriber to the broadcasted message instead of adding a notify to every event handler.  Also, message broadcasting lets you easily swap listeners by changing the messages it subscribes to and saves you from editing event handlers (and possibly introducing new errors). As a few people have pointed out in past discussions, these two reasons are a bigger maintenance issue than most developer realize.

Some of these major features have resulted in few neat byproducts or smaller features:

  • Mach-II 1.6 ships with a threading adapter that allow us to pass arbitrary bits of code (basically a CFC, method name and arguments) to be executed in a thread (cfthread).  One of problems is that the threading implementations between CFML engines varies somewhat.  The variation causes problems as we would like to support all CFML engines that offer threading capabilities.  The thread adapter allow us to abstract the different threading implementations and create a common API for calling code to use.  Currently, threading is only available on Adobe ColdFusion 8 as the BlueDragon 7 currently has some limitations in the context of Mach-II's implementation (these limitations are supposed to be changed in a future release).  Support for cfthread in Railo is coming in a future version of Railo as well.  As the CFML engines evolve, we'll be able to support threading with the Mach-II core with the threading adapter (both the caching and publish/subscribe features utilize the threading if available on the deployed CFML engine and atuomatically downgrade to serial processing if not available on that specific engine).
  • Simplify your Application.cfc. We have added support for onSessionStart and onSessionEnd as new plugin points in Mach-II plugins.  Of course, this is only available when using Application.cf (via mach-ii.cfc).  This addition allows you to move onSessionStart/End logic into the Mach-II arena and resuse logic that exists in your model layer.  This leaves your Application.cfc devoid of complicated logic within your Application.cfc and allows for easier module intergration (no need to copy onSessionStart code from a third-party module like MachBlog into you application). We have also added basic onApplicationStart and onRequestStart methods in the mach-ii.cfc which allows you to ommit these methods in your Application.cfc unless you need to add special functionality in your Application.cfc that is not offered by the basic methods.

At the moment, all the features described above have been implemented and comitted to the repository.  Check out a nightly and download a zip the lastest nightly build of 1.6. All in all this is a very exciting release and we have plenty of new things in the queue for Mach-II 2.0.  Look for a Beta of Mach-II 1.6 in early April.

3 Comments  |  0 Trackbacks  |  Mach-II 1.6, Announcements  |  Send
Posted 3/30/08 @ 11:00 AM by Peter J. Farrell

Comments


Hey Peter -

Are there Google Docs for the caching, logging and publish/subscribe listener features, as there were for some of the Mach-II 1.5 features? Those would be great to review!

Posted by Brian Klaas at 3/31/08 6:48 AM


Brian, we have them listed in our trac documentation section (plus a few other places):

http://greatbiztoolsllc-trac.cvsdude.com/mach-ii/wiki/Documentation#FeaturesIntroducedinMach-II1.6

Posted by Peter J. Farrell at 3/31/08 3:50 PM


Impressive! Wow, you guys are something. Like busy little bees trying to make better honey. It's all Goodelicious.! Sweet Job! Pardon the pun. :)

Posted by Hussein Grant at 4/4/08 2:20 PM