Transakcja nie jest commitowana

0

Witajcie,
Mam problem ze springiem i jego repozytoriami. Poniżej mój kod:

public interface PostRepository extends JpaRepository<Post, Integer> {
}
public class PostServiceImpl implements PostService {
    @Autowired
    private PostRepository postRepository;

    @Transactional
    @Override
    public void savePost(Post post) {
        this.postRepository.save(post);
    }
}

Kod działał i działa na tomcacie 8 na windowsie. Po przesiadce na linuxa z tą samą wersją tomcata, kod nie działa.
Logowanie mam ustawione na poziomie DEBUG.
Wykonując metodę savePost() nie pojawia się na logach zapytanie INSERT wstawiające dane do bazy (zgaduje że też nie jest wykonywane ponieważ dane nie sa modyfikowane). Tak samo jest z DELETE i UPDATE. Wykonywane są tylko zapytania SELECT.
Po zamianie save() na saveAndFlush() dostaję Exception:

javax.persistence.TransactionRequiredException: no transaction is in progress

Logując się tekstowym clientem MySQL i wpisując zapytanie z palca wszystko działa poprawnie

Liczę na waszą pomoc :)
Pozdrawiam

0

Deployowane na Mac OS X tez działa.

0

Jaka wersja Springa, konfiguracje masz adnotacjami czy XML?

patrzyłeś na to?
http://stackoverflow.com/a/3840740
http://stackoverflow.com/a/28950767

0

Na obydwa patrzyłem, skanowanie komponentów warstwy serwisowej mam w tym samym kontekście co tx:annotation-driven/.
Spring 4.2.2

0

może pokaż konfig i jaka wersja Linuxa, mysql.

0

Z Windowsa i z Linuxa łącze się tej samej bazy.
Ubuntu Server 14.04
Moja konfiguracja:

<context:component-scan base-package="pl.zaprogramowany.service.impl"/>

    <jpa:repositories base-package="pl.zaprogramowany.repository"/>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://192.168.1.126:3306/cms"/>
        <property name="username" value="cms"/>
        <property name="password" value="abs"/>
    </bean>

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="packagesToScan" value="pl.zaprogramowany.entity"/>
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="database" value="MYSQL"/>
                <property name="showSql" value="true"/>
                <property name="generateDdl" value="true"/>
                <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            </bean>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.enable_lazy_load_no_trans">true</prop>
            </props>
        </property>
    </bean>

    <tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager"/>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
0

Poniżej stacktrade błędu:

javax.persistence.TransactionRequiredException: no transaction is in progress
	org.hibernate.jpa.spi.AbstractEntityManagerImpl.checkTransactionNeeded(AbstractEntityManagerImpl.java:1136)
	org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1297)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:497)
	org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:344)
	com.sun.proxy.$Proxy98.flush(Unknown Source)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:497)
	org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:293)
	com.sun.proxy.$Proxy98.flush(Unknown Source)
	org.springframework.data.jpa.repository.support.SimpleJpaRepository.flush(SimpleJpaRepository.java:486)
	org.springframework.data.jpa.repository.support.SimpleJpaRepository.saveAndFlush(SimpleJpaRepository.java:454)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:497)
	org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:475)
	org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:460)
	org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:432)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
	org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
	org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	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.$Proxy128.saveAndFlush(Unknown Source)
	pl.zaprogramowany.service.impl.PostServiceImpl.save(PostServiceImpl.java:58)
	pl.zaprogramowany.service.impl.PostServiceImpl$$FastClassBySpringCGLIB$$12bd7c85.invoke(<generated>)
	org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
	org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
	org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
	org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
	org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
	pl.zaprogramowany.service.impl.PostServiceImpl$$EnhancerBySpringCGLIB$$2b6f8a98.save(<generated>)
	pl.zaprogramowany.controller.PostController.postPost(PostController.java:243)
0

Ktoś pomoże?

0

A co już wypróbowałeś? Dodawałeś mode="proxy' albo mode="aspectj" do tx:annotation-driven?

(disclaimer: nie znam się na Springu)

0

a co zwraca TransactionSynchronizationManager.isActualTransactionActive() przed this.postRepository.save(post); ?

podałbyś dokładny konfig i mavenowe wersje tych bibliotek +- schemat czyli jak rozumiem jakaś tam transakcyjna metoda serwisu wywołuje jakieś tam repo save'a.

na marginesie nie rozumiem czemu do developerki ludzie nie używają profili springa i czegoś typu H2.

0

Ja co prawda nie znam Springa tylko JEE, ale może spróbuj gdzieś dać EntityManager.joinTransaction() ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1