【问题标题】:com.sleepycat.je.DatabaseNotFoundException Database not foundcom.sleepycat.je.DatabaseNotFoundException 找不到数据库
【发布时间】:2011-08-06 14:20:39
【问题描述】:

我有数据库 /home/panayk/Desktop/panag_3/panag_3.tld:

$ db_verify /home/panayk/Desktop/panag_3/panag_3.tld 
Verification of /home/panayk/Desktop/panag_3/panag_3.tld succeeded.

BerkeleyDB 拒绝打开它。

这是我的导入:

import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.serial.SerialBinding;
import com.sleepycat.bind.serial.StoredClassCatalog;
import com.sleepycat.collections.StoredMap;
import com.sleepycat.collections.TransactionRunner;
import com.sleepycat.collections.TransactionWorker;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;

这是我的代码:

final File file = new File(filename);

final String homeDirectoryName = file.getParent();
final File homeDirectory = new File(homeDirectoryName);

LOGGER.info("Opening environment in {}.", homeDirectoryName);

final EnvironmentConfig environmentConfig = new EnvironmentConfig();
environmentConfig.setTransactional(true);
environmentConfig.setAllowCreate(true);

final DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setTransactional(true);
dbConfig.setAllowCreate(false);

environment = new Environment(homeDirectory, environmentConfig);

LOGGER.info("Opening database in {}.", filename);
database = environment.openDatabase(null, filename, dbConfig);

catalog = new StoredClassCatalog(database);

final EntryBinding keyBinding = new SerialBinding(catalog, Object.class);
final EntryBinding valueBinding = new SerialBinding(catalog, Object.class);

map = new StoredMap(database, keyBinding, valueBinding, true);

这是日志:

15:55:54,498  INFO TLDImporter:38 - Opening environment in /home/panayk/Desktop/panag_3.
15:55:54,779  INFO TLDImporter:50 - Opening database in /home/panayk/Desktop/panag_3/panag_3.tld.

这里是个例外:

com.sleepycat.je.DatabaseNotFoundException: (JE 4.1.10) Database /home/panayk/Desktop/panag_3/panag_3.tld not found.
    at com.sleepycat.je.Environment.setupDatabase(Environment.java:790)
    at com.sleepycat.je.Environment.openDatabase(Environment.java:536)
    at gr.panayk.vinyls.importer.TLDImporter.<init>(TLDImporter.java:51)
    at gr.panayk.vinyls.persistence.HibernateEntityRegistry.initialize(HibernateEntityRegistry.java:36)
    ... 60 more

怎么了?该文件显然存在。

【问题讨论】:

    标签: java berkeley-db-je file-not-found


    【解决方案1】:

    来自http://www.javasourcecode.org/html/open-source/berkeleydb/berkeleydb-4.1.6/com/sleepycat/je/Environment.java.html

    /* No database. Create if we're allowed to. */
    if (dbConfig.getAllowCreate()) {
    
        /*
         * We're going to have to do some writing. Switch to a
         * writable locker if we don't already have one.  Note
         * that the existing locker does not hold the handle lock
         * we need, since the database was not found; therefore it
         * is OK to call operationEnd on the existing locker.
         */
        if (!isWritableLocker) {
            locker.operationEnd(OperationStatus.SUCCESS);
            locker = LockerFactory.getWritableLocker
                (this,
                 txn,
                 dbConfig.getTransactional(),
                 true,  // retainNonTxnLocks
                 autoTxnIsReplicated,
                 null);
            isWritableLocker  = true;
        }
    
        newDb.initNew(this, locker, databaseName, dbConfig);
    } else {
        /* We aren't allowed to create this database. */
        throw new DatabaseNotFoundException("Database " +
                                            databaseName +
                                            " not found.");
    }
    

    你已经设置了

    final DatabaseConfig dbConfig = new DatabaseConfig();
    dbConfig.setTransactional(true);
    dbConfig.setAllowCreate(false);
    

    setAllowCreate 为假。通过查看代码,这似乎是问题所在。

    【讨论】:

    • 我认为只有在数据库不存在时才需要 allowCreate。谢谢你的回答,我会试试然后接受。感谢您的耐心等待。
    猜你喜欢
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多