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

时间:2015-11-08 16:49:13

标签: spring postgresql glassfish eclipselink

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

的persistence.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>

context.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> {

}

AmletoController.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.";
}

}

堆栈跟踪:

  

[2015-11-08T17:33:46.604 + 0100] [glassfish 4.1] [警告] [] [javax.enterprise.web] [tid:_ThreadID = 29 _ThreadName = http-listener-1(4)] [ timeMillis:1447000426604] [levelValue:900] [[     StandardWrapperValve [spring-dispatcher]:servlet spring-dispatcher的Servlet.service()抛出异常   javax.transaction.RollbackException:标记为回滚的事务。       at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:445)       at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:854)       at com.sun.enterprise.transaction.UserTransactionImpl.commit(UserTransactionImpl.java:212)       在org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1021)       在org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761)       在org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)       在org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:485)       at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291)       at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)       在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)       at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)       在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)       at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor $ CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:119)       在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)       在org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)       在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)       在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)       在com.sun.proxy。$ Proxy229.save(未知来源)       在com.amleto.server.services.controllers.amletoController.facebookDebug(amletoController.java:58)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)       在java.lang.reflect.Method.invoke(Method.java:601)       在org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)       在org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)       在org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:111)       在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806)       在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729)       在org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)       在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)       在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)       在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)       在org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)       在javax.servlet.http.HttpServlet.service(HttpServlet.java:687)       在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)       在javax.servlet.http.HttpServlet.service(HttpServlet.java:790)       在org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)       在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)       在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)       在org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)       在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)       在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)       在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)       在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)       在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)       在org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)       在com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)       在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)       在org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)       在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)       at com.sun.enterprise.v3.services.impl.ContainerMapper $ HttpHandlerCallable.call(ContainerMapper.java:459)       at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)       在org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)       在org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)       在org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)       在org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute(ExecutorResolver.java:119)       在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)       在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)       在org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)       在org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)       在org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)       在org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)       在org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)       在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)       在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:56)       在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)       在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:591)       在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:571)       在java.lang.Thread.run(Thread.java:722)   ]

1 个答案:

答案 0 :(得分:0)

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

事实证明,我必须将目标数据库值更改为&#34;数据库&#34;。有一个已知的EclipseLink错误会抛出异常,除非参数的值等于&#34;数据库&#34;。现在我有另一个问题可以找到here