Latest Posts

Archives [+]

Categories [+]

Authors [+]

Entries by Michael Marth

    Posted by Michael Marth JUL 26, 2010

    Posted in jcr and link of the day Comments 2

    It's always good to get a glimpse into the approaches taken by non-OSS JCR implementations: In a recent technical article on the developerworks website Malarvizhi Kandasamy describes how IBM goes about JCR fulltext search. The actual engine is

    Juru, which is a Java library developed by the IBM Haifa research lab

    According to the article Juru is capable of some natural language processing like stemming or finding similar spellings.

    IBM uses a JCR compliant repository in a number of their products, e.g. Lotus Web Content Management or WebSphere Portal.

    Posted by Michael Marth JUL 16, 2010

    Posted in apache Add comment

    The current board of directors of the Apache Software Foundation has just been elected - congratulations to:

    • Shane Curcuru
    • Doug Cutting
    • Bertrand Delacretaz
    • Roy T. Fielding
    • Jim Jagielski
    • Sam Ruby
    • Noirin Shirley
    • Greg Stein
    • Henri Yandell

    Roy and Bertrand are colleagues of mine at Day Software.

    To find out more about what the board actually does have a look at "How the ASF works".

    Posted by Michael Marth JUL 02, 2010

    Posted in jcr, jsr-170 and jsr-283 Comment 1

    One particular strength of Java Content Repositories is that they provide so much infrastructure for developing content centric applications. Today, I discovered another hidden gem in JCR2 (JSR-283) that can come in very handy for app development:

    In JCR1 the class ObservationManager used to manage EventListeners that get triggered immediately when an event like a property change occurs. Starting from JCR2 the ObservationManager also provides an EventJournal for each node that can be retrieved without having to register a listener first. The EventJournal is a list of events, e.g. addition, moves or removal(!) of child nodes, complete with user id and timestamp.

    Attached to this post is a little CRX package with a servlet that renders the events for a given node. The relevant lines are:

    ObservationManager om = session.getWorkspace().getObservationManager();
    EventJournal eventJournal = om.getEventJournal(
        Event.NODE_ADDED | Event.NODE_MOVED | Event.NODE_REMOVED  | Event.PROPERTY_CHANGED
        | Event.PROPERTY_REMOVED | Event.PROPERTY_ADDED, path, false, null, null);

    Install the package and point your browser to http://localhost:7402/apps/eventy.html?path=/content (the path parameter specifies the node you are interested in). You should see a list of entries like:

    Event: Path: /content/n3, NodeAdded: , UserId: admin, Timestamp: 1272975189833, UserData: null, Info: {}
    Event: Path: /content/n3, NodeRemoved: , UserId: admin, Timestamp: 1272975212725, UserData: null, Info: {}
    ...

    And from the Javadoc:

    Events returned in the EventJournal instance will be filtered according to [...] the current session's access restrictions

    I am delighted.

    * eventjournal-1.0.zip
    CRX package: sample for EventJournal

    Posted by Michael Marth JUN 21, 2010

    Posted in announcements, open and screencast Comments 5

    Day's collection of screencasts is now available as HTML5 video, i.e. using the <video> tag instead of a Flash player (and Flash only as a fallback). The videos have been converted to mp4 and ogg. The semantics of the <video> tag allow for different renditions to be offered to the client which can then choose an appropriate one.

    Check out the screencast Web Application Development with CRX or the CQ5 introduction. You will need a non-IE browser, like:

    • Mozilla Firefox 3.6+ (ogg in HTML5 inline)
    • Apple iPhone 3+ (mp4 low-res in HTML5 fullscreen)
    • Apple iPad (mp4 in HTML5 inline & fullscreen)
    • Apple Safari 4+ (mp4 in HTML5 inline & fullscreen)
    • Google Chrome 5+ (mp4 in HTML5 inline)
    • Google Android 2.1+ (mp4 low-res in device player)
    • Opera 10.5+ (ogg in HTML5 inline)

    (Microsoft IE 6+ uses the Flash fallback)

    Thanks to Cédric Hüsler and Gabriel Walt (see them below testing on their pet devices) for making this possible ;-)

    /content/ddc/blog/2010/06/_ann_html5_videos/jcr:content/par/image/file

    Posted by Michael Marth JUN 10, 2010

    Posted in cms, everything is content and modelling Comments 2

    Last week I have uploaded a Twitter clone application to Day's Package Share. The application's content package not only contains some sample content and the jsp files with the application code. It also includes sample users and their respective access rights on different JCR nodes. Putting all this information in one content package is possible (and even simple) because users, ACLs etc are stored in the content repository as JCR nodes.

    The experience of putting together this package nicely reminded me of the power of the concept of storing all of a a web application's artefacts in the content repository - which can be considered the technical implementation of Day's mantra "everything is content".

    Classically, the image of web content management systems one has in mind looks something like this:

    /content/ddc/blog/2010/06/comment_on_contenta/jcr:content/par/image_0/file

    Content is the input and a web page is the end result of some rendering process. There is nothing wrong with that image, but considering "everything is content" an alternative prototypical image of a CMS came to my mind:

    /content/ddc/blog/2010/06/comment_on_contenta/jcr:content/par/image_1/file

    A web content management system's repository is the place to store and manage all aspects that make up your web site. The web page is not only the end result, but also the source.