Работает ли greendao в многопроцессорной среде?
Является greendao
предназначен для работы в многопроцессорной среде?
Просматривая исходный код, он не поддерживает многопроцессорную среду из-за способа обработки кэширования и некоторых других вещей. Я ищу подтверждение или более подробную информацию от разработчика.
С нашим текущим тестированием у нас это отлично работает в течение 1 процесса с несколькими потоками. Однако, когда мы представляем отдельный процесс, обращающийся к одной и той же базе данных, мы постоянно получаем database is locked
исключение.
Наш тест запускает два разных процесса, которые запускают два потока, которые генерируются случайным образом daos
в ту же базу данных. И у нас есть третий процесс, который запускает два потока, которые постоянно загружают все daos
из той же базы данных.
Failure 5 (database is locked) on 0x2d3050 when executing 'BEGIN EXCLUSIVE;'
04-09 14:41:27.161: W/dalvikvm(20745): threadid=10: thread exiting with uncaught exception (group=0x40018560)
04-09 14:41:27.161: W/dalvikvm(20745): threadid=9: thread exiting with uncaught exception (group=0x40018560)
04-09 14:41:27.161: I/Process(20745): Sending signal. PID: 20745 SIG: 9
04-09 14:41:27.161: E/AndroidRuntime(20745): FATAL EXCEPTION: Thread-11
04-09 14:41:27.161: E/AndroidRuntime(20745): android.database.sqlite.SQLiteException: database is locked: BEGIN EXCLUSIVE;
04-09 14:41:27.161: E/AndroidRuntime(20745): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
04-09 14:41:27.161: E/AndroidRuntime(20745): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1772)
04-09 14:41:27.161: E/AndroidRuntime(20745): at android.database.sqlite.SQLiteDatabase.beginTransactionWithListener(SQLiteDatabase.java:536)
04-09 14:41:27.161: E/AndroidRuntime(20745): at android.database.sqlite.SQLiteDatabase.beginTransaction(SQLiteDatabase.java:490)
04-09 14:41:27.161: E/AndroidRuntime(20745): at de.greenrobot.dao.AbstractDao.executeInsert(AbstractDao.java:344)
04-09 14:41:27.161: E/AndroidRuntime(20745): at de.greenrobot.dao.AbstractDao.insert(AbstractDao.java:293)
04-09 14:41:27.161: E/AndroidRuntime(20745): at abc.def.ghi.MyDao.persist(MyDao.java:342)
04-09 14:41:27.161: E/AndroidRuntime(20745): at abc.def.ghi.persistservice2.PersistThread.run(PersistThread.java:36)