package org.exist.examples.xmldb;
import java.io.File;
import org.exist.storage.DBBroker;
import org.exist.xmldb.DatabaseInstanceManager;
import org.exist.xmldb.XQueryService;
import org.exist.xupdate.XUpdateProcessor;
import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.Database;
import org.xmldb.api.base.ResourceIterator;
import org.xmldb.api.base.ResourceSet;
import org.xmldb.api.base.XMLDBException;
import org.xmldb.api.modules.XMLResource;
import org.xmldb.api.modules.XUpdateQueryService;
/**
* Retrieve a document from the database. To run this example enter:
*
* bin/run.sh org.exist.examples.xmldb.MultipleDatabases
*
* in the root directory of the distribution.
*
* @author Wolfgang Meier <meier@ifs.tu-darmstadt.de>
*/
public class MultipleDatabases {
protected static String driver = "org.exist.xmldb.DatabaseImpl";
protected static String URI_DB1 = "xmldb:exist://" + DBBroker.ROOT_COLLECTION;
protected static String URI_DB2 = "xmldb:test://" + DBBroker.ROOT_COLLECTION;
protected static String XUPDATE_1 =
"<xu:modifications version=\"1.0\" xmlns:xu=\"" + XUpdateProcessor.XUPDATE_NS + "\">" +
"<xu:insert-after select=\"//SPEECH/LINE[. &= 'loving']\">" +
"<TEST>New line inserted</TEST>" +
"</xu:insert-after>" +
"</xu:modifications>";
public static void main(String args[]) throws Exception {
// initialize database drivers
Class cl = Class.forName(driver);
// create the default database
Database database = (Database) cl.newInstance();
database.setProperty("create-database", "true");
DatabaseManager.registerDatabase(database);
// create a second database called "test", configured by
// configuration file "testConf.xml"
Database database2 = (Database) cl.newInstance();
database2.setProperty("create-database", "true");
database2.setProperty("configuration", "path/to/testConf.xml");
database2.setProperty("database-id", "test");
DatabaseManager.registerDatabase(database2);
Collection collection1 = DatabaseManager.getCollection(URI_DB1, "admin", null);
loadFile(collection1, "samples/shakespeare/hamlet.xml");
Collection collection2 = DatabaseManager.getCollection(URI_DB2, "admin", null);
loadFile(collection2, "samples/shakespeare/r_and_j.xml");
doQuery(collection1, "xmldb:document()//SPEECH[LINE &= 'cursed spite']");
doQuery(collection2, "xmldb:document()//SPEECH[LINE&= 'love' and SPEAKER = 'JULIET']");
doXUpdate(collection1, XUPDATE_1);
doXUpdate(collection2, XUPDATE_1);
shutdown(collection1);
shutdown(collection2);
}
private static void doQuery(Collection collection, String query) throws XMLDBException {
XQueryService service = (XQueryService)
collection.getService("XQueryService", "1.0");
ResourceSet result = service.query(query);
System.out.println("Found " + result.getSize() + " results.");
for(ResourceIterator i = result.getIterator(); i.hasMoreResources(); ) {
System.out.println(i.nextResource().getContent());
}
}
private static void doXUpdate(Collection collection, String xupdate) throws XMLDBException {
XUpdateQueryService service = (XUpdateQueryService)
collection.getService("XUpdateQueryService", "1.0");
long mods = service.update(xupdate);
System.out.println(mods + " modifications processed.");
}
private static void loadFile(Collection collection, String path) throws XMLDBException {
// create new XMLResource; an id will be assigned to the new resource
XMLResource document = (XMLResource)
collection.createResource(path.substring(path.lastIndexOf('/')),
"XMLResource");
document.setContent(new File(path));
collection.storeResource(document);
}
private static void shutdown(Collection collection) throws XMLDBException {
// shutdown the database gracefully
DatabaseInstanceManager manager =
(DatabaseInstanceManager) collection.getService("DatabaseInstanceManager", "1.0");
manager.shutdown();
}
}