Using Orbeon PresentationServer with a recent version of eXist

Why would you want to do that?

Orbeon PresentationServer is currently shipping with eXist 1.0 beta2.

This is true of both OPS version 2.8 (the current stable release) and OPS 3.0 beta 3 (the latest beta of the next generation).

While eXist 1.0 beta2 is described as the stable version of the Open source XML database, their web site displays the following Health Warning:

The 1.0 beta2 release is truly ancient now. There were lots of bug fixes and feature enhancements during the past months, so using beta2 cannot be recommended any more. Please download a newer development snapshot. Recent development snapshots can be regarded as stable. A new official “stable” release is in preparation, but as usual, we lack the time to complete the documentation. Any help will be welcome!

Among the many enhancements included in more recent versions, Transactions and Crash Recovery is very worth mentioning:

After several months of development, eXist does now support full crash recovery. Crash recovery means that the database can automatically recover from an unclean termination, e.g. caused by a killed jvm, power loss, system reboot or hanging processes.

This might be a reason of the corruptions noticed in my experience with OPS and eXist and that has been my motivation to migrate http://apiculteurs.info to the latest eXist snapshot

While this is not rocket science, the following notes may help you if you want to attempt the same migration.

Environment

My environment is Ubuntu Hoary, Java Sun j2sdk 1.4 and /or 1.5, Jetty and OPS 2.8 but the same procedure should be valid for other environments.

Migration

Database backup

The physical database format has changed between these versions and, if you have to keep a database during this migration, you need to backup the database using the eXist client before starting the actual migration.

I’ll cover how to use the eXist client with an eXist database embedded in OPS in a future blog entry, in the mean time, you can refer to this thread of the ops-users mailing list.

After you’ve done this backup, remove the content of the old database:

rm orbeon/WEB-INF/exist-data/*

Removing the old libraries

You should then stop your servlet and move to the orbeon “orbeon/WEB-INF/lib” directory where you’ll find four eXist libraries:

orbeon/WEB-INF/lib/exist-1_0b2_build_1107.jar
orbeon/WEB-INF/lib/exist-optional-1_0b2_build_1107.jar
orbeon/WEB-INF/lib/xmldb-exist_1_0b2_build_1107.jar
orbeon/WEB-INF/lib/xmlrpc-1_2_patched_exist_1_0b2_build_1107.jar
            

Remove these four libraries from “orbeon/WEB-INF/lib” and keep them somewhere else in case you want to move back to eXist 1.0 beta2 later on.

Installing the eXist snapshot

Install the eXist snapshot through:

java -jar eXist-snapshot-20050805.jar

Choose whatever directory you want to install this new version but keep it out of the scope of your OPS install: we are doing this installation only to get the new libraries!

Installing the new libraries

You need to copy five eXist libraries into “orbeon/WEB-INF/lib”. If you’ve install eXist in “/opt/eXist”, move to “orbeon/WEB-INF/lib” and type:

cp /opt/eXist/exist.jar eXist-snapshot-20050805.jar
cp /opt/eXist/exist-optional.jar exist-optional-snapshot-20050805.jar
cp /opt/eXist/exist-modules.jar exist-modules-snapshot-20050805.jar
cp /opt/eXist/lib/core/xmldb.jar xmldb-eXist-snapshot-20050805.jar
cp /opt/eXist/lib/core/xmlrpc-1.2-patched.jar xmlrpc-1.2-patched-eXist-snapshot-20050805.jar
            

Move to java 5.0

eXist now relies on some Java 5.0 classes and if you try to use it with j2sdk 1.4, you’ll run into errors such as:

22:37:11.168 WARN!! [SocketListener0-9] org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:574) >11> Error for /orbeon/apiculteurs/administration/statistiques/montre
java.lang.NoClassDefFoundError: javax/xml/datatype/DatatypeConfigurationException
	at org.exist.xquery.value.AbstractDateTimeValue.<clinit>(AbstractDateTimeValue.java:157)
	at org.exist.xquery.functions.FunCurrentDateTime.eval(FunCurrentDateTime.java:51)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:144)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:58)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:144)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:173)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:43)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:159)
            

To fix that, the simplest solution (assuming your application supports it) is to move your servlet to j2sdk 1.5.

Restart, restore and enjoy

You’re almost done!

Restart your servlet, restore your database using the eXist client and enjoy your brand new eXist installation.

After a servlet reload, in the servlet log, you’ll notice new messages:

            2005-10-07 08:51:08,615 INFO  org.exist.storage.XQueryPool null - QueryPool: maxStackSize = 5; timeout = 120000; timeoutCheckInterval = 30000
Scanning journal  [==                                                ] (4 %)
Scanning journal  [====                                              ] (8 %)
Scanning journal  [======                                            ] (12 %)
Scanning journal  [========                                          ] (16 %)
Scanning journal  [==========                                        ] (20 %)
Scanning journal  [=================                                 ] (34 %)
Scanning journal  [====================                              ] (40 %)
Scanning journal  [==============================                    ] (60 %)
Scanning journal  [========================================          ] (80 %)
            2005-10-07 08:51:19,713 INFO  org.orbeon.oxf.pipeline.InitUtils null - /apicu

These messages confirm that your eXist installation is now using a journal.

Share and Enjoy:
  • Identi.ca
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Twitter
  • Add to favorites

Apiculteurs.info

J’ai mis en ligne apiculteurs.info, un site conçu par des amateurs de miel (ma femme Catherine et moi-même) pour des amateurs de miel :

Ce site a pour objectif de répertorier le plus grand nombre possible d’apiculteurs qui commercialisent leur propre production, y compris les apiculteurs traditionnels qui ne sont pas connectés à internet.

Le résultat n’est pas encore très impressionnant et sa liste d’apiculteurs est encore courte, notamment parce que suivant les directives de la CNIL nous demandons par écrit l’accord des apiculteurs avant de publier leurs coordonnées et que nous sommes encore en attente d’un bon nombre de réponses.

Si je mentionne ce site ici, c’est que j’ai souhaité, dans sa conception et sa réalisation utiliser les principes, technologies et bonnes pratiques que j’enseigne et conseille à mes clients.

Le site est ainsi entièrement “powered by XML”.

Il repose sur le framework de publication XML Open Source Orbeon PresentationServer et la base de données XML eXist. Les informations sont stockées dans la base eXist un utilisant un vocabulaire XML/RDF que j’envisage de publier sous le nom de “foab” (Friend Of A Bee) et les pages sont constituées dynamiquement à l’aide de PresentationServer.

L’utilisation de cette architecture nous permet également de publier (en respectant leur licence) des articles de l’encyclopédie libre Wikipédia relatifs aux apiculteurs et à l’apiculture. Publiées sous l’adresse http://apiculteurs.info/wikipedia, ces pages sont téléchargées au format XHTML à partir de l’encyclopédie et stockées localement dans la base eXist.

La souplesse de PresentationServer permet de respecter les principes de l’architecture REST et d’attribuer automatiquement à chaque apiculteur une adresse stable (telle que http://apiculteurs.info/apiculteur/exemple/). Les services se rapportant à cet apiculteur (tels que l’édition de ses informations, la suppression de l’enregistrement, son export XML, …) s’effectuent également au moyen d’adresses stables et spécifiques à chaque apiculteur.

Les formulaires de saisie, tels que celui qui permet de suggérer un nouvel apiculteur mais également tout ceux qui permettent d’administrer la base de données sont définis à l’aide du standard W3C XForms et s’appuient sur l’implémentation XForms côté serveur de PresentationServer ce qui permet d’utiliser XForms dès aujourd’hui sans attendre que XForms soit implémenté dans les navigateurs Web…

Le site dispose bien entendu d’un canal RSS 1.0.

Les pages ne sont pas encore valides au sens de la recommandation XHTML 1.1 (les formes de saisies générées par l’implémentation XForms de PresentationServer sont conformes à HTML et non à XHTML) mais c’est point que je compte corriger prochainement. Elles utilisent néanmoins des méthodes de présentations sans tables basées sur CSS.

Les lettres envoyées aux apiculteurs pour leur demander l’autorisation de publier leur coordonnées sont envoyées à partir des données extraites de la base XML formatées par transformation XSLT sous forme de document OpenOffice. Le tout est orchestré par PresentationServer et disponible à partir des pages d’administration du site.

Ce petit site qui se veut une vitrine de l’apiculture et des apiculteurs constitue donc également une véritable vitrine de quelques unes des possibilités apportées par XML en matière de publication Web!

Share and Enjoy:
  • Identi.ca
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Twitter
  • Add to favorites