Я работаю над интеграцией db4o в свой проект, и у меня есть несколько вопросов. Я прочитал руководство и попробовал несколько примеров, но я все еще не уверен, правильно ли я все понял. Пожалуйста, ответьте да / нет (или другими ответами, если есть вопросы, требующие этого: -))
1.) Использование ObjectContainer в качестве Singleton в приложении не рекомендуется, потому что, если разные транзакции работают с одним и тем же объектом, могут возникнуть конфликты.
2.) Поэтому для одновременных транзакций рекомендуется использовать встроенный сервер.
3.) При использовании встроенного сервера (локально) вы можете открывать (и закрывать) столько клиентов, сколько хотите, которые имеют свои собственные транзакции и кеш ссылок, чтобы они могли работать с одними и теми же объектами. НО - это все еще не безопасно для потоков, потому что два клиента могут работать с одним и тем же объектом, один клиент может изменить его, а другой не обновит.
4.) Поэтому - даже если вы работаете с разными клиентами, вам необходимо убедиться, что объекты, с которыми работают клиенты, всегда актуальны
5.) Вы можете убедиться в этом с помощью обратных вызовов или явного обновления. но использование обратных вызовов может означать большой сетевой трафик, а явное обновление сложно, потому что вам действительно нужно знать, когда обновлять какой объект - так что бы вы порекомендовали? и когда вы обновите объекты явно?
6.) Поскольку я пытаюсь написать DAO для db4o, я бы реализовал методы для открытия и закрытия сервера и открытия и закрытия клиентов. Я думаю, что сервер открыт только один раз в приложении, правильно? (Один сервер на приложение?)
7.) Вы бы порекомендовали ленивую инициализацию? так что только первый раз сервер необходим, он инициализируется.
8.) Вы бы открывали нового клиента для каждой транзакции?
9.) Если я работаю с несколькими транзакциями, но они не могут накладывать друг на друга, могу ли я использовать один ObjectContainer для всего проекта?
спасибо, что ответили: -)