ऑटोवायर नहीं कर सका, मैंने स्प्रिंग डेटा जेपीए के साथ काम करने के लिए आधार आवेदन प्राप्त करने के लिए here पोस्ट किए गए ट्यूटोरियल का पालन किया। अब, मैं कैसे समझ में आया, विन्यासस्प्रिंग डेटा जेपीए - इंजेक्शन विफल रहता है - बीनक्रिएशन अपवाद: क्षेत्र
<jpa:repositories base-package="my.package.to.scan" />
का उपयोग कर कि पैकेज JpaRepository
विस्तार इंटरफेस के लिए स्प्रिंग डाटा जेपीए द्वारा स्कैन किया जा रहा में परिणाम और इसलिए यह आसान का उपयोग कर मेरी सेवा की कक्षाओं में कहीं भी इस्तेमाल किया जा सकता इसके बारे में एक concreate सेम बनाना चाहिए वसंत @Autowired
। लेकिन यह विफल रहता है, कह रहा है कि यह कक्षा नाम के साथ एक बीन नहीं ढूंढ सकता है (जो कि डी-कैपिटल क्लासनाम का उपयोग करते हुए बीन बनने का डिफ़ॉल्ट नाम है)।
हालांकि, जब मैं इस तरह मेरे applicationContext में manualy सेम कॉन्फ़िगर करें:
<bean id="ClassName" class="my.package.to.scan.ClassName"/>
वसंत सेम को खोजने के लिए सक्षम है। मैं निश्चित रूप से एक त्रुटि प्राप्त करता हूं क्योंकि मैं एक इंटरफ़ेस से एक बीन बनाना चाहता हूं, जो स्पष्ट रूप से काम नहीं कर सकता है। लेकिन मुद्दा यह है कि ऐसा लगता है कि स्प्रिंग डेटा जेपीए "स्वचालित बीन निर्माण" किसी भी तरह विफल होने लगता है।
मैंने प्रासंगिक कोड संलग्न किया ताकि आप इसे देख सकें। बीटीडब्ल्यू, मुझे जिक्र करना चाहिए कि मैं एक पोर्टल विकसित कर रहा हूं, इसलिए आश्चर्य न करें कि मेरे पास वसंत-कॉन्फ़िगर क्यों नहीं है। मैं वर्तमान में पोर्टल कॉन्फ़िगरेशन के लिए केवल एक MyPortlet-Portlet.xml के साथ एक एप्लीकेशन कॉन्फिग का उपयोग कर रहा हूं (लेकिन यह इस समस्या के लिए रिलीज़ नहीं होना चाहिए)। मैंने यह सुनिश्चित करने के लिए केवल आयात विवरणों को जोड़ा है कि मैं गलत एनोटेशन/कक्षाओं का उपयोग नहीं कर रहा हूं।
applicationContext.xml
<beans *** ALL MY XMLN's and XSI's *** />
<context:annotation-config />
<jpa:repositories base-package="model.repositories" />
// JPA specific configuration here: dataSource, persistenceUnitManager exceptionTranslator, entityManagerFactory, SessionFactory, transactionManager - should not be relevant for this problem, tell me if i'm wrong
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
ICustomerService - customerservice
import model.entities.Customer;
public interface ICustomerService {
// example method
public Customer getCustomer(Long customerId);
}
customerservice के लिए सिर्फ एक इंटरफ़ेस - वर्ग अपने आवेदन तर्क द्वारा प्रयोग किया जाता करने के लिए मिल/सेट ORM डेटा
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import model.entities.Customer;
import model.repositories.CustomerRepository;
import model.service.interfaces.ICustomerService;
@Repository
@Transactional(readOnly = true)
public class CustomerService implements ICustomerService{
@Autowired
private CustomerRepository repository;
// example method
@Override
public Customer getCustomer(Long customerId){
return repository.findById(customerId);
}
CustomerRepository - स्प्रिंग डाटा जेपीए
import javax.annotation.Resource;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.transaction.annotation.Transactional;
import model.entities.Customer;
@Resource
@Transactional(readOnly = true)
public interface CustomerRepository extends JpaRepository<Customer, Long>{
public Customer findById(Long id);
}
ग्राहक के लिए भंडार - मेरी नमूना इकाई
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "Customers")
public class Customer{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ID_CUSTOMER")
private Long id;
@Column(name = "dbfirstname")
private String firstName;
@Column(name = "dbname")
private String lastName;
public Long getId(){
return id;
}
public String getFirstName(){
return firstName;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public String getLastName(){
return lastName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
}
मैं सिर्फ WebSphere (लानत, क्या एक फू के साथ classpath नरक से आया * * एड अप उत्पाद) और अब मैं यहाँ हूँ। उम्मीद है कि कोई मेरी मदद कर सकता है।
क्या स्पष्ट रूप से गलत हो जाता है और शायद स्प्रिंग्स की बेहतर समझ प्रदान करने के लिए एक स्पष्ट स्पष्टीकरण इंजेक्शन सुविधा बहुत अच्छी होगी। मैंने वसंत दस्तावेज पढ़ा है, लेकिन सत्य कहने के लिए: कुछ कॉन्फ़िगर करने के कई तरीके हैं और यह मेरे लिए बिल्कुल दिखाई नहीं दे रहा है कॉन्फ़िगरेशन शैलियों में से किसी एक को चुनते समय वास्तव में क्या आवश्यक है।
संपादित
परियोजना मैं अभी भी त्रुटि मिल रही है अद्यतन करने के लिए प्रयास करने के बाद।के रूप में यहाँ का अनुरोध किया थोड़ा और अधिक विवरण (ट्रेस):
Exception created : org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private model.repositories.CustomerRepository model.service.CustomerService.repository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerRepository': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
[...]
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:522)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1563)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private model.repositories.CustomerRepository model.service.CustomerService.repository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerRepository': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284)
... 96 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerRepository': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1442)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:848)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:790)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
... 98 more
Caused by: java.lang.NullPointerException
at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:73)
at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:115)
at org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149)
at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1215)
at org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:177)
at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:89)
at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:179)
at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:174)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:600)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:376)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:517)
at $Proxy325.createEntityManager(Unknown Source)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:234)
at $Proxy328.createNamedQuery(Unknown Source)
at org.springframework.data.jpa.repository.query.NamedQuery.<init>(NamedQuery.java:74)
at org.springframework.data.jpa.repository.query.NamedQuery.lookupFrom(NamedQuery.java:96)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$DeclaredQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:128)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:162)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:71)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:303)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:157)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:120)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:39)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
संपादित करें # 2 compleate applicationContext.xml (परिवर्तन मैं चल रही चर्चा के आधार पर किया includeing) के रूप में अनुरोध
<context:annotation-config />
<jpa:repositories base-package="model.repositories" />
<context:component-scan base-package="model,model.repositories,model.service,controller" />
<bean class="model.service.CustomerService"/>
<bean class="model.service.OrderService"/>
<bean class="model.repositories.CustomerRepository"/>
<bean class="model.repositories.OrderRepository"/>
<bean id="myExceptionTranslator" class="org.springframework.orm.hibernate4.HibernateExceptionTranslator" />
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/mydata"
resource-ref="true" cache="true" />
<bean id="pum"
class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
<property name="persistenceXmlLocations">
<list>
<value>classpath*:META-INF/OverridePersistence.xml</value>
</list>
</property>
<property name="defaultDataSource" ref="dataSource" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="true" />
<property name="database" value="MYSQL" />
</bean>
</property>
<property name="persistenceUnitManager" ref="pum" />
<property name="persistenceUnitName" value="default" />
</bean>
<bean id="mySessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="model"/>
<property name="hibernateProperties">
<value>hibernate.dialect=org.hibernate.dialect.MySQLDialect</value>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
<property name="sessionFactory" ref="mySessionFactory" />
</bean>
<tx:annotation-driven />
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
आपके ग्राहक रिपोजिटरी को संसाधन एनोटेशन की आवश्यकता नहीं है। साथ ही, findById को पहले से ही JpaRepository द्वारा प्रदान किया जाना चाहिए। मैं आपकी इकाई मान रहा हूं प्रबंधक बिना त्रुटियों के ठीक बनाया गया है। के साथ पर्याप्त होना चाहिए। स्प्रिंग क्लास के लिए अपना डीबग लॉग चालू करें और जांचें कि वहां कुछ त्रुटि है या नहीं। –
Luciano
सेवा ग्राहक एनोटेशन के बजाय आपके ग्राहक सेवा में रिपोजिटरी एनोटेशन क्यों है? – Luciano
रयान स्टीवर्ट के उत्तर पर मेरी टिप्पणियों की जांच करें। मूल रूप से क्योंकि मैंने ट्यूटोरियल का पालन किया जो अधूरा लगता है। – masi