我想用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:
我找到了一个解决方案(这导致我犯了另一个错误,但这是向前迈出的一步)。
原来我必须将目标数据库值更改为“数据库”。有一个已知的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()中的某些内容将事务标记为仅回滚?我如何找到它?例如,是否有一种检查类似方法的方法-这样,我可以逐步检查方法并找到原因。 问题答案: 当你将方法