Edit 2: Sorun çözüldü, Önerilerden yola çıkarak Google'da sorunu aradığımda benzer problemlere çözümler üretmişler.

http://stackoverflow.com/questions/1079114/spring-transactional-annotation-best-practice

http://stackoverflow.com/questions/5372859/no-transaction-starts-within-spring-transactional-method

Çözüm olarak verdikleri;

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

ekleyince Transaction devreye girdi ve kaydı yaptı!!!

Bir arkadaşım cevap olarak aşağıdaki beanlerin anlamını yazabilir mi?:

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

beanlerinin anlamlarını yazabilir mi?

///////////////////////////////////////////////////////////////////////////////////////////////

Merhaba,

Hibernate Kayıt yapmış gibi görünüyor ama tablo'yu kontrol ettiğimde kaydı eklemiyor.

Edit: Veritabanından okurken problem yok.

Dao:

@PersistenceContext
private EntityManager em;

@Override
public void add(HallType hallType) {
    try {
        hallType.setId(UUID.randomUUID());
        em.persist(hallType);
    } catch (Exception e) {

    }
}

Kayıt Logları:

DEBUG: org.hibernate.impl.SessionImpl - opened session at timestamp: 13388088548 TRACE: org.hibernate.engine.IdentifierValue - id unsaved-value strategy UNDEFINED TRACE: org.hibernate.event.def.AbstractSaveEventListener - transient instance of: com.sarparda.erp.domain.HallType TRACE: org.hibernate.event.def.DefaultPersistEventListener - saving transient instance TRACE: org.hibernate.util.SerializationHelper - Starting serialization of object [ee4d2f71-d1c7-48ea-a249-4b646c84f2d5] DEBUG: org.hibernate.event.def.AbstractSaveEventListener - generated identifier: 2c6d8085f3f2808eeae1f6e1aef5f4e9ecaed5d5c9c43c19837718ed05af828082ca808cece5e1f3f4d3e9e7c2e9f4f3ca808bedeff3f4d3e9e7c2e9f4f3f8f022c9cbe4ec0472556ecdaff15147c86a, using strategy: org.hibernate.id.Assigned TRACE: org.hibernate.util.SerializationHelper - Starting serialization of object [ee4d2f71-d1c7-48ea-a249-4b646c84f2d5] TRACE: org.hibernate.event.def.AbstractSaveEventListener - saving [com.sarparda.erp.domain.HallType#2c6d8085f3f2808eeae1f6e1aef5f4e9ecaed5d5c9c43c19837718ed05af828082ca808cece5e1f3f4d3e9e7c2e9f4f3ca808bedeff3f4d3e9e7c2e9f4f3f8f022c9cbe4ec0472556ecdaff15147c86a] TRACE: org.hibernate.util.SerializationHelper - Starting serialization of object [ee4d2f71-d1c7-48ea-a249-4b646c84f2d5] TRACE: org.hibernate.impl.SessionImpl - closing session TRACE: org.hibernate.jdbc.ConnectionManager - connection already null in cleanup : no action DEBUG: org.hibernate.impl.SessionImpl - opened session at timestamp: 13388088549 TRACE: org.hibernate.impl.SessionImpl - closing session TRACE: org.hibernate.jdbc.ConnectionManager - connection already null in cleanup : no action

WEB-INF/spring/root-context.xml:

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

    <tx:annotation-driven transaction-manager="transactionManager" />
    <!-- Root Context: defines shared resources visible to all other web components -->
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="erp" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true" />
                <property name="generateDdl" value="true" />
            </bean>
        </property>
        <property name="dataSource" ref ="dataSource"/>
    </bean>

    <!-- ////////////////////////////////////////////////////////// -->
    <!-- -->
    <!-- HSQL -->
    <!-- -->
    <!-- ////////////////////////////////////////////////////////// -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
                destroy-method="close"
                p:driverClass="org.hsqldb.jdbcDriver"
                p:jdbcUrl="jdbc:hsqldb:hsql://localhost:9006/gulsanerp"
                p:user="sa"
                p:password=""
                p:acquireIncrement="5"
                p:idleConnectionTestPeriod="60"
                p:maxPoolSize="100"
                p:maxStatements="50"
                p:minPoolSize="10" />

    <!-- ////////////////////////////////////////////////////////// -->
    <!-- -->
    <!-- TX HANDLING -->
    <!-- -->
    <!-- ////////////////////////////////////////////////////////// -->
    <bean id="baseTransactionProxy"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
        abstract="true">
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props></props>
        </property>
    </bean>

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

        <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:bundles/messages" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>
</beans>

WEB-INF/spring/appServlet/servlet-context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemalocation="http://www.springframework.org/schema/mvc &lt;a href=" http:="" www.springframework.org="" schema="" mvc="" spring-mvc-3.0.xsd"="">http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context ">http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.sarparda" />
<context:annotation-config />
<annotation-driven />
<beans:bean
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<beans:bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

<!-- Resolves views selected for rendering by @Controllers to .jsp resources 
    in the /WEB-INF/views directory -->
<beans:bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>
</beans:beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee &lt;a href=" http:="" java.sun.com="" xml="" ns="" javaee="" web-app_2_5.xsd"="">">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Processes application requests -->
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<filter> <filter-name>jpa</filter-name> <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> </filter>
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>jpa</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

Problemi nasıl çözebilirim?

soruldu: 04 Haz '12, 07:32

SaRPaRDa's gravatar image

SaRPaRDa
5.0k213165
cevap kabul oranı: 27%

değiştirildi: 16 Haz '12, 10:48

rahmanyazgan's gravatar image

rahmanyazgan ♦
4.4k83559

Logda commit göremedim. Nasil bir transaksiyon stratejisi kullaniyorsunuz?

(04 Haz '12, 07:50) özcanacar ♦♦ %C3%B6zcanacar's gravatar image

root-context içerisinde tanimladigim manager'in commit etmesini saglamaya calisiyorum :

<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <props></props> </property> </bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
(04 Haz '12, 07:55) SaRPaRDa SaRPaRDa's gravatar image

baseTransactionProxy bean için setTarget diye bir setter var, dao sınıfını <property name="target" ref="dao sinifi"/> ile baseTransactionProxy içine tanımlayıp denermisin sanırsam bu eksik.

(04 Haz '12, 08:17) gklp gklp's gravatar image

gklp: Yorumunu yeni gördüm, pardon. Property'i ekledim ama aynı problem devam ediyor.

(05 Haz '12, 10:13) SaRPaRDa SaRPaRDa's gravatar image

Önerilerden yola çıkarak Google'da sorunu aradığımda benzer problemlere çözümler üretmişler.

http://stackoverflow.com/questions/1079114/spring-transactional-annotation-best-practice

http://stackoverflow.com/questions/5372859/no-transaction-starts-within-spring-transactional-method

Çözüm olarak verdikleri;

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

ekleyince Transaction devreye girdi ve kaydı yaptı!!!*

(06 Haz '12, 04:11) SaRPaRDa SaRPaRDa's gravatar image

Bir arkadaşım cevap olarak:

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

beanlerinin anlamlarını yazabilir mi?

(06 Haz '12, 04:11) SaRPaRDa SaRPaRDa's gravatar image
6 yorumdan 5 tanesi gösteriliyor hepsini göster

Sorduğun bean'lerin tam olarak hangi fonksiyonları ifa ettiklerini http://static.springsource.org adresinden görebilirsin. Bu adreste örneğin PersistenceAnnotationBeanPostProcessor'ın, PersistenceUnit ve PersistenceContext anotasyonları vasıtasıyla EntityManager, EntityManagerFactory gibi JPA kaynaklarının enjeksiyonunu gerçekleştirdiği ifade ediliyor.

Diğer 2 bean HTTP request parametreleri ve RequestMapping anotasyonu ile ilgili.

Burada yaşadığın soruna özel olarak, EntityManager gibi JPA kaynakları yanı sıra Spring beanlerinin enjeksiyonu, yine metod bazlı transaction işlemleri için anotasyonlar kullanmak adına Spring konfigürasyon dosyasında bir kaç ayarlama yapman yeterli.

Örneğin

 <context:component-scan base-package="com.myPackage"/>
 <context:annotation-config />
 <tx:annotation-driven transaction-manager="transactionManager"/>

benzeri atamalarla, belirlediğin paketler altında yer alan sınıflarda @PersistenceContext, @Autowired, @Transactional vb anotasyonları kullanabilirsin...

permanent link

cevaplandı: 07 Haz '12, 11:38

hakdogan's gravatar image

hakdogan
2.1k31926
cevap kabul oranı: 43%

em.getTransaction().commit();

yazmayi bir deneyebilirsin. Belki Transaction Commit olmadigindan henüz görünmüyor olabilir. Sen persist ettiginde hallType nesnesin PersistenceContex e dahil olur ancak bu degisikliklerin veritabanina yansiyacagi anlamina gelmez.

Ayrica eger Persistence.xml dosyasinda, eger hibernate kullaniyorsan <property name="hibernate.show_sql" value="true"/>

seklinde bir Propery ekleyip, veritabanina gönderilen INSERT. UPDATE, .. sorgularini görebilirsin. Buna benzer bir özellik mutlaka EclipseLink de de vardir kesin.

permanent link

cevaplandı: 04 Haz '12, 07:57

mceliksoy's gravatar image

mceliksoy ♦
6.5k84988
cevap kabul oranı: 25%

hibernate.cfg.xml dosyasinda:

<property name="show_sql">true</property>

log4j.xml dosyasinda:

<logger name="org.hibernate"> <level value="ALL"/> </logger>

ayarlari olduguna ve insert update sorgularini gormedigime gore hibernate yapilandirmamda sorun mu var acaba?

(04 Haz '12, 08:02) SaRPaRDa SaRPaRDa's gravatar image

em.getTransaction().commit(); yazdigimda da tabloya islemedi, insert sorgusunu loglamadi.

Kayit edilmis bilgileri cagirdigimda select sorgusunu logladi...

(04 Haz '12, 08:07) SaRPaRDa SaRPaRDa's gravatar image

em.persist(hallType); satırından sonra em.flush(); kod satırını ekleyip test edebilir misiniz? Loglarda bir değişiklik meydana gelecek mi?

permanent link

cevaplandı: 05 Haz '12, 03:21

musayuvaci's gravatar image

musayuvaci
1
cevap kabul oranı: 0%

em.flush(); loglari değiştirmedi ve kayit yapmamaya devam ediyor. Aşağıdaki log'un 5nci satırı rollback'in çalıştığı anlamına mı geliyor acaba? ve connectionManager neden connection için "already null" diyor her seferinde?

(05 Haz '12, 05:30) SaRPaRDa SaRPaRDa's gravatar image

DEBUG: org.hibernate.impl.SessionImpl - opened session at timestamp: 13388886487

TRACE: org.hibernate.engine.IdentifierValue - id unsaved-value: null

TRACE: org.hibernate.event.def.AbstractSaveEventListener - detached instance of: com.sarparda.erp.domain.HallType

DEBUG: org.hibernate.ejb.AbstractEntityManagerImpl - mark transaction for rollback

TRACE: org.hibernate.impl.SessionImpl - closing session

TRACE: org.hibernate.jdbc.ConnectionManager - connection already null in cleanup : no action

(05 Haz '12, 05:31) SaRPaRDa SaRPaRDa's gravatar image

DEBUG: org.hibernate.impl.SessionImpl - opened session at timestamp: 13388886488

TRACE: org.hibernate.impl.SessionImpl - closing session

TRACE: org.hibernate.jdbc.ConnectionManager - connection already null in cleanup : no action

(05 Haz '12, 05:31) SaRPaRDa SaRPaRDa's gravatar image

HallType sınıfını da eklersen buraya daha iyi değerlendirme fırsatımız olur.

(05 Haz '12, 06:11) kam kam's gravatar image

@Entity

@Table(name = "HallType")

@AccessType("field")

public class HallType {

@Id

@Column(name = "ID", length=36, nullable=false)

// @GeneratedValue(strategy = GenerationType.AUTO)

@GeneratedValue(generator="system-uuid")

@GenericGenerator(name="system-uuid", strategy = "uuid")

private UUID id;

@Column(name = "HallName", length=25, nullable=false) private String HallName;

@Column(name = "IsDeleted") private int isDeleted;

@Column(name = "CompanyId", length=36, nullable=false) private String companyId;

<....getter/setter....>

(05 Haz '12, 07:53) SaRPaRDa SaRPaRDa's gravatar image

Commit ve flush öneren arkadaşlar: Loglarda, select işlemi yaptığımda log var ama insert işlemi için görünmüyor. Olmayan insert'in commitini yapmaya çalışıyoruz gibi geliyor bana?

(05 Haz '12, 10:15) SaRPaRDa SaRPaRDa's gravatar image

hibernate.cfg.xml dosyasınıda ekleyebilirseniz, uygun bir zamanda test case yapıp hataya daha detaylı bakabilirim.

(05 Haz '12, 10:26) musayuvaci musayuvaci's gravatar image

Test case yapma fırsatını bulamadım daha, ama bir miktar araştırma yapabildim. Bir kaç benzer problemle karşılaştım. Belki çözüm olabilirler.

*Probleme Transaction mekanizması sebep olabilir, şu anda kullandığınız transaction mekanizması yerine "add" metoduna @Transactional annotationunu ekleyerek deneyebilir misiniz?

(06 Haz '12, 03:19) musayuvaci musayuvaci's gravatar image

@Transactional Service'de olması gerekmiyor mu?

Gerçi denedim söylediklerinizi ama bir değişiklik olmadı.

(06 Haz '12, 04:04) SaRPaRDa SaRPaRDa's gravatar image

Evet normalde business katmanda (service'de) kullanılır. Fakat burada problemin kaynağını anlamak için bu şekilde kullanmanızı istedim.

(06 Haz '12, 04:09) musayuvaci musayuvaci's gravatar image

Sorun çözüldü.

Çözümü ilk yoruma yorum olarak ekledim. Kopyala yapıştırla çözülen problemin kaynağını anlamam için yoruma göre cevap yazar mısınız?

(06 Haz '12, 04:56) SaRPaRDa SaRPaRDa's gravatar image
11 yorumdan 5 tanesi gösteriliyor hepsini göster

şu anda bende benzer sorun yaşıyorum. hibernate show_sql property true, persist operasyonu sonrası insert sql satırını görebiliyorum ama satır veritabanına işlenmiyor.

bir exception da fırlatılmıyor, remove ve merge operasyonları başarıyla gerçekleşiyor

srping kullanıyorum, version 3.1.1 jsf version 2.1.6

   @Transactional(isolation=Isolation.SERIALIZABLE, propagation=Propagation.REQUIRED)
   public void save(){

       if(null == object){

            customer.setCreateUser(login.getUser());
            customer.setCreateDate(localTime());

            em.persist(customer);
       } else 
            em.merge(customer);
   }

not PersistenceAnnotationBeanPostProcessor beani sorunu çözmedi

permanent link

cevaplandı: 11 Tem '12, 11:27

lazy's gravatar image

lazy
146171724
cevap kabul oranı: 0%

değiştirildi: 11 Tem '12, 11:28

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×109
×86
×42

Soruldu: 04 Haz '12, 07:32

Görüntüleme: 1,909 kez

Son güncelleme: 11 Tem '12, 11:28

powered by BitNami OSQA