[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xindice-dev
Subject:    [Xindice Wiki] New:  UpgradeTo11EmbedNotes
From:       xindice-cvs () xml ! apache ! org
Date:       2004-02-21 4:07:05
Message-ID: 200402210407.i1L475U2025969 () mailer ! progressive-comp ! com
[Download RAW message or body]

   Date: 2004-02-20T20:07:12
   Editor: VadimGritsenko <vgritsenko@apache.org>
   Wiki: Xindice Wiki
   Page: UpgradeTo11EmbedNotes
   URL: http://wiki.apache.org/xindice/UpgradeTo11EmbedNotes

   no comment

New Page:

##language:en


= Notes on Xindice 1.0 to 1.1 Upgrade for Embedded Use =
-- ''by Murray Altheim''

These are my notes. This afternoon I downloaded the latest CVS of Xindice 1.1 and \
upgraded from 1.0 in client-server to 1.1 embedded. The entire process (not including \
download time) was about an hour (with help from Vadim to uncover elements of my \
boneheadedness).

Note that my particular use of Xindice 1.0 is fairly minimal, i.e., I basically open \
the database, store and retrieve XML documents, with most of the database \
functionality developed in working with my own API (called XNode). I don't currently \
use querying or indexing. Yet. The recent messages on xindice-dev about Lucene are \
quite interesting, and I'm looking forward to seeing what develops in this area.

Okay, here's what I've done:

 1. Downloaded the latest CVS. Instructions are available from:
    http://xml.apache.org/cvs.html#Access+the+Source+Tree

 Anonymous:
 {{{
   % cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic
     login
     password: anoncvs

   % cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic co xml-xindice
 }}}

 Non-anonymous:
 {{{
   % cvs -d YOUR_USER_NAME@cvs.apache.org:/home/cvs co xml-xindice
     login
     password: [password]
 }}}

 2. I built the source:
 {{{
    % ant build
    % ant jar-release
 }}}

 3. Since that worked, I substituted the new xindice 1.1 directory
   for the existing xindice 1.0 directory within my project project
   directory (i.e., xindice is a subdirectory of my project directory).
   The ant build.xml file for my project reads the jar files found in
   the $XINDICE_HOME/java/lib directory already, so no changes were
   necessary here. (I've also got an eXist implementation within, so
   I manage both via properties)

   I moved the xindice-1.1b4-dev.jar file from the dist directory to
   the $XINDICE_HOME/java/lib directory, and renamed it xindice.jar.

 4. In my own application code I replaced the references as below:
 {{{
    // m_driver = "org.apache.xindice.client.xmldb.DatabaseImpl";
       m_driver = "org.apache.xindice.client.xmldb.embed.DatabaseImpl";

    // m_root = "xmldb:xindice://localhost:4080/db/";
       m_root = "xmldb:xindice-embed:///db/";
 }}}

 5. Given the definitions in #4 above, the guts of the code to open an
   embedded database, set up a CollectionManagementService and
   DatabaseInstanceManager (whose only purpose is to shut down the
   database, something I probably won't do anymore now that I'm using
   embedded) is as follows:

 {{{
       database = (Database)Class.forName(m_driver).newInstance();

       database.setProperty("db-home","./xindice");
       database.setProperty("managed","true");

       org.xmldb.api.DatabaseManager.registerDatabase(database);
       rootCollection = org.xmldb.api.DatabaseManager.getCollection(m_root);

       org.xmldb.api.modules.CollectionManagementService colMgmtService
               = (CollectionManagementService)rootCollection.getService(
                   "CollectionManagementService","1.0");

       org.apache.xindice.client.xmldb.services.DatabaseInstanceManager \
                xdbInstMgrService
               = (org.apache.xindice.client.xmldb.services.DatabaseInstanceManager)
                   rootCollection.getService("DatabaseInstanceManager",
                   Command.XMLDBAPIVERSION);
 }}}

 6. As a side note, I had developed a rather complex listener negotiation scheme to \
handle situations where the application was opened without the database being active, \
the database server being opened via a different VM session than the client, etc.  \
All of this code can now be dumped due to the simplicity of using the embedded \
drivers, though I might keep it around in case I decide to go back to the more \
complex world of client-server (for times when I do want to make available a remote \
database to a set of external clients).

After I'd debugged the small changes to my code, my application came up and the \
database opened up without any difficulty. I tried creating and deleting collections \
and nodes. When this worked, I quit, then subsituted my existing, populated 1.0 'db' \
directory for the new directory, then reopened my application. To my surprise, my old \
collections and nodes still worked. (I do all my access to Xindice via the XNode API, \
so I can't really comment on any other features such as query, indexing, etc.)

I'd like to thank once again Vadim Gritsenko for his help in getting me up and \
running with 1.1. It was much less painful than I'd envisioned, in fact, it wasn't \
painful at all. His hard work has been invaluable in keeping this project alive, and \
if there were some kind of online applause button, I'd be pushing it right now.

''Murray''


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic