0x02 Berkeley DB XMl Java版之自定义异常处理和Debug调试

万高畅
2023-12-01

在继续之前,查看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。

Debug调试BDB XML 应用程序

在某些情况下,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
        }
    }
} 
 类似资料: