Transakcja nie jest commitowana

Transakcja nie jest commitowana
ZA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 174
0

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

Kopiuj
public interface PostRepository extends JpaRepository<Post, Integer> {
}
Kopiuj
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:

Kopiuj
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

ZA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 174
0

Deployowane na Mac OS X tez działa.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1683
0

Jaka wersja Springa, konfiguracje masz adnotacjami czy XML?

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

ZA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 174
0

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

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1683
0

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

ZA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 174
0

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

Kopiuj
<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>
ZA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 174
0

Poniżej stacktrade błędu:

Kopiuj
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)
ZA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 174
0

Ktoś pomoże?

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

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

(disclaimer: nie znam się na Springu)

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1683
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.

  • Rejestracja: dni
  • Ostatnio: dni
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.