Использование EclipseLink JPA в OSGI (Караф)

Я использую EclipseLink в качестве реализации JPA (в KARAF). И используются следующие банки: -

install -s mvn:org.eclipse.persistence/org.eclipse.persistence.antlr/2.5.0
install -s mvn:org.eclipse.persistence/org.eclipse.persistence.asm/2.5.0
install -s mvn:org.eclipse.persistence/org.eclipse.persistence.core/2.5.0
install -s mvn:org.apache.geronimo.specs/geronimo-jpa_2.0_spec/1.1
install -s mvn:org.osgi/org.osgi.compendium/4.2.0
install -s mvn:org.osgi/org.osgi.enterprise/4.2.0
org.eclipse.gemini.dbaccess.derby_1.0.0.M1-incubation.jar
org.eclipse.gemini.jpa.weaving_1.0.0.RC1.jar
org.eclipse.gemini.jpa_1.0.0.RC1.jar

My persistence.xml is :-

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

    <persistence-unit name="resource" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>myPkg.entity.Resource</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" 
                /> <property name="javax.persistence.jdbc.url" value="jdbc:derby:DB;create=true" 
                />

            <!-- <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/D:\DB;create=true" /> -->


            <property name="javax.persistence.jdbc.user" value="test" />
            <property name="javax.persistence.jdbc.password" value="test" />
            <property name="eclipselink.logging.level" value="OFF" />

            <!-- EclipseLink should create the database schema automatically -->
            <property name="eclipselink.ddl-generation" value="create-tables" />
            <property name="eclipselink.ddl-generation.output-mode"
                value="database" />
            <property name="connection.autocommit" value="false" />
            <property name="eclipselink.persistence-context.flush-mode" value="commit" /> 
            <!-- <property name="eclipselink.allow-zero-id" value="true"/> -->
        </properties>
    </persistence-unit>
</persistence>

Но jar gemini.dbaccess.derby_1.0.0.M1-incubation остается в состоянии Installed, а gemini.jpa.weaving jar остается в разрешенном состоянии.

Перезапуск gemini.dbaccess.derby_1.0.0.M1-incubation дает следующую ошибку:-

Reason: Missing Constraint: Import-Package: org.apache.derby.client.am; version="0.0.0"

И мое приложение дает следующую ошибку: -

Could not find data source factory in registry: org.apache.derby.jdbc.ClientDriver

Я новичок в использовании eclipseLink в OSGI, что мне здесь не хватает?


person Manas Pratim Chamuah    schedule 29.04.2015    source источник


Ответы (3)


Выпущен Apache karaf 4.0.0, эта версия karaf обеспечивает поддержку eclipseLink.

feature:install eclipselink

Поэтому нет необходимости использовать внешние адаптеры для использования eclipseLink.

person Manas Pratim Chamuah    schedule 21.07.2015
comment
В каком репозитории есть функция eclipseLink? - person Timothy Vogel; 16.08.2015
comment
Команда feature:install чувствительна к регистру — feature:install eclipselink - person Timothy Vogel; 16.08.2015

Вот содержание манифеста org.eclipse.gemini.dbaccess.derby_1.0.0.M1-incubation.jar:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Gemini DBAccess (Incubation)
Bundle-SymbolicName: org.eclipse.gemini.dbaccess.derby
Bundle-Version: 1.0.0.M1-incubation
Bundle-Activator: org.eclipse.gemini.dbaccess.derby.Activator
Bundle-Vendor: Oracle Corporation
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Import-Package: javax.sql,
org.apache.derby.client.am,
org.apache.derby.jdbc,
org.osgi.framework;version="[1.3,2)",
org.osgi.service.jdbc;version="[1.0,2.0)"

Есть еще две неразрешенные зависимости от двоичных файлов Derby:

  • org.apache.derby.client.am
  • org.apache.derby.jdbc

У обоих нет номера версии, поэтому в сообщении указано 0.0.0.

Эти два пакета являются частью файла derbyclient.jar, доступного в виде пакета OSGi в двоичных файлах Derby. Проблема в том, что предложение Export-Package этого пакета предоставляет доступ только к пакету org.apache.derby.jdbc.

Простое решение — Комплект SpringSource-packed: предоставляет два необходимых пакета. Осторожно, он имеет дополнительную зависимость от API транзакций Java.

person bdulac    schedule 29.04.2015
comment
Так что мне делать..? мое приложение не работает - person Manas Pratim Chamuah; 29.04.2015
comment
Загрузите архив derby и разверните файл derbyclient.jar в своем контейнере. Он предоставит компонент JDBC в виде экспортированного пакета (предложение Export-Package в JAR MANIFEST.MF). Это должно решить вашу ошибку. Затем вы можете столкнуться с проблемой зависимости от пакета org.apache.derby.client.am, поскольку он доступен в пути к классам, но не отображается в предложении Export-Package. В таком случае вам может потребоваться переупаковать пакет, но это другая история. - person bdulac; 29.04.2015
comment
SpringSource-packed готов к использованию: он предоставляет два необходимых пакета. - person bdulac; 29.04.2015

Прежде всего, убедитесь, что у вас установлена ​​функция регионов с Karaf, потому что, если вы используете версию ‹ 4 (еще не выпущенную), реализация Apache Aries Blueprint устанавливается по умолчанию. Так что если вы хотите придерживаться Близнецов, это будет мешать. Поэтому убедитесь, что у вас установлены регионы. Во-вторых, я думаю, что есть функция для установки пакетов eclipse-link. Возможно, вы захотите взглянуть на него, чтобы выровнять правильные пакеты.

Если вы будете придерживаться реализации Aries Blueprint, то все будет еще проще. Просто установите следующие функции:

feature:install jpa jta jndi 

и если вы хотите использовать Derby, возможно, вы также захотите установить функцию jdbc. Это даст вам набор команд для подключения к базе данных и/или создания источника данных. Если вы используете команды источника данных, вы можете создать источник данных для базы данных дерби, который при необходимости установит правильные рабочие банки клиента дерби.

person Achim Nierbeck    schedule 30.04.2015