java - 从 Felix 内部嵌入 Java DB?

标签 java database apache-felix

我假设有一种方法可以在独立的 Felix 4.0.2 OSGi 盒子中使用嵌入式 Java DB 实例。然而,我似乎找不到任何关于如何设置整个事情的线索:我应该使用什么实现包?我该如何设置?

我尝试了很多事情,包括从 glassfich 3.1.2 安装中获取专用 bundle ,但无论我做什么,框架都不会注册持久性管理器来为我的应用程序提供。

我的代码遵循所有学术规则,注册了一个 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>

还有我的 Activator 的 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 安装的实现。 有人知道吗?

非常感谢。 朱利安

最佳答案

我不确定,但您可以尝试 Maven Central 的 Derby。它应该包含正确的 OSGi 元数据。

关于java - 从 Felix 内部嵌入 Java DB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290463/

相关文章:

java - 从给定句子中提取所有单词并打印它们及其辅音计数

java - 查找双向链表中的最小元素不起作用

java - 如何制作搜索并行数组的方法?

java - 为什么我的 Karaf OSGI 包标记为不满意,当所有引用都满足时?

java - 如何将字符串转换为字节

java - 如何计算数组列包含元素的行

mysql - MySQL中自动递增ID字段的最小长度

database - 两阶段提交 : availability, 可伸缩性和性能问题

java - 适用于初学者的OSGi教程,具有最新的工具版本

java - 跨 OSGi 包添加服务方面