adam bien's blog

Back to Web 2.0 (typing still needed): JMaki the "JavaScript Wrapper" and Phobos the serverside scripting 📎

Naming: j-stands for JavaScript, Maku (japanese) to wrap. It provides a common interface to the JavaScript technology.
JMaki is a framework which defines widgets (consisting of javascript, html and css) as "visual component".
jMaki uses a publish-subscibe mechanism for communication between widgets - it's called glue. The layout is defined by  CSS-themes - it is cascading, tree-like approach.
The general layout, which comes with the theme can be overriden by the widgets.
jMaki comes with XHP (XMLHttpRequest proxy). It allows the requests to be proxied to other domains. This is needed, in case a widget would like to communicate with a service from other domain.
Phobos, on the other hand,  is a "restful" approach to design application. It is able to execute JavaScript (or other scripting language as well) on the server. The synergy with jMaki is obvious - there is no more impedance mismatch between JavaScript and Java. The Phobos application is deployed as WAR with all dependencies. Phobos provides even support for serverside JavaScript debugging. Phobos plugins are available for NetBeans as well as for Eclipse. Components can be simple dropped from the palette into the

With jMaki + Phobos you can run the script either in browser, or on the server. You can even move a component from browser to server. This is actually a cool feature.
jMaki will also support Rails - which should increase the adoption.

Netbean's Visual WebPack also supports the visual composition of jMaki widgets. The JavaScript widgets are rendered in the VisualWeb Pack - and accessed as JavaBeans.

From the architecture point of view: jMaki is the API, where DOJO, Yahoo Widgets etc. are the SPIs. So the architecture can be compared JDBC :-)

I remember the old Netscape SuiteSpot days with serverside JavaScript. We migrated some JavaScript code to Servlets/JSPs (it was long before Struts). Perhaps we will have to migrate them back :-).