在继续之前,查看BDB XML API中的异常处理和调试工具会很有帮助。
所有BDB XML操作都可以抛出异常,因此它们必须位于try块中,或者包含方法必须声明可抛出异常。
BDB XML操作抛出XmlException对象。 XmlException继承自Berkeley DB DbException类,后者继承自普通的Java Exception类。 因此,您可以通过捕获异常来捕获BDB XML类抛出的所有异常,但为了清楚起见,您可能希望单独捕获每种类型的异常。
以下示例说明了BDB XML异常处理
package dbxml.gettingStarted;
import com.sleepycat.dbxml.XmlContainer;
import com.sleepycat.dbxml.XmlException;
import com.sleepycat.dbxml.XmlManager;
class doDbXml
{
public static void
main(String args[]) throws Throwable
{
XmlContainer myContainer = null;
XmlManager myManager = null;
String theContainer = "container.dbxml";
// Open an XmlManager and an XmlContainer.
try {
myManager = new XmlManager();
myContainer = myManager.openContainer(theContainer);
} catch (XmlException e) {
// Error handling goes here
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
请注意,我们可以通过检查基础错误代码来获取有关XmlException原因的更多信息。
使用XmlException.getErrorCode()方法执行此操作。 有关通过此类可用的异常代码的详细信息,请参阅Berkeley
DB XML Javadoc。
在某些情况下,BDB XML应用程序抛出的异常可能包含的信息不足以允许我们调试错误源。 因此,创建自定义错误处理程序始终是个好主意。
一旦实现了错误处理程序,就可以使用EnvironmentConfig.setErrorHandler()让您知道BDB XML应用程序
例如,首先提供com.sleepycat.db.ErrorHandler的实现。 (这里我们提供了一个简单的类实现,仅用于说明目的)。
package dbxml.gettingStarted;
import com.sleepycat.db.Environment;
import com.sleepycat.db.ErrorHandler;
public class MyErrorHandler implements ErrorHandler
{
public void error(Environment env,
String errpfx,
String msg)
{
System.err.println(errpfx + " : " + msg);
}
}
然后将此类对象提供给EnvironmentConfig.setErrorHandler()
package dbxml.gettingStarted;
import com.sleepycat.db.Environment;
import com.sleepycat.db.EnvironmentConfig;
import com.sleepycat.dbxml.XmlException;
import com.sleepycat.dbxml.XmlManager;
import com.sleepycat.dbxml.XmlManagerConfig;
import java.io.File;
class doDbXml
{
public static void
main(String args[]) throws Throwable
{
Environment myEnv = null;
XmlManager myManager = null;
File envHome = new File("/export1/testEnv");
// Open an XmlManager
try {
// Set the error handler for this application
EnvironmentConfig envConf = new EnvironmentConfig();
MyErrorHandler meh = new MyErrorHandler();
envConf.setErrorHandler(meh);
myEnv = new Environment(envHome, envConf);
//XML管理器配置
XmlManagerConfig xmlManagerConfig=new XmlManagerConfig();
//XMl管理器设置容器是否自动打开
xmlManagerConfig.setAllowAutoOpen(false);
//XML管理器加载环境和XML管理器配置
myManager = new XmlManager(myEnv,xmlManagerConfig);
//myManager=new XmlManager(xmlManagerConfig);
} catch (XmlException e) {
// Error handling goes here
}
}
}
设置错误处理程序后,可以使用setLogLevel()和setLogCategory()控制BDB XML向该处理程序报告的信息量。
setLogLevel()
允许您指示要查看的日志记录级别(debug, info, warning, error或者all)。
setLogCategory()
允许您指示要为其发出日志消息的DB XML子系统的部分(indexer, query processor, optimizer, dictionary, container, or all )。
package dbxml.gettingStarted;
import com.sleepycat.db.Environment;
import com.sleepycat.db.EnvironmentConfig;
import com.sleepycat.dbxml.XmlException;
import com.sleepycat.dbxml.XmlManager;
import com.sleepycat.dbxml.XmlManagerConfig;
import java.io.File;
import static com.sleepycat.dbxml.XmlManager.CATEGORY_ALL;
import static com.sleepycat.dbxml.XmlManager.LEVEL_ALL;
class doDbXml
{
public static void
main(String args[]) throws Throwable
{
Environment myEnv = null;
XmlManager myManager = null;
File envHome = new File("/export1/testEnv");
// Open an XmlManager
try {
// Set the error handler for this application
EnvironmentConfig envConf = new EnvironmentConfig();
MyErrorHandler meh = new MyErrorHandler();
envConf.setErrorHandler(meh);
myEnv = new Environment(envHome, envConf);
//XML管理器配置
XmlManagerConfig xmlManagerConfig=new XmlManagerConfig();
//XMl管理器设置容器是否自动打开
xmlManagerConfig.setAllowAutoOpen(false);
//XML管理器设置环境和启用XMLManagerConfig
myManager = new XmlManager(myEnv,xmlManagerConfig);
//设置日志级别
myManager.setLogLevel(LEVEL_ALL, true);
//设置发出日志范围
myManager.setLogCategory(CATEGORY_ALL, true);
} catch (XmlException e) {
// Error handling goes here
}
}
}