Почему я не могу использовать один и тот же файл db4o из нескольких подключений?

Я просто подключаюсь к файлу базы данных db4o из 2 разных соединений со значением конфигурации LockDatabaseFile=false.

Когда я сохраняю объект из IObjectContainer, я не могу одновременно получить этот объект из другого IObjectContainer. Я фиксирую транзакцию после Store, но все равно не могу сразу получить этот объект из другого активного IObjectContainer.

В чем проблема?


person Ekin Ozcicekciler    schedule 20.11.2010    source источник


Ответы (2)


db4o не позволяет многократно открывать файл базы данных в режиме записи. С тем, что вы делаете, вы испортите файл базы данных. Вместо этого используйте режим клиент/сервер.

person Carl Rosenberger    schedule 21.11.2010

Во-первых, позвольте мне сказать, что этот вариант опасен. Это позволяет двум (или более) приложениям одновременно изменять файл базы данных: повреждение почти гарантировано.

Если я правильно понял, у вас есть 2 «клиентских» приложения, которые открывают базу данных (используя OpenFile()), верно?

Вы пробовали использовать режим CS?

Как вы проверяете существование объекта? С помощью запроса? (как выглядит ваш запрос?)

Как выглядит ваша конфигурация?

Лучший

person Vagaus    schedule 20.11.2010
comment
Привет! Да, я знаю, что это опасно :) Мое приложение является надстройкой для Internet Explorer. Когда вы открываете вкладку в IE, надстройка загружается. Когда вы открываете другую вкладку, она не может подключиться к БД. И тогда я использовал метод, который я описал выше, он работает, но есть некоторые проблемы.. - person Ekin Ozcicekciler; 21.11.2010
comment
Привет. Я никогда не писал надстройки для IE, но в этом случае я думаю, что гораздо более надежным решением было бы создать отдельный процесс, запускающий db4o в режиме CS, и подключаться к этому процессу с каждой вкладки. Когда IE закрывается, вы можете остановить этот процесс. - person Vagaus; 21.11.2010