2010-07-20 10 views
26

इस त्रुटि के बारे में क्या त्रुटि है? "कोई हाइबरनेट सत्र थ्रेड से बंधे नहीं है, और कॉन्फ़िगरेशन गैर-ट्रांज़ेक्शनल के निर्माण की अनुमति नहीं देता है"। मेरी वसंत कॉन्फ़िगरेशन फ़ाइल इस तरह कुछ दिखती है।कोई हाइबरनेट सत्र थ्रेड से बंधे नहीं है, और कॉन्फ़िगरेशन गैर-लेन-देन के निर्माण की अनुमति नहीं देता है

<bean id="jndiDataSource" 
    class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName"> 
     <value>java:/devDS</value> 
    </property> 
</bean> 
<bean id="stsaDBFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="jndiDataSource" /> 
    <property name="annotatedClasses"> 
     <list> 
      <value>xx.yy.zz.User</value> 
      <value>xx.yy.UserResponse</value> 

     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbmddl.auto">create</prop> 
     </props> 
    </property> 
</bean> 

<!-- ################################### Aspects ################################################## --> 

<bean id="txManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory"> 
     <ref local="stsaDBFactory" /> 
    </property> 
</bean> 

सभी डीएओ परीक्षण पास होते हैं जब मैं उन्हें जूनिट का उपयोग करके कंटेनर के बाहर परीक्षण करता हूं। जब मैं इसे पोर्टल ऐप के रूप में जेबॉस में तैनात करता हूं, तो मुझे यह अपवाद मिलता है। यह भी ठीक काम करता है अगर मैं पोर्टल विशिष्ट कॉन्फ़िगरेशन को हटा देता हूं और इसे एक साधारण वेब ऐप बनाता हूं और इसे jboss पर तैनात करता हूं। कोई विचार?

+0

यह भी देखें http://stackoverflow.com/questions/734614/spring-hibernate-junit-no-hibernate- सत्र-bound-to-thread – Vadzim

उत्तर

35

आपने अपनी वसंत कॉन्फ़िगरेशन में एक ट्रांज़ेक्शन मैनेजर परिभाषित किया है लेकिन आप एक ऐसी विधि में हाइबरनेट क्वेरी निष्पादित करने का प्रयास कर रहे हैं जो लेनदेन नहीं है। अपनी विधि या कक्षा में @ ट्रांसेक्शनल जोड़ने का प्रयास करें।

+1

यह सिर्फ एक चुनिंदा क्वेरी है। क्या मुझे इस एनोटेशन को सभी डीएओ तरीकों में जोड़ना है? – chedine

+0

यह डीएओ विधि या सेवा विधि या कक्षाओं में से किसी एक पर हो सकता है, लेकिन यदि आप एक ट्रांज़ेक्शन मैनेजर का उपयोग कर रहे हैं तो आपको स्टैक में कहीं होना चाहिए या आपको अपवाद मिलेगा क्योंकि आप दौड़ने की कोशिश कर रहे हैं एक लेनदेन के बाहर एक प्रश्न। – rjsang

+0

कुछ इस एनोटेशन के बिना कैसे काम कर रहे हैं? – chedine

4

मैं hibernate configuration documentation में दिखाया गया है सरल विन्यास के अनुसार hibernate config में current_session_context_class निर्दिष्ट करने के द्वारा इस समस्या को हल मिल गया "thread" होने के लिए,।

लेकिन यह सिफारिश करता है कि यह उत्पादन के उपयोग के लिए सुरक्षित नहीं है।

में अपने hibernate config भी मदद करनी चाहिए निम्नलिखित जोड़ने के लिए कोशिश कर रहा है:

<property name="current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property> 

चेक बाहर अधिक जानकारी के लिए http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/architecture.html#architecture-current-session

+1

बस कोशिश करने वालों के लिए एक चेतावनी और वसंत का उपयोग कर रहे हैं: 'current_session_context_class' को कॉन्फ़िगर करते समय मुझे एक अलग त्रुटि मिली। कई अन्य सवालों में इसने लेनदेन के साथ समस्याओं का रास्ता दिया। प्रभावी रूप से यह वसंत लेनदेन प्रबंधन को हटाने के लिए प्रतीत होता है। (उदाहरण के लिए देखें: http://stackoverflow.com/questions/4293098/how-to-integrate-spring-with-hibernate- सत्र-and-transaction-management) – Yashima

+0

मेरे पास भी अलग व्यवहार था। मैंने डेटाबेस से ऑब्जेक्ट लोड किया, एक बदलाव किया, फिर इसे जारी रखने की कोशिश की। इसे काम करने के लिए मुझे इसे सत्र से बेदखल करना पड़ा और फिर बचाया। – Zoidberg

संबंधित मुद्दे

 संबंधित मुद्दे