我喜欢这个解决方案,这不是一个解决方案,而是一个替代方案。我决定使用EclipseLink 2.6.4(使用持久性2.1),并在pom.xml和persistence.xml上进行一些小的更改,我能够启动我的包。 考虑到我还在使用Karaf 4.1(Apache Felix)和Aries(JPA和Blueprint),我相信这个问题可能与我不再使用的库相关:OpenJPA(最有可能)或Geronimo JPA( JSR-317)。
对不起,现在没有足够的时间在OpenJPA上找到解决这个问题的方法,但我很着急。我希望这个解决方案可以帮助其他人解决同样的问题。
这是我当前的pom.xml(我添加了Jackson的库依赖项,因为我在我的服务中执行了一些JSON转换,你可能不需要):
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>xxx.persistence</artifactId> <groupId>bse.persistence</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <groupId>bse.jpa</groupId> <artifactId>zzz.yyy</artifactId> <packaging>bundle</packaging> <name>bse.jpa Bundle</name> <description>zzz.yyy OSGi bundle project.</description> <properties> <maven-bundle-plugin.version>3.3.0</maven-bundle-plugin.version> <osgi.version>6.0.0</osgi.version> </properties> <dependencies> <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.core</artifactId> <version>${osgi.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.osgi</groupId> <artifactId>osgi.cmpn</artifactId> <version>${osgi.version}</version> </dependency> <dependency> <groupId>org.osgi</groupId> <artifactId>osgi.enterprise</artifactId> <version>${osgi.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> <dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.7</version> <type>bundle</type> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.7</version> <type>bundle</type> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>javax.persistence</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.6.4</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.antlr</artifactId> <version>2.6.4</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.asm</artifactId> <version>2.6.4</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.jpql</artifactId> <version>2.6.4</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.core</artifactId> <version>2.6.4</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <version>2.6.4</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId> org.eclipse.persistence.jpa.modelgen.processor </artifactId> <version>2.6.4</version> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> <pluginManagement> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>${maven-bundle-plugin.version}</version> <extensions>true</extensions> <configuration> <archive> <manifestEntries> <Meta-Persistence>META-INF/persistence.xml</Meta-Persistence> <Bundle-Blueprint>OSGI-INF/blueprint/*.xml</Bundle-Blueprint> </manifestEntries> </archive> <manifestLocation>src/main/resources/META-INF</manifestLocation> <rebuildBundle>true</rebuildBundle> <instructions> <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> <Bundle-Version>${project.version}</Bundle-Version> <Bundle-Activator>bse.jpa.Activator</Bundle-Activator> <Import-Package>com.mysql.jdbc.jdbc2.optional, org.apache.felix.service.command, org.apache.karaf.shell.commands, org.apache.karaf.shell.console, org.eclipse.persistence.internal.weaving, org.eclipse.persistence.internal.descriptors, org.eclipse.persistence.queries, org.eclipse.persistence.descriptors.changetracking, org.eclipse.persistence.internal.identitymaps, org.eclipse.persistence.sessions, org.eclipse.persistence.internal.jpa.rs.metadata.model, org.eclipse.persistence.indirection, javax.sql, javax.persistence;version=2.0, javax.persistence.metamodel, javax.transaction, javax.transaction.xa, org.osgi.framework, org.osgi.util.tracker, *</Import-Package> <Export-Package>cbn.bse.jpa.persistence.entities, bse.jpa </Export-Package> <Meta-Persistence>META-INF/persistence.xml</Meta-Persistence> <Bundle-ManifestVersion>2</Bundle-ManifestVersion> <Include-Resource>src/main/resources</Include-Resource> <Bundle-Blueprint>OSGI-INF/blueprint/*.xml</Bundle-Blueprint> </instructions> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <maxmem>256M</maxmem> </configuration> </plugin> <plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <version>2.2.4</version> <executions> <execution> <id>eclipselink-jpa-metamodel</id> <goals> <goal>process</goal> </goals> <phase>generate-sources</phase> <configuration> <processors> <processor>org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor</processor> </processors> <compilerArguments>-Aeclipselink.persistencexml=${basedir}/src/test/resources/META-INF/persistence.xml</compilerArguments> <outputDirectory>${project.build.directory}/generated-sources</outputDirectory> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor </artifactId> <version>2.6.4</version> </dependency> </dependencies> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> </build> </project>
持久性(您可以将其更改为使用JTA与pax-jdbc-mysql轻松实现):
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="rrrr" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/rrrr)</non-jta-data-source> <class>Account</class> <class>Warehouse</class> <class>Widget</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="eclipselink.logging.level" value="WARNING"/> <property name="eclipselink.logging.level.sql" value="WARNING"/> <property name="eclipselink.logging.parameters" value="true"/> <property name="eclipselink.logging.timestamp" value="true"/> <property name="eclipselink.logging.session" value="true"/> <property name="eclipselink.logging.thread" value="true"/> <property name="eclipselink.logging.exceptions" value="true"/> <property name="eclipselink.session.include.descriptor.queries" value="true"/> <property name="eclipselink.weaving" value="true"/> </properties> </persistence-unit> </persistence>
有用的参考:
Luca Burgazzoli的Karaf例子(jpa)
Travis Steel使用Maven在Eclipse中生成EclipseLink JPA元模型