当前位置: 首页 > 知识库问答 >
问题:

GlassFish 4.1.1 Spring 4.0.9,EclipseLink,PostgreSQL-标记为回滚的事务,没有任何信息

谢运良
2023-03-14

我想用EclipseLink和Spring在GlassFish 4.1.1上运行一个应用程序。我的数据库是PostgreSQL。下面是我的配置。当我尝试调用/facebookDebug方法时,我得到了“javax.transaction.RollbackException:标记为回滚的事务”,这不是很好的描述。请看我的配置。一切都好吗?我可以从服务器开始添加日志,也许你会在那里找到一些东西。

坚持不懈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="amleto-server-model" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>amleto-server-model</jta-data-source>
    <class>com.amleto.server.model.entities.FacebookDebug</class>
    <properties>
        <property name="eclipselink.logging.level" value="ALL" />
        <property name="eclipselink.logging.level.sql" value="ALL"/>
        <property name="eclipselink.logging.parameters" value="true" />
        <property name="eclipselink.logging.connection" value="true" />
        <property name="eclipselink.logging.session" value="true" />
        <property name="eclipselink.logging.thread" value="true" />
        <property name="eclipselink.logging.timestamp" value="true" />
        <property name="eclipselink.target-database" value="PostgreSQL" />
    </properties>
</persistence-unit>

上下文xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

<context:property-placeholder location="classpath:config.properties" ignore-unresolvable="true" />

<context:annotation-config />
<!--  controllers -->
<mvc:annotation-driven />

<context:component-scan base-package="com.amleto.server.model.entities" />
<context:component-scan base-package="com.amleto.server.services.controllers" />

<jpa:repositories base-package="com.amleto.server.model.repositories"/>

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="amleto-server-model"/>
</bean>

<tx:jta-transaction-manager />
<tx:annotation-driven/>

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
</beans>

FacebookDebug。JAVA

package com.amleto.server.model.entities;

import java.io.Serializable;
import javax.persistence.*;
import java.sql.Timestamp;

@Entity
@Table(name="facebook_debug")
@NamedQuery(name="FacebookDebug.findAll", query="SELECT f FROM FacebookDebug f")
public class FacebookDebug implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="facebook_debug_id")
private Integer facebookDebugId;

@Column(name="app_action")
private String appAction;

@Column(name="date_create")
private Timestamp dateCreate;

@Column(name="user_id")
private String userId;

public FacebookDebug() {
}

public Integer getFacebookDebugId() {
    return this.facebookDebugId;
}

public void setFacebookDebugId(Integer facebookDebugId) {
    this.facebookDebugId = facebookDebugId;
}

public String getAppAction() {
    return this.appAction;
}

public void setAppAction(String appAction) {
    this.appAction = appAction;
}

public Timestamp getDateCreate() {
    return this.dateCreate;
}

public void setDateCreate(Timestamp dateCreate) {
    this.dateCreate = dateCreate;
}

public String getUserId() {
    return this.userId;
}

public void setUserId(String userId) {
    this.userId = userId;
}

}

FacebookDebugRepository。JAVA

package com.amleto.server.model.repositories;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import com.amleto.server.model.entities.FacebookDebug;

@Repository
public interface FacebookDebugRepository extends CrudRepository<FacebookDebug, Integer> {

}

AMLETOCONTROLER。JAVA

package com.amleto.server.services.controllers;

import java.sql.Timestamp;
import java.util.GregorianCalendar;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.amleto.server.model.entities.FacebookDebug;
import com.amleto.server.model.repositories.FacebookDebugRepository;

@Controller
public class AmletoController {

@Autowired
FacebookDebugRepository repo;

@Transactional
@ResponseBody
@RequestMapping(value = "/facebookDebug", method=RequestMethod.GET)
public String facebookDebug(@RequestParam(value="action", required=true) String action, 
                            @RequestParam(value="userId", required=true) String userId) {
    String returnValue = "";

    FacebookDebug fb = new FacebookDebug();
    fb.setAppAction(action);
    fb.setUserId(userId);
    GregorianCalendar dateCreate = new GregorianCalendar();
    fb.setDateCreate(new Timestamp(dateCreate.getTimeInMillis()));

    repo.save(fb);

    return "Grazie.";
}

}

stacktrace:

共有1个答案

孟俊晖
2023-03-14

我找到了一个解决方案(这导致我犯了另一个错误,但这是向前迈出的一步)。

原来我必须将目标数据库值更改为“数据库”。有一个已知的Eclipse Link错误,除非参数的值等于“数据库”,否则它会引发异常。现在我有另一个问题,可以在这里找到。

 类似资料:
  • NamedQuery在大多数情况下都能正常工作,但有一种情况是错误发生时,日志文件中没有任何可见的通知。 事务被标记为状态回滚,但我不知道为什么。没有异常,没有调试消息,什么都没有。 在此场景中,与相同的NamedQuery的唯一区别是,在同一事务中,在几个步骤之前从表中删除了行。 这是Hibernate未能准备语句的相关Stacktrace: 由:org.hibernate.exception.

  • 我正在使用GlassFish4、Spring和PostgreSQL。我想将一个实体保存到数据库中,但当我尝试时,我得到了一个异常: 其实这对我来说毫无意义。我甚至不知道去哪里看,因为消息的描述性不是很强。您知道如何检索有关此异常的更多信息吗?或者援引它的理由是什么? persistence.xml: amletoController.java: facebookdebug.java: Shared

  • 我有这样的场景: 从IncomingMessage表中获取(读取和删除)记录 读取记录内容 在某些表中插入某些内容 如果在步骤1-3中出现错误(任何异常),请将错误记录插入OutgoingMessage表 否则,将成功记录插入OutgoingMessage表 因此步骤1、2、3、4应该在事务中,或者步骤1、2、3、5 但是当SqlCommandHandlerService.persist()抛出异

  • 问题内容: 我在@Transactional方法中提交事务时遇到问题: 当我从methodA()调用methodB()时,该方法成功通过,并且可以在日志中看到“确定”。但后来我明白了 在异常中完全缺少methodB的上下文-我想可以吗? methodB()中的某些内容将事务标记为仅回滚?我如何找到它?例如,有没有一种方法可以检查类似的东西-这样,我可以逐步检查方法并找到原因。 问题答案: 我终于明

  • 问题内容: 我在@Transactional方法中提交事务时遇到问题: 当我从methodA()调用methodB()时,该方法成功通过,并且可以在日志中看到“确定”。但后来我明白了 在异常中完全缺少methodB的上下文-我想这可以吗? methodB()中的某些内容将事务标记为仅回滚?我如何找到它?例如,是否有一种检查类似方法的方法-这样,我可以逐步检查方法并找到原因。 问题答案: 我终于明白

  • 问题内容: 我在@Transactional方法中提交事务时遇到问题: 当我从methodA()调用methodB()时,该方法成功通过,并且可以在日志中看到“确定”。但后来我明白了 在异常中完全缺少methodB的上下文-我想这可以吗? methodB()中的某些内容将事务标记为仅回滚?我如何找到它?例如,是否有一种检查类似方法的方法-这样,我可以逐步检查方法并找到原因。 问题答案: 当你将方法