Я пытаюсь обеспечить постоянство в среде OSGi (Karaf работает с Felix) с максимально возможной модульностью. Я выбрал JDO из-за его дополнительных функций (в основном группы выборки) вместо JPA. Реализация является Datanucleus. Я использую Maven для создания всего проекта.
Поскольку у меня не было опыта работы с JDO или OSGi, было довольно сложно заставить работать любой из них. В настоящее время я могу сохранять JDO в среде Java SE (модульные тесты работают без проблем), и я знаю, как предоставлять услуги в среде OSGi с помощью контейнера чертежей. Но я не могу заставить эти две вещи работать вместе. У меня проблемы с загрузкой классов.
Мне не удалось создать даже простое приложение, которое могло бы сохранять JDO на Karaf (я пытался следовать этот учебник, но он использует Spring DM, и я не смог переписать его для использования схемы OSGi).
Меня больше всего смущает:
- Какое значение следует установить для свойства datanucleus.primaryClassLoader?
- Какой загрузчик классов передать в качестве аргумента методу JDOHelper.getPersistenceManagerFactory?
- Какие пакеты явно импортировать с помощью maven-bundle-plugin? (похоже, могут потребоваться как минимум javax.jdo, org.datanucleus.api.jdo и org.osgi.framework)
- Что нужно другим пакетам, кроме ссылки на PersistenceManagerFactory?
Кроме того:
- Можно ли отделить информацию о сохранении от классов значений? Если я правильно понимаю, это было бы возможно только при использовании улучшения во время выполнения, что было бы очень сложно, если вообще выполнимо.
- Можно ли определить взаимозависимые классы, поддерживающие сохраняемость, в нескольких пакетах? Например, определить пользователей в одном пакете и их адреса в другом?
Я был бы очень признателен за пример простого проекта с несколькими пакетами, который заботится о сохранении, используя только Datanucleus, JDO API и схему OSGi.
Спасибо