Hi,
I've been reading this newsgroup for quite a while and decided to test Berkeley
DB XML for myself.
But actually I'm encountering a problem with this method, which is basically
just made for testing executing document updates on existing documents in a XML-
database storage:
//-------------------------------
public void update(String filedescription, String userName, String id, String
ver_query, String theContainer, String binContent, boolean delete_flag)
throws Throwable {
File path2DbEnv = new File("C:/environment");
if (path2DbEnv == null || ! path2DbEnv.isDirectory()) {
usage();
}
myDbEnv env = null;
XmlContainer openedContainer = null;
XmlTransaction txn = null;
try {
// Open an environment
env = new myDbEnv(path2DbEnv);
XmlManager theMgr = env.getManager();
// open a transactional container
XmlContainerConfig config = new XmlContainerConfig();
config.setTransactional(true);
config.setErrorStream(System.err);
openedContainer = theMgr.openContainer(theContainer, config);
// Start a transaction
txn = theMgr.createTransaction();
XmlQueryContext context=theMgr.createQueryContext();
String fullQuery = ver_query;
System.out.println("Updating documents for expression: '" + fullQuery
+ "'.");
//XmlUpdateContext updateContext = theMgr.createUpdateContext();
//query for all the documents that we want to update
XmlResults results = theMgr.query(txn, fullQuery, context, null);
System.out.println("Found "+results.size()+" document(s) matching the
expression ");
results.delete();
//txn.delete();
//-->Modify documents
XmlModify mod = theMgr.createModify();
XmlResults allDocsSel = theMgr.query(fullQuery,context);
XmlUpdateContext uc = theMgr.createUpdateContext();
XmlValue thisValue = null;
while((thisValue = allDocsSel.next())!=null){
XmlDocument d = thisValue.asDocument();
String docString=d.getContentAsString();
String newDocString=" ";
if (!delete_flag){newDocString = getNewDocument(theMgr, d,
context,
docString, theContainer,
filedescription, id, binContent);}
d.setContent(newDocString);
mod.execute(thisValue,context,uc);
d.delete();
}
allDocsSel.delete();uc.delete();thisValue.delete();mod.delete();
} catch (Exception e) {
System.err.println("Error performing document update against "
+ theContainer);
System.err.println(" Message: " + e.getMessage());
//In the event of an error, we abort the operation
// The database is left in the same state as it was in before
// we started this operation.
}
finally {
//cleanup(env, openedContainer, txn);
cleanup(env, openedContainer, txn);
}
}
//-------------------------------
This method results in the following compiler errors:
(first part:)
"Error performing document update against mainDataStorage.dbxml
Message: null"
What does the null-message refer to?
The error message goes on like this (container in use is named
mainDataStorage.dbxml):
(second part:)
"Error: closing the transaction region with active transactions
Database handles remain at environment close
Open database handle: mainDataStorage.dbxml/secondary_document_statistics_string
Open database handle: mainDataStorage.dbxml/secondary_document_index_string
Open database handle: mainDataStorage.dbxml/node_nodestorage
Open database handle: mainDataStorage.dbxml/secondary_document
Open database handle: mainDataStorage.dbxml/secondary_dictionary
Open database handle: mainDataStorage.dbxml/primary_dictionary
Open database handle: mainDataStorage.dbxml/secondary_configuration"
I'm working on this for hours, I can't find the cause for this. Any ideas or
suggestions?
Thanks in advance,
M.Brueckner
------------------------------------------
To remove yourself from this list, send an
email to xml-unsubscribe-E1rGyZxLSgzby3iVrkZq2A@xxxxxxxxxxxxxxxx