Why would you want to do that?
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
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.
While this is not rocket science, the following notes may help you if you want to attempt the same migration.
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.
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:
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.