Domanda

Sto usando Berkely DB e ho un errore che dice che le mutazioni sono mancanti. Che cosa significa questo?

Exception: com.sleepycat.persist.evolve.IncompatibleClassException: Mutation is missing to evolve class: TopMoveDAO.TopMoveClass version: 0 Error: java.lang.ClassNotFoundException: TopMoveDAO.TopMoveClasscom.sleepycat.persist.evolve.IncompatibleClassException: Mutation is missing to evolve class: TopMoveDAO.TopMoveClass version: 0 Error: java.lang.ClassNotFoundException: TopMoveDAO.TopMoveClass

a com.sleepycat.persist.impl.PersistCatalog. (PersistCatalog.java:365)  a com.sleepycat.persist.impl.Store. (Store.java:180)  a com.sleepycat.persist.EntityStore. (EntityStore.java:165)  a TopMoveDAO.TopMovePut.setup (TopMovePut.java:40)  a TopMoveDAO.TopMovePut.run (TopMovePut.java:59)  a TopMoveDAO.TopMovePut.main (TopMovePut.java:84)

package TopMoveDAO;

import java.io.File;
import java.util.Timer;
import java.util.TimerTask;

import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;

import com.sleepycat.persist.EntityStore;
import com.sleepycat.persist.StoreConfig; 

public class TopMovePut {

    //private static File envHome = new File("C:/dev/je-3.3.75/");
 private static File envHome = new File("C:/dev/db/berkeley");


    private Environment envmnt;
    private EntityStore store;
    private TopMoveDA sda; 


//Next we create a method that simply opens our database environment and entity store for us.

   // The setup() method opens the environment and store
    // for us.
    public void setup()
        throws DatabaseException {

        EnvironmentConfig envConfig = new EnvironmentConfig();
        StoreConfig storeConfig = new StoreConfig();

        envConfig.setAllowCreate(true);
        storeConfig.setAllowCreate(true);

        // Open the environment and entity store
        envmnt = new Environment(envHome, envConfig);
       store = new EntityStore(envmnt, "EntityStore", storeConfig);
    } 

//We also need a method to close our environment and store.

    // Close our environment and store.
    public void shutdown()
        throws DatabaseException {

        store.close();
        envmnt.close();
    } 



//Populate the entity store
private void run()
    throws DatabaseException {

    setup();

    // Open the data accessor. This is used to store
    // persistent objects.
    sda = new TopMoveDA(store);

    // Instantiate and store some entity classes

    PriceElement pe1 = new PriceElement();

    pe1.setSecCode("UNO");
    pe1.setLastPrice(1);

    sda.pIdx.put(pe1);

    shutdown();
} 

//main
public static void main(String args[]) {
    //SimpleStorePut ssp = new SimpleStorePut();
    TopMovePut tmp = new TopMovePut();
    try {
        //ssp.run();
     tmp.run();
    } catch (DatabaseException dbe) {
        System.err.println("TopMovePut: " + dbe.toString());
        dbe.printStackTrace();
    } catch (Exception e) {
        System.out.println("Exception: " + e.toString());
        e.printStackTrace();
    }
    System.out.println("All done - TopMovePut.");
}

} 
È stato utile?

Soluzione

Devi scrivere una mutazione di evolvere il database. L'eliminazione del database non risolverà il problema, aggirare solo (che va bene se non è ancora stato distribuito alla produzione, ma se non si vuole perdere i dati esistenti poi scrivere una mutazione.)

Alcune modifiche alle entità persistenti vengono gestiti automaticamente da Berkley db, come ad esempio l'aggiunta di un campo. Quelli che coinvolgono la cancellazione dei dati o ridenominazione di campi in genere richiedono di scrivere una mutazione esplicito. Quando si inizia a utilizzare le mutazioni si avrà anche per annotare i vostri soggetti con i numeri di versione, che le mutazioni farà riferimento a - anche se la mutazione è gestita automaticamente si dovrà incrementare il numero di versione. Quando si apportano modifiche strutturali importanti come l'utilizzo di una chiave primaria diversa, si dovrà fare un intero conversione negozio.

Fare attenzione quando si evolve un database in un ambiente replicato. Vi consiglierei vivamente di leggere il seguente:

http://www.oracle.com/technology/documentation/berkeley-db/je/java/com/sleepycat/persist/evolve/package-summary.html

Altri suggerimenti

È necessario eliminare il database esistente ogni volta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top