Java OSGi和Gemini JPA:使用配置管理员

Java OSGi和Gemini JPA:使用配置管理员,java,configuration,osgi,eclipse-gemini,Java,Configuration,Osgi,Eclipse Gemini,为了学习,我正在编写一个小的OSGi应用程序。 我成功地将Gemini JPA和DBAccess服务设置为使用JPA,只要我使用persistence.xml配置我的持久性单元,它就可以正常工作 然后我偶然发现,在运行时提供持久化单元配置似乎是一个非常棒的特性。但它不起作用。我尝试了完全相同的代码(对于独立配置),并执行了该代码,但框架中没有任何更改。据我所知,难道不应该有一个新的服务来提供新的持久性单元吗 我使用的是Equinox框架,gemini和dbaccess的所有必要捆绑包都已安装并运

为了学习,我正在编写一个小的OSGi应用程序。 我成功地将Gemini JPA和DBAccess服务设置为使用JPA,只要我使用persistence.xml配置我的持久性单元,它就可以正常工作

然后我偶然发现,在运行时提供持久化单元配置似乎是一个非常棒的特性。但它不起作用。我尝试了完全相同的代码(对于独立配置),并执行了该代码,但框架中没有任何更改。据我所知,难道不应该有一个新的服务来提供新的持久性单元吗

我使用的是Equinox框架,gemini和dbaccess的所有必要捆绑包都已安装并运行,ConfigurationAdmin捆绑包(
org.eclipse.Equinox.cm
)已安装并运行在我的代码执行点

我通过以下方式访问配置管理员:

ServiceReference<ConfigurationAdmin> s = context
            .getServiceReference(ConfigurationAdmin.class);
ConfigurationAdmin admin = context.getService(s);
servicerences=context
.getServiceReference(配置管理类);
ConfigurationAdmin=context.getService;

可能是启动顺序问题:必须在查找数据源以进行持久化之前创建配置。请尝试重新启动持久性捆绑包,或将持久性捆绑包的开始级别更改为更高级别,以便稍后启动


此外,可以方便地安装,以查看您的配置数据是否确实已在configuration manager中注册。

两者都是正确的。我可以在webconsole中看到已注册的配置,也看不到问题中所述的此配置的新Entitymanager工厂服务。也许您应该发布一些关于确切设置和设置属性的详细信息。我认为您仍然需要告诉JPA实现,需要为导出EMF设置捆绑包,因为这是您目前缺少的。是的,我认为可能是这样,但我不知道如何做到这一点。turotial明确指出,
…只有在持久性捆绑包中没有持久性描述符时才使用独立配置
根据您提到的文档,您必须指定
gemini.jpa.punit.bsn
属性。你做得对吗?这是我看到JPA实现完全忽略捆绑包的唯一明显原因。