2014-10-06 2 views
0

Я пытаюсь добавить Hibernate в качестве зависимости моего пакета OSGi, используя Maven. В моем файле POM у меня есть:Использование Hibernate с OSGi и Maven

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-osgi</artifactId> 
    <version>4.3.6.Final</version> 
</dependency> 

Однако, когда я бежал, что я получил ошибку:

org.osgi.framework.BundleException: неразрешенное ограничение в расслоении org.hibernate.core [8] : Невозможно разрешить 8.0: отсутствует требование [8.0] osgi.wiring.package; (& (osgi.wiring.package = javax.transaction.xa) (версия> = 1.1.0) (! (Версия> = 2.0.0))) [вызвано: Не удалось разрешить 15.0: отсутствует требование [15.0] osgi .wiring.package; (Osgi.wiring.package = javax.enterprise.context)]

Поэтому я добавил еще одну зависимость для javax.enterprise.context:

<dependency> 
    <groupId>javax.enterprise</groupId> 
    <artifactId>cdi-api</artifactId> 
    <version>1.2</version> 
</dependency> 

, которая решала предыдущую ошибку, но приведет к другой ошибке:

Auto-properties install: file: ///path/to/project/hibernate/target/bundles/javax.inject-1.jar (org.osgi.framework.BundleException: не удалось создать объект пакета. Java .lang.IndexOutOfBoundsException)

И теперь я не могу решить эту проблему или даже выяснить, что ее вызывает. Я использую Apache Felix.

ответ

3

Это не сработает. Если вы хотите использовать Hibernate в OSGi, вам понадобится пакет, который фактически предоставит необходимые интерфейсы в пакетах osgi. Для вашего текущего случая использования я бы предложил использовать Karaf и установить функции JPA/JTA для Apache Aries. Karaf - контейнер OSGi с множеством зависимостей, разрешенных и простых в установке. Чтобы использовать Karaf с JPA просто сделать следующее

features:install jpa 
features:install jta 
features:install hibernate 

с тем, что вы должны быть настроены на использование спящего режима в контейнере OSGi. Другим подходом было бы установить все необходимые пакеты для запуска проекта osgi с поддержкой hibernate и jpa/jta. Для получения списка этих файлов обратитесь к соответствующим файлам функций. Доступно по адресу Karaf