Pergunta

Eu estou usando Berkely DB e eu tenho um erro que diz que as mutações estão faltando. O que isso significa?

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

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

} 
Foi útil?

Solução

Você tem que escrever uma mutação para evoluir seu banco de dados. Excluindo o banco de dados não vai resolver o problema, apenas a contorná-la (o que é bom se você ainda não tenham implantado para produção, mas se você não quer perder seus dados existentes em seguida, escrever uma mutação.)

Algumas alterações às suas entidades persistentes são manipulados automaticamente por Berkeley DB, como a adição de um campo. Os que envolvem a exclusão de dados ou renomear campos geralmente requerem que você escreva uma mutação explícito. Quando você começar a usar mutações você também terá de anotar suas entidades com números de versão que as mutações se referem a - mesmo se a mutação é feita automaticamente você terá para incrementar o número da versão. Quando você fazer grandes mudanças estruturais, tais como a utilização de uma chave primária diferente, você terá que fazer uma conversão loja inteira.

Tome cuidado ao evoluir um banco de dados em um ambiente replicado. Gostaria de sugerir a leitura do seguinte:

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

Outras dicas

Você tem que eliminar o seu banco de dados existente de cada vez.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top