Berkeley DB XML 多线程添加文档例子
2010年3月1日
10 条评论
import java.io.File;
import java.util.concurrent.CountDownLatch;
import com.sleepycat.db.Environment;
import com.sleepycat.db.EnvironmentConfig;
import com.sleepycat.db.LockDetectMode;
import com.sleepycat.dbxml.XmlContainer;
import com.sleepycat.dbxml.XmlContainerConfig;
import com.sleepycat.dbxml.XmlDocument;
import com.sleepycat.dbxml.XmlDocumentConfig;
import com.sleepycat.dbxml.XmlException;
import com.sleepycat.dbxml.XmlManager;
import com.sleepycat.dbxml.XmlManagerConfig;
import com.sleepycat.dbxml.XmlQueryContext;
import com.sleepycat.dbxml.XmlResults;
import com.sleepycat.dbxml.XmlTransaction;
import com.sleepycat.dbxml.XmlUpdateContext;
public class DbxmlThreads extends Thread {
public static XmlManager mgr = null;
public static String containerName = "test.dbxml";
public static Environment dbEnv = null;
private static XmlContainer cont = null;
static {
EnvironmentConfig envConf = new EnvironmentConfig();
envConf.setThreaded(true);
envConf.setAllowCreate(true);
envConf.setTransactional(true);
envConf.setInitializeCache(true);
envConf.setInitializeLocking(true);
envConf.setInitializeLogging(true);
envConf.setCacheSize(64 * 1024 * 1024);
envConf.setLockDetectMode(LockDetectMode.DEFAULT);
XmlManagerConfig xmlMgrConfig = new XmlManagerConfig();
xmlMgrConfig.setAdoptEnvironment(true);
File dbHome = new File(".");
try {
dbEnv = new Environment(dbHome, envConf);
mgr = new XmlManager(dbEnv, xmlMgrConfig);
// 创建XmlContainer
if(mgr.existsContainer(containerName)!=0)
mgr.removeContainer(containerName);
XmlContainerConfig containerConf = new XmlContainerConfig();
containerConf.setTransactional(true);
containerConf.setAllowCreate(true);
containerConf.setContainerType(XmlContainer.NodeContainer);
cont = mgr.openContainer(containerName, containerConf);
cont.setAutoIndexing(false);
} catch (Exception e) {
e.printStackTrace();
}
}
private String name;
private CountDownLatch doneSignal;
DbxmlThreads(String name, CountDownLatch doneSignal) {
this.name = name;
this.doneSignal = doneSignal;
}
public void run() {
XmlTransaction txn = null;
try {
String content = "<"+name+">I am "+name+""+name+">";
for (int i = 0; i < 100; i++) {
XmlDocumentConfig dc = new XmlDocumentConfig();
dc.setGenerateName(true);
System.out.println(name+" insert "+i);
txn = mgr.createTransaction();
XmlDocument doc = mgr.createDocument();
doc.setContent(content);
cont.putDocument(txn, doc, dc);
txn.commit();
}
} catch (XmlException e) {
System.out.println("insert error:" + e.getMessage());
} finally {
doneSignal.countDown();
}
}
public static void main(String[] args) throws Exception {
CountDownLatch doneSignal = new CountDownLatch(5);
DbxmlThreads threadA = new DbxmlThreads("A", doneSignal);
DbxmlThreads threadB = new DbxmlThreads("B", doneSignal);
DbxmlThreads threadC = new DbxmlThreads("C", doneSignal);
DbxmlThreads threadD = new DbxmlThreads("D", doneSignal);
DbxmlThreads threadE = new DbxmlThreads("E", doneSignal);
threadA.start();
threadB.start();
threadC.start();
threadD.start();
threadE.start();
doneSignal.await();
XmlQueryContext qc = mgr.createQueryContext();
String query = "collection('"+containerName+"')/A";
XmlResults res = mgr.query(query, qc);
System.out.println("The results size is: "+res.size());
res.delete();
cont.close();
mgr.close();
}
}
最近评论