在春分环境中,分开的持久性单位和应用于不同的OSGI捆绑包

发布于 2025-01-28 17:26:54 字数 4312 浏览 4 评论 0 原文

我已经在一个单独的捆绑包中实现了一个持久单位,包括 meta-inf/persistence.xml 。现在,我想在另一个插件中使用此捆绑包。但是,我无法实例化 entityManagerFactory

有关文件的内容,请参见下文。

什么有效

如果我将 meta-inf/persistence.xml 放入应用程序捆绑包中,以下是返回有效的 entityManagerFactory

EntityManagerFactory emf = new PersistenceProvider().createEntityManagerFactory("de.viate.muja.dao.jpa", <properties>);

什么不起作用

上面的行产生 null 如果 persistence.xml 仅在持久性捆绑包中。

eclipselink文档是指使用OSGI服务查找

context.getServiceReferences(EntityManagerFactory.class.getName(), "(osgi.unit.name=de.viate.muja.dao.jpa)");

这也不起作用。

在双子座页面上,有一个类 entityManagerFactoryBuilder 。不知道在OSGI上下文中定义了哪里!?

我该怎么做才能获得有效的服务参考?除了已经进口的那些(见下文)以及其中包括哪些捆绑包(请参见下文)(参见2022-03)?

另外:是否可以从持久性捆绑包中导入 persistence.xml

持久性捆绑包-Sustest.mg

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: de.viate.muja.dao.bundle
Bundle-Version: 1.0.0
DynamicImport-Package: *
Export-Package: de.viate.muja.dao;version="1.0.0";uses:="jakarta.persi
 stence,jakarta.persistence.metamodel,org.eclipse.persistence.descript
 ors.changetracking,org.eclipse.persistence.indirection,org.eclipse.pe
 rsistence.internal.descriptors,org.eclipse.persistence.internal.ident
 itymaps,org.eclipse.persistence.internal.weaving,org.eclipse.persiste
 nce.queries,org.eclipse.persistence.sessions"
Import-Package: jakarta.persistence;resolution:=optional,jakarta.persi
 stence.metamodel;resolution:=optional,java.beans;resolution:=optional
 ,java.lang;resolution:=optional,java.lang.invoke;resolution:=optional
 ,java.util;resolution:=optional,java.util.function;resolution:=option
 al,java.util.stream;resolution:=optional,org.eclipse.persistence.anno
 tations;resolution:=optional,org.eclipse.persistence.descriptors.chan
 getracking;resolution:=optional,org.eclipse.persistence.indirection;r
 esolution:=optional,org.eclipse.persistence.internal.descriptors;reso
 lution:=optional,org.eclipse.persistence.internal.identitymaps;resolu
 tion:=optional,org.eclipse.persistence.internal.jpa;resolution:=optio
 nal,org.eclipse.persistence.internal.weaving;resolution:=optional,org
 .eclipse.persistence.queries;resolution:=optional,org.eclipse.persist
 ence.sessions;resolution:=optional
Meta-Persistence: META-INF/persistence.xml
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=17))"

持久束 - persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
    <persistence-unit name="de.viate.muja.dao.jpa" transaction-type="RESOURCE_LOCAL">

    <class>[omitted for brevity]</class>

    <shared-cache-mode>NONE</shared-cache-mode>

    <properties>
      <property name="eclipselink.weaving" value="static"/>
    </properties>
  </persistence-unit>
</persistence>

应用程序捆绑包-Sustest.mf

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: de.viate.muja.ui
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-17
Bundle-ActivationPolicy: lazy
Require-Bundle: org.eclipse.osgi;bundle-version="3.17.200",
 org.osgi.service.jdbc;bundle-version="1.0.1",
 jakarta.persistence-api;bundle-version="3.0.0",
 org.eclipse.persistence.core;bundle-version="3.1.0",
 org.eclipse.persistence.asm;bundle-version="9.1.1",
 org.eclipse.persistence.jpa;bundle-version="3.1.0",
 org.eclipse.persistence.jpa.jpql;bundle-version="3.1.0",
 com.microsoft.sqlserver.mssql-jdbc;bundle-version="10.2.0",
 de.viate.muja.dao.bundle;bundle-version="1.0.0"

I have implemented a persistence unit including META-INF/persistence.xml in a separate bundle. Now I want to use this bundle in another plugin. However, I am not able to instantiate the EntityManagerFactory.

See below for the contents of the relevant files.

What works

If I put META-INF/persistence.xml into the application bundle than the following returns a valid EntityManagerFactory

EntityManagerFactory emf = new PersistenceProvider().createEntityManagerFactory("de.viate.muja.dao.jpa", <properties>);

What not works

The above line yields null if persistence.xml is only in the persistance bundle.

The EclipseLink documentation refers to Gemini with respect to OSGI. This site proposes the lookup using the OSGI services

context.getServiceReferences(EntityManagerFactory.class.getName(), "(osgi.unit.name=de.viate.muja.dao.jpa)");

This doesn't work too.

On the Gemini page there is a class EntityManagerFactoryBuilder. No idea where it is defined in OSGI context!?

What can I do to get a valid service reference? Which bundles are necessary in addition to those already imported (see below) and in which Eclipse (2022-03) feature are they included?

Alternatively: is there a way to import persistence.xml from the persistence bundle?

Persistence Bundle - MANIFEST.MG

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: de.viate.muja.dao.bundle
Bundle-Version: 1.0.0
DynamicImport-Package: *
Export-Package: de.viate.muja.dao;version="1.0.0";uses:="jakarta.persi
 stence,jakarta.persistence.metamodel,org.eclipse.persistence.descript
 ors.changetracking,org.eclipse.persistence.indirection,org.eclipse.pe
 rsistence.internal.descriptors,org.eclipse.persistence.internal.ident
 itymaps,org.eclipse.persistence.internal.weaving,org.eclipse.persiste
 nce.queries,org.eclipse.persistence.sessions"
Import-Package: jakarta.persistence;resolution:=optional,jakarta.persi
 stence.metamodel;resolution:=optional,java.beans;resolution:=optional
 ,java.lang;resolution:=optional,java.lang.invoke;resolution:=optional
 ,java.util;resolution:=optional,java.util.function;resolution:=option
 al,java.util.stream;resolution:=optional,org.eclipse.persistence.anno
 tations;resolution:=optional,org.eclipse.persistence.descriptors.chan
 getracking;resolution:=optional,org.eclipse.persistence.indirection;r
 esolution:=optional,org.eclipse.persistence.internal.descriptors;reso
 lution:=optional,org.eclipse.persistence.internal.identitymaps;resolu
 tion:=optional,org.eclipse.persistence.internal.jpa;resolution:=optio
 nal,org.eclipse.persistence.internal.weaving;resolution:=optional,org
 .eclipse.persistence.queries;resolution:=optional,org.eclipse.persist
 ence.sessions;resolution:=optional
Meta-Persistence: META-INF/persistence.xml
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=17))"

Persistence Bundle - persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
    <persistence-unit name="de.viate.muja.dao.jpa" transaction-type="RESOURCE_LOCAL">

    <class>[omitted for brevity]</class>

    <shared-cache-mode>NONE</shared-cache-mode>

    <properties>
      <property name="eclipselink.weaving" value="static"/>
    </properties>
  </persistence-unit>
</persistence>

Application Bundle - MANIFEST.MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: de.viate.muja.ui
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-17
Bundle-ActivationPolicy: lazy
Require-Bundle: org.eclipse.osgi;bundle-version="3.17.200",
 org.osgi.service.jdbc;bundle-version="1.0.1",
 jakarta.persistence-api;bundle-version="3.0.0",
 org.eclipse.persistence.core;bundle-version="3.1.0",
 org.eclipse.persistence.asm;bundle-version="9.1.1",
 org.eclipse.persistence.jpa;bundle-version="3.1.0",
 org.eclipse.persistence.jpa.jpql;bundle-version="3.1.0",
 com.microsoft.sqlserver.mssql-jdbc;bundle-version="10.2.0",
 de.viate.muja.dao.bundle;bundle-version="1.0.0"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文