2009-05-23 2 views
0

Я использую Berkely DB, и у меня есть ошибка, в которой говорится, что мутации отсутствуют. Что это значит?Ошибка мутации в 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."); 
} 

} 

ответ

1

Вы должны написать мутацию, чтобы развить вашу базу данных. Удаление базы данных не решит проблему, только обойти ее (это нормально, если вы еще не развернули ее на производство, но если вы не хотите потерять свои существующие данные, тогда напишите мутацию.)

Некоторые изменения в вашей постоянные объекты обрабатываются автоматически Berkley db, например, добавление поля. Для включения явных мутаций требуется только удаление данных или переименование полей. Когда вы начинаете использовать мутации, вам также нужно будет аннотировать ваши сущности с номерами версий, на которые будут ссылаться мутации - даже если мутация обрабатывается автоматически, вам придется увеличивать номер версии. Когда вы делаете серьезные структурные изменения, например, используя другой первичный ключ, вам придется делать конверсию всего магазина.

Будьте внимательны при разработке базы данных в реплицированной среде. Я бы настоятельно рекомендую прочитать следующее:

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

+0

Ссылка: http://www.oracle.com/technology/documentation/berkeley-db/je/java/com/sleepycat/persist/evolve/package- summary.html недоступно. Новый - http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/persist/evolve/package-summary.html – Veniamin

-1

Вы должны удалить свою существующую базу данных каждый раз.

Смежные вопросы