如何在Liberty core 8.5上的MFPF V7.1 Java适配器中使用JPA修复PersistenceException?

如何在Liberty core 8.5上的MFPF V7.1 Java适配器中使用JPA修复PersistenceException?,java,jpa,ibm-mobilefirst,mobilefirst-adapters,Java,Jpa,Ibm Mobilefirst,Mobilefirst Adapters,我想在如下环境中使用Java适配器中的JPA MFPF V7.1 WAS Liberty core 8.5.5.5(独立) DB2V10.1.0.872 我通过eclipse向导创建了JPA项目和实体类,并将MFPF项目war*/WebContent/WEB-INF/lib*作为jar。 这个jar包括实体类和处理实体类。但是,这不起作用。 你能告诉我如何解决这个问题吗 问题 运行此语句并导致异常。 javax.persistence.PersistenceException:提供程序错误。

我想在如下环境中使用Java适配器中的JPA

  • MFPF V7.1
  • WAS Liberty core 8.5.5.5(独立)
  • DB2V10.1.0.872
我通过eclipse向导创建了JPA项目和实体类,并将MFPF项目war*/WebContent/WEB-INF/lib*作为jar。 这个jar包括实体类和处理实体类。但是,这不起作用。 你能告诉我如何解决这个问题吗

问题
运行此语句并导致异常。 javax.persistence.PersistenceException:提供程序错误。提供者:org.apache.openjpa.persistence.PersistenceProviderImpl

EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPAProject2");
代码
jar中的实体类

package model;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name="USERS")
@NamedQuery(name="User.findAll", query="SELECT u FROM User u")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String firstname;
private String lastname;

@Column(name="\"PASSWORD\"")
private String password;

@Id
@Column(name="\"USERID\"")
private String userid;
public class Calljpa {
public String getData(String uid){
try {
EntityManagerFactory factory =ersistence.createEntityManagerFactory("JPAProject2");
EntityManager entityManager = factory.createEntityManager();
     EntityTransaction tx = entityManager.getTransaction();

     System.out.println("find start");
     tx.begin();
     User user = entityManager.find(User.class, "001");
     tx.commit();
     System.out.println("User id = " + user.getUserid()+"  firstName = "+user.getFirstname());   
     return "Hello " + user.getLastname();

  } catch (Exception e) {
     System.out.println(e);
     return "error ";
  } 
}
在jar中处理实体类

package model;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name="USERS")
@NamedQuery(name="User.findAll", query="SELECT u FROM User u")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String firstname;
private String lastname;

@Column(name="\"PASSWORD\"")
private String password;

@Id
@Column(name="\"USERID\"")
private String userid;
public class Calljpa {
public String getData(String uid){
try {
EntityManagerFactory factory =ersistence.createEntityManagerFactory("JPAProject2");
EntityManager entityManager = factory.createEntityManager();
     EntityTransaction tx = entityManager.getTransaction();

     System.out.println("find start");
     tx.begin();
     User user = entityManager.find(User.class, "001");
     tx.commit();
     System.out.println("User id = " + user.getUserid()+"  firstName = "+user.getFirstname());   
     return "Hello " + user.getLastname();

  } catch (Exception e) {
     System.out.println(e);
     return "error ";
  } 
}
persistent.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="JPAProject2" transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>jdbc/db2</non-jta-data-source>
<class>model.User</class>
<properties>
     <property name="javax.persistence.jdbc.url" value="jdbc:db2://localhost:50000/SAMPLE:retrieveMessagesFromServerOnGetMessage=true;"/>
     <property name="javax.persistence.jdbc.user" value="db2admin"/>
     <property name="javax.persistence.jdbc.password" value="worklight"/>
     <property name="javax.persistence.jdbc.driver" value="com.ibm.db2.jcc.DB2Driver"/>
  </properties>
</persistence-unit>
</persistence>

jdbc/db2
模型用户
Server.xml

<feature>jdbc-4.0</feature>
<feature>servlet-3.0</feature>
<feature>ssl-1.0</feature>
<feature>beanValidation-1.0</feature>
<feature>cdi-1.0</feature>
<feature>jpa-2.0</feature>
-----
<application id="TestJA" name="TestJA" location="TestJA.war" type="war">
    <classloader delegation="parentLast">
        <privateLibrary id="worklightlib_TestJA">
            <fileset dir="${shared.resource.dir}/TestJA" includes="TestJA.jar"/>
            <fileset dir="${shared.resource.dir}/TestJA/lib" includes="worklight-jee-library.jar"/>
            <fileset dir="${wlp.install.dir}/lib" includes="com.ibm.ws.crypto.passwordutil_*.jar"/>
          </privateLibrary>
    </classloader>
</application>
<library id="TestWeb/DB2Lib">
    <fileset dir="C:/SQLLIB/java" includes="db2jcc4.jar,db2jcc_license_cu.jar"/>
</library>
<dataSource id="db2" jndiName="jdbc/db2">
<jdbcDriver libraryRef="TestWeb/DB2Lib"/>
<properties.db2.jcc databaseName="SAMPLE" serverName="localhost" portNumber="50000"/>
</dataSource>
jdbc-4.0
servlet-3.0
ssl-1.0
beanValidation-1.0
cdi-1.0
jpa-2.0
-----

正如我从您的问题中了解到的,所有这些代码都在项目中服务器/lib的JAR中

如果是这样,请检查persistence.xml是否位于JAR根目录下的META-INF文件夹下。 原因是,
Persistence.createEntityManagerFactory
在类路径中每个项的根目录下的META-INF文件夹下查找Persistence.xml