Web services 向REST应用程序错误添加持久性
如何在REST应用程序中使用持久性? 我想使用@Inject和@PersistenceUnit注释来实例化我需要的PersistencyManager对象, 当我调用REST服务的持久性功能时,我得到一个错误:Web services 向REST应用程序错误添加持久性,web-services,rest,persistence,Web Services,Rest,Persistence,如何在REST应用程序中使用持久性? 我想使用@Inject和@PersistenceUnit注释来实例化我需要的PersistencyManager对象, 当我调用REST服务的持久性功能时,我得到一个错误: [2014-03-15 05:05:45,472] Artifact CubieboardGPIO:war: Error during artifact deployment. See server log for details. [2014-03-15 05:05:45,473] A
[2014-03-15 05:05:45,472] Artifact CubieboardGPIO:war: Error during artifact deployment. See server log for details.
[2014-03-15 05:05:45,473] Artifact CubieboardGPIO:war: javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is:
org.apache.openejb.OpenEJBRuntimeException: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/]]
这是我的休息:
@Inject
private PersistenceManager persistenceManager;
@GET
@Path("/activate")
public String activate(@QueryParam("pin") int pin) {
persistenceManager = new PersistenceManager();
// URI : /cubieboard/gpio/activate?pin=67
String[] messages = _activate(pin);
StringBuilder sb = new StringBuilder();
sb.append(ConfigurationManager.getConfiguration("ACTIVATE_MESSAGE")+"\n");
sb.append("Persistence:\t"); sb.append(messages[0]); sb.append("\n");
sb.append("Terminal Response:\t"); sb.append(messages[1]); sb.append("\n");
return sb.toString();
}
这是PersisteneManager:
@Stateless
public class PersistenceManager {
@PersistenceUnit(name = "cubieDB")
private static EntityManagerFactory factory;
private EntityManager em;
public PersistenceManager(){
// factory = Persistence.createEntityManagerFactory(ConfigurationManager.getConfiguration("PERSISTENCE_UNIT_NAME"));
// factory = Persistence.createEntityManagerFactory("cubieDB");
em = factory.createEntityManager();
}
public List<Operation> getAllOperations() {
Query q = em.createQuery("SELECT op FROM Operation op");
List<Operation> ops = q.getResultList();
return ops;
}
public void persist(Operation operation) {
em.getTransaction().begin();
em.persist(operation);
em.getTransaction().commit();
}
public void deleteAll(){
em.getTransaction().begin();
Query q = em.createNativeQuery("DELETE FROM Operation");
q.executeUpdate();
em.getTransaction().commit();
}
@Override
protected void finalize() throws Throwable {
super.finalize();
em.close();
}
}
@无状态
公共类持久性管理器{
@PersistenceUnit(name=“cubieDB”)
私营静态实体管理工厂;
私人实体管理者;
公共持久性管理器(){
//factory=Persistence.createEntityManagerFactory(ConfigurationManager.getConfiguration(“Persistence\u UNIT\u NAME”);
//factory=Persistence.createEntityManagerFactory(“cubieDB”);
em=factory.createEntityManager();
}
公共列表getAllOperations(){
Query q=em.createQuery(“从操作op中选择op”);
List ops=q.getResultList();
返回操作;
}
公共作废持久化(操作){
em.getTransaction().begin();
em.persist(操作);
em.getTransaction().commit();
}
public void deleteAll(){
em.getTransaction().begin();
Query q=em.createNativeQuery(“从操作中删除”);
q、 executeUpdate();
em.getTransaction().commit();
}
@凌驾
受保护的void finalize()抛出可丢弃的{
super.finalize();
em.close();
}
}
这是我的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="2.1">
<persistence-unit name="cubieDB" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.sakhoshdel.cubieboard.gpio.persistence.Operation</class>
<properties>
<!--<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>-->
<property name="eclipselink.ddl-generation" value="create-tables"/>
<!--<property name="javax.persistence.schema-generation-action" value="drop-and-create"/>-->
<!--<property name="javax.persistence.schema-generation-target" value="database-and-scripts"/>-->
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:derby:cubieDB;create=true" />
</properties>
</persistence-unit>
</persistence>
org.eclipse.persistence.jpa.PersistenceProvider
com.sakhoshdel.cubieboard.gpio.persistence.Operation
当我从一个普通类调用持久性功能时,它也会运行。但当我想要部署它时,我会得到一个错误。我正在使用TomEE作为应用服务器
谢谢不应该使用ejb构造函数(在最新版本中甚至不应该调用)。也不建议注入静电场 最后,可能只是使用一个jta持久化单元并删除em.getTransaction调用 旁注:tomee附带了openjpa,所以如果需要,您需要提供eclipselink