Pregunta

Estoy usando Berkeley DB y tengo un error que dice que las mutaciones están desaparecidos. ¿Qué significa esto?

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)  en com.sleepycat.persist.impl.Store. (Store.java:180)  en com.sleepycat.persist.EntityStore. (EntityStore.java:165)  en TopMoveDAO.TopMovePut.setup (TopMovePut.java:40)  en TopMoveDAO.TopMovePut.run (TopMovePut.java:59)  en 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.");
}

} 
¿Fue útil?

Solución

Tienes que escribir una mutación de evolucionar su base de datos. La eliminación de la base de datos no va a resolver el problema, sólo evitarlo (lo cual está bien si aún no ha distribuido a la producción, pero si no quiere perder los datos existentes a continuación, escribir una mutación.)

Algunos cambios en sus entidades persistentes son manejados automáticamente por Berkeley DB, tales como la adición de un campo. Los que implican eliminar datos o cambiar el nombre de los campos por lo general requieren que se escriba una mutación explícita. Cuando empiece a usar las mutaciones que también tendrá que anotar sus entidades con números de versión, que las mutaciones se referirá a - incluso si la mutación se maneja automáticamente tendrá que incrementar el número de versión. Cuando realiza cambios estructurales importantes como el uso de una clave principal diferente, usted tendrá que hacer una conversión de toda la tienda.

Tenga cuidado al evolucionar una base de datos en un entorno replicado. Yo fuertemente sugeriría leer lo siguiente:

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

Otros consejos

Hay que eliminar su base de datos existente en cada ocasión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top