2011-03-04 10 views
5

मैं वसंत 3.0.x के तहत अपना खुद का Validator (जेएसआर -303 विनिर्देश के अनुसार) लिखने का प्रयास कर रहा हूं।मैं वसंत में एक कॉन्स्ट्रेन्ट वैलिडेटर <A,T> पर एओपी सलाह कैसे लागू करूं?

org.hibernate: -

मैं @Transactional साथ एनोटेट isValid(Serializable, CosntraintValidatorContext) विधि है, लेकिन यह है कि लेन-देन संबंधी सलाह इस पद्धति को लागू नहीं किया जा रहा है लगता है जब isValid() विधि शुरू हो जाती है, sessionFactory.getCurrentSession() के लिए एक कॉल अपवाद बनाता है .HibernateException: नहीं हाइबरनेट सत्र थ्रेड के लिए बाध्य है, और विन्यास गैर लेन-देन यहां

के निर्माण की अनुमति नहीं है मैं एक ही 0 में एक @AutowiredsessionFactory हैबीन जो मुद्दों के बिना इंजेक्शन दिया जाता है। मेरा वर्तमान वर्कअराउंड getCurrentSession() के बजाय openSession() का उपयोग करना है, लेकिन इसमें मैन्युअल लेनदेन प्रबंधन शामिल है जिसे मैं टालना पसंद करूंगा।

मेरे सत्यापनकर्ता बीन के निर्माता में एक स्टैक ट्रेस करना, ऐसा लगता है कि o.s.b.f.s.AbstractAutowireCapableBeanFactory.createBean() पर कॉल के माध्यम से मेरा Validator बीन का निर्माण किया जा रहा है। मुझे लगता है कि इसका मतलब है कि कारखाना @Autowired फ़ील्ड को मेरे Validator में पॉप्युलेट करने में सक्षम है, लेकिन ऐसा लगता है कि यह किसी भी लेनदेन संबंधी सलाह को लागू नहीं कर रहा है?

इस मामले पर किसी भी मदद के लिए अग्रिम धन्यवाद।

संपादित करें: यदि यह किसी भी मदद की है, मैं एक आंशिक स्टैकट्रेस को शामिल किया है (create new Exception() के माध्यम से) कि निर्माता में लॉग ऑन है:

at com.mydomain.validators.UniqueValidator.<init>(UniqueValidator.java:49) ~[UniqueValidator.class:na] 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [na:1.6.0_20] 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) [na:1.6.0_20] 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) [na:1.6.0_20] 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) [na:1.6.0_20] 
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:74) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:958) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:286) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.validation.beanvalidation.SpringConstraintValidatorFactory.getInstance(SpringConstraintValidatorFactory.java:50) [spring-context-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.hibernate.validator.engine.ConstraintTree.createAndInitializeValidator(ConstraintTree.java:192) [hibernate-validator-4.0.2.GA.jar:4.0.2.GA] 
at org.hibernate.validator.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:171) [hibernate-validator-4.0.2.GA.jar:4.0.2.GA] 
at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:113) [hibernate-validator-4.0.2.GA.jar:4.0.2.GA] 
at org.hibernate.validator.metadata.MetaConstraint.validateConstraint(MetaConstraint.java:121) [hibernate-validator-4.0.2.GA.jar:4.0.2.GA] 
at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:334) [hibernate-validator-4.0.2.GA.jar:4.0.2.GA] 
at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:278) [hibernate-validator-4.0.2.GA.jar:4.0.2.GA] 
at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:260) [hibernate-validator-4.0.2.GA.jar:4.0.2.GA] 
at org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:213) [hibernate-validator-4.0.2.GA.jar:4.0.2.GA] 
at org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119) [hibernate-validator-4.0.2.GA.jar:4.0.2.GA] 
at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:86) [spring-context-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.validation.DataBinder.validate(DataBinder.java:692) [spring-context-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:807) [spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:359) [spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171) [spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE] 

लेन-देन संबंधी विन्यास सही प्रतीत होता है (एसटीएस आईडीई की रिपोर्ट है कि isValid() विधि को org.springframework.transaction.interceptor.TransactionInterceptor.invoke द्वारा @Component एनोटेशन के साथ लेनदेन प्रबंधक द्वारा उचित तरीके से सलाह दी जाती है), लेकिन मेरी समझ यह है कि यदि स्प्रिंग कंटेनर के सामान्य जीवन चक्र के बाहर सत्यापन बीन बनाया गया है, तो सलाह ठीक से नहीं होगी डेटा बाध्यकारी के दौरान सत्यापन किया जाता है जब लागू किया।

+0

आपको बहुत ही रोचक स्टैक ट्रेस मिला है :) क्या आप संकेत दे सकते हैं कि प्रत्येक पंक्ति में पैकेज जानकारी कैसे जोड़ें? धन्यवाद। –

उत्तर

1

आप अपने विन्यास में

<tx:annotation-driven/> 

कोड जोड़ा है?

+0

+1 वह एनोटेशन महत्वपूर्ण है। –

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