我假设有一种方法可以在独立的Felix 4.0.2 OSGi框中使用嵌入式Java数据库实例。但是我似乎无法找到关于如何设置整个事情的任何线索:我应该使用哪些实现包?我该如何设置?
我尝试了很多东西,包括从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>
我的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数据库实现是jdk安装的实现。 有谁知道什么?
强烈的谢谢。 儒略
答案 0 :(得分:0)
我不确定,但你可以试试Maven Central的Derby。它应该包含正确的OSGi元数据。