You've reached the documentation site for the Marmalade Project.
Marmalade is extremely experimental as of now. We believe the core functionality to be reasonably stable, with decent unit test coverage. However, since this is still alpha software, the core api could and probably will change with successive releases, so exercise reasonable caution before including Marmalade in your production software plans. You might want to join the -user mailing list, too.
- Go straight to the usage tips.
I've been working hard on marmalade lately, getting it ready to replace jelly in maven2...in fact, I've been working too hard to update this content. Sorry.
- We've got a basic Ant compatibility layer implemented and working.
- I've improved the usability of Marmalade by leaps and bounds, through the creation of a MarmaladeLauncher which provides easy, complete access to configuration of both the parsetime and runtime contexts at one go.
- In related (and obvious) news, Marmalade is now completely embeddable within maven2.
- 1.0-alpha-1 and 1.0-alpha-2-SNAPSHOT source archives are available on the website for those of use unfortunate enough not to have CVS access. (http://marmalade.codehaus.org/archives/source)
- Un-optimized, single-point-of-entry execution is available in 1.0-alpha-2-SNAPSHOT via the org.codehaus.marmalade.util.LazyMansAccess class. Check it out!
Marmalade is a second-generation, extensible XML scripting tool. In function, it is similar to Jelly, but is much smaller and more flexible. It is also similar to JSP in some (admittedly superficial) ways.
The basic idea behind Marmalade is a realization that scripting, and especially XML-based scripting, is really a combination of two simple languages. The first language is made up entirely of struture delimiters, and essentially determines how the language constructs are related to one another. The second language is really just a data access mechanism, used to retrieve data. Separating these concepts allows Marmalade to mix-and-match many different mechanisms for each, using a parser to translate native format to the Marmalade object model, and an evaluator to translate object-graph expressions into data access calls into the context of the script. In fact, given the right parser, Marmalade doesn't even have to be an XML-only scripting language...
Also, keeping the data access language flexible and context defintion reasonably simple allows for easy creation of X-to-Marmalade bridges. For example, Marmalade currently contains a Jelly compatibility layer which can be used to run any Jelly taglib from within a Marmalade script. You can even mix-and-match Jelly tags with Marmalade native tags in many cases.
Most importantly, Marmalade strives to minimize the trail of dependencies you as the developer are forced to include in your project. To that end, the Marmalade Project is best described as an umbrella project consisting of many sub-component suites, all centered on the marmalade-core library. This allows developers to take a buffet approach to Marmalade's functionality: you can use Jelly-compat, but that means including all of the libraries needed by Jelly. Marmalade's core requires only a single library other than itself in order to function (compared to 13 dependencies for Jelly). What you add from there is entirely up to you.
See Mailing lists for more information.
Marmalade has been migrated to Subversion. The new URL is:
Bugs, Features, What-Nots
Marmalade has an issue tracking project on the Codehaus JIRA instance, so please log any feature requests, improvements, bug reports, etc. there. The address is:
The core functionality, marmalade-core, is basically stable now. I'm only adding the random tiny new feature now and again, without changing old APIs, in order to solidify the feature set and move toward a 1.0-alpha2 release. At this point, we're basically just waiting on documentation before the release! If you'd like to test drive marmalade, please checkout from CVS or contact the marmalade-dev list, and I'll put a distro up.
Forgot to document one of the nicer features of Marmalade:
- Support for pluggable expression languages, even within the same script. (see: Expression Language Framework)
Marmalade currently contains the following features:
- Support for OGNL as a data access language (see: OGNL Expression Language Support)
- Support for Commons-EL (same as JSP 2.0) as a data access language marmalade-el-commons
- XML parsing via ultra-fast XPP3 XML parser (MXP1)
- Scoped script contexts
- Implementation of the JSTL-core tag library as a native Marmalade taglib marmalade-tags-jstl-core
- Implementation of the Jelly-core tag library as a native Marmalade taglib marmalade-tags-jelly-core
- Jelly compatibility layer, allowing direct use of Jelly-native taglibs within Marmalade scripts marmalade-compat-jelly
- Buffet-style functionality; include only as much as you need, and don't import dependencies you don't use
- Ant compatibility layer, allowing direct use of Ant tasks and types marmalade-compat-ant
- JSTL-fmt tag library as a native Marmalade taglib marmalade-tags-jstl-fmt
Currently idle (for lack of demand):
- HTTPUnit tag library (Marmalade-native) marmalade-tags-httpunit