2011-08-06 6 views
1

J'ai la base de données /home/panayk/Desktop/panag_3/panag_3.tld:com.sleepycat.je.DatabaseNotFoundException Database not found

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

BerkeleyDB refuse de l'ouvrir.

Voici mes importations:

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; 

Et voici mon code:

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); 

C'est le journal:

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. 

Et voici l'exception:

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 

Qu'est-ce qui ne va pas? Le fichier existe évidemment.

Répondre

0

De 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."); 
} 

Et vous avez défini

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

Le setAllowCreate est faux. Cela semble être le problème en regardant le code.

+0

Je pensais que allowCreate n'était nécessaire que si la base de données n'existait pas. Merci pour votre réponse, je vais l'essayer et ensuite l'accepter. Merci pour votre patience. –