1

スタンドアロンの Felix 4.0.2 OSGi ボックス内で組み込み Java DB インスタンスを使用する方法があると思います。ただし、全体をどのようにセットアップする必要があるかについての手がかりが見つからないようです。どの実装バンドルを使用する必要がありますか? どのように設定すればよいですか?

Glassfich 3.1.2のインストールから専用バンドルを取得するなど、かなりのことを試しましたが、何をしても、アプリに提供するフレームワークによって永続化マネージャーが登録されません。

それ以外の場合、私のコードはすべてのアカデミックな教訓に従い、ServiceTracker が登録されて EntityManagerFactory の登録について調べられますが、何も見つかりません... これが私の persistence.xml ファイルです:

<?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="com.julianware.toolbox.logbacktracker.pu"
    transaction-type="RESOURCE_LOCAL">
    <!-- mapping-file>META-INF/maintenance_orm.xml</mapping-file>
    <mapping-file>META-INF/vehicle_orm.xml</mapping-file -->

    <class>com.julianware.toolbox.logbacktracker.pu.LoggerEvent</class>

    <exclude-unlisted-classes>true</exclude-unlisted-classes>

    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:derby:database;create=true" />
        <property name="javax.persistence.jdbc.user" value="felix" />
        <property name="javax.persistence.jdbc.password" value="felix" />
    </properties>
</persistence-unit>

そして、私のアクティベーターの start() メソッド:

public void start(final BundleContext context) throws Exception {
    Filter filter = context.createFilter(String.format("(&(%s=%s)(%s=%s))",
        OBJECTCLASS, EntityManagerFactory.class.getName(),
        EntityManagerFactoryBuilder.JPA_UNIT_NAME, "com.julianware.toolbox.logbacktracker.pu")
    ); 
    entityManagerFactoryTracker = new ServiceTracker(context, filter,  new ServiceTrackerCustomizer() {

        @Override
        public void removedService(ServiceReference reference, Object service) {}

        @Override
        public void modifiedService(ServiceReference reference, Object service) {}

        @Override
        public Object addingService(ServiceReference reference) {
            logger.debug("Found Entity Manager Service reference.");
            entityManagerFactory = (EntityManagerFactory) context.getService(reference);
            return entityManagerFactory;
        }
    });
    entityManagerFactoryTracker.open();

}

最後に、私は JDK 7 を使用しています。Java DB の実装は、jdk インストールのものです。誰か何か知っていますか?

ありがとうございます。ジュリアン

4

1 に答える 1

0

よくわかりませんが、MavenCentralのDerbyを試すことができます。正しいOSGiメタデータが含まれている必要があります。

于 2012-07-02T09:27:32.437 に答える