2009-05-23 4 views
0

J'utilise Berkely DB et j'ai une erreur qui dit qu'il manque des mutations. Qu'est-ce que ça veut dire?Erreur de mutation dans Berkeley DB

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 

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

} 

Répondre

1

Vous devez écrire une mutation pour faire évoluer votre base de données. Suppression de la base de données ne résoudra pas le problème, seulement le contourner (ce qui est bien si vous n'avez pas encore déployé en production, mais si vous ne voulez pas perdre vos données existantes alors écrire une mutation.)

les entités persistantes sont gérées automatiquement par Berkley db, comme l'ajout d'un champ. Ceux qui impliquent la suppression de données ou le renommage de champs nécessitent généralement que vous écriviez une mutation explicite. Lorsque vous commencez à utiliser des mutations, vous devrez également annoter vos entités avec les numéros de version auxquels les mutations se rapporteront - même si la mutation est traitée automatiquement, vous devrez incrémenter le numéro de version. Lorsque vous effectuez des modifications structurelles majeures, telles que l'utilisation d'une clé primaire différente, vous devez effectuer une conversion de magasin complète.

Faites attention lors de l'évolution d'une base de données dans un environnement répliqué. Je suggère fortement la lecture de ce qui suit:

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

+0

Lien: http://www.oracle.com/technology/documentation/berkeley-db/je/java/com/sleepycat/persist/evolve/package- summary.html n'est pas disponible. Le nouveau est http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/persist/evolve/package-summary.html – Veniamin

-1

Vous devez supprimer votre base de données existante à chaque fois.

Questions connexes