2012-09-10 8 views
14

Mam kłopot z konfiguracją Spring + Spring Data JPA + QueryDSL + JPA 2.0 + Hibernate in Maven. Już rozwiązałem wiele problemów, ale ten daje mi ból głowy = /.Klasa nie kwalifikuje się do przetwarzania przez wszystkie BeanPostProcessors

Dostaję następujący wyjątek:

Bean 'dataSource' of type [class org.springframework.jdbc.datasource.DriverManagerDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 

Wziąłem spojrzeć w Google i większość czasu ten problem jest spowodowany przez brak adnotacji „@Transactional”. Próbowałem opisywać moje metody, ale niczego nie rozwiązałem. Mam absolutelly ma pojęcia o tym, gdzie to pochodzi z = (

Oto kod mojego testu..

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="/applicationContext.xml") 
public class BaseTest { 

    public BaseTest() { 
    } 

    @Before 
    public void setUp() throws IOException { 
     Dataset.loadDatabase(); 
    } 

    @Test 
    public void load(){} 
} 

Klasa DataSet prostu zrobić kilka zapisuje w db, aby sprawdzić, czy to działa

Moja applicationContext.xml:

<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:jpa="http://www.springframework.org/schema/data/jpa" 
     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.1.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.1.xsd 
     http://www.springframework.org/schema/data/jpa 
     http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> 

     <context:annotation-config/> 
     <jpa:repositories base-package="com.ae.repository" /> 
     <context:component-scan base-package="com.ae.service" /> 

     <!-- Data Source --> 
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
      <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> 
      <property name="url"><value>jdbc:mysql://localhost:3306/academia</value></property> 
      <property name="username"><value>root</value></property> 
      <property name="password"><value>root</value></property> 
     </bean> 

     <!-- JPA EntityManagerFactory --> 
     <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
      <property name="dataSource" ref="dataSource"/> 
      <property name="jpaProperties"> 
       <props> 
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
        <prop key="hibernate.hbm2ddl.auto">update</prop> 
        <prop key="hibernate.show_sql">true</prop> 
        <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop> 
        <prop key="hibernate.id.new_generator_mappings">true</prop> 
       </props> 
      </property> 
     </bean> 

     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
      <property name="entityManagerFactory" ref="entityManagerFactory"/> 
     </bean> 
     <tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" /> 
     <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/> 
     <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 
</beans> 

nie jestem pewien, czy moje zależności są prawidłowo ustawione albo:

<dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.10</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- hibernate + jpa --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.1.6.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.6.6</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.derby</groupId> 
      <artifactId>derby</artifactId> 
      <version>10.3.2.1</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- Spring JPA --> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-jpa</artifactId> 
      <version>1.1.1.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.sql</groupId> 
      <artifactId>jdbc-stdext</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.transaction</groupId> 
      <artifactId>jta</artifactId> 
      <version>1.1</version> 
     </dependency> 

     <!-- MySQL Connector --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.21</version> 
     </dependency> 

     <!-- Query DSL --> 
     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-apt</artifactId> 
      <version>2.7.2</version> 
      <scope>provided</scope> 
     </dependency>  

     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-jpa</artifactId> 
      <version>2.7.2</version> 
     </dependency> 

     <!-- Spring Framework --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 

     <!-- Apache commons lang --> 
     <dependency> 
      <groupId>commons-lang</groupId> 
      <artifactId>commons-lang</artifactId> 
      <version>2.6</version> 
     </dependency> 

     <!-- Apache commons IO --> 
     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>2.4</version> 
     </dependency> 

     <!-- Other --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>3.1.2.RELEASE</version> 
      <scope>test</scope> 
      <type>jar</type> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aspects</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
    </dependencies> 

Dziękuję za czytanie;)

+1

Otrzymujesz to jako * wyjątek *? Czy masz na myśli wiadomość logiczną? – Raedwald

+0

Zobacz również http://stackoverflow.com/questions/1201726/tracking-down-cause-of-springs-not-niepowiedni-do-auto-proxying/19688634#19688634 jeśli otrzymasz "Bean nie kwalifikuje się do otrzymania przetworzenia przez wszystkie BeanPostProcessors " –

Odpowiedz

15

Ostrzeżenie to nic nie znaczy, nie należy martwić się o to, ponieważ nie trzeba stosować żadnych postprocesorów do DataSource.

Technicznie oznacza to, że niektóre fasoli post-procesor (transakcyjny jeden, myślę) zależy od DataSource, dlatego DataSource musi być w pełni zainicjowany przed inicjalizacji tego post-procesor, tak, że post-procesor nie może przechwycić inicjalizacji z DataSource.

Musisz się martwić, jeśli otrzymasz takie ostrzeżenie o fasoli, do której chcesz zastosować postprocesory.

+0

Dziękujemy za odpowiedź axtavt! Odczytywanie pozostałej części logu, które widzę po próbie załadowania zestawu danych, z jakiegoś powodu, zamiast korzystać z informacji zawartych w zestawie danych, próbuje znaleźć plik jednostki trwałości (persistence.xml pod META-INF). Jeśli nie ma pliku persistence.xml, test kończy się niepowodzeniem, mówiąc, że nie znaleziono jednostki wytrwałości. Jeśli powtórzę informacje podane w komponencie bean zbioru danych w pliku persistence.xml, działa poprawnie, moja baza danych zostanie pomyślnie utworzona. Ale teraz mam inny problem: –

+0

"Błąd podczas tworzenia komponentu bean o nazwie" albumServiceImpl ": Injection of autnostified dependencies failed, zagnieżdżony wyjątek to org.springframework.beans.factory.BeanCreationException: Nie można wyposażyć w pole: com.ae.repository.AlbumRepository com .ae.service.impl.AlbumServiceImpl.albumRepository; zagnieżdżony wyjątek to org.springframework.beans.factory.BeanCreationException: Błąd tworzenia komponentu bean o nazwie 'albumRepository': FactoryBean rzucił wyjątek podczas tworzenia obiektu, zagnieżdżony wyjątek to java.lang.IllegalArgumentException: Not zarządzany typ: class com.ae.entity.Album ". –

+0

Google twierdzi, że dzieje się tak, gdy masz klasę abstrakcyjną lub interfejs jako jednostkę, ale nie w moim przypadku. BTW, otrzymuję ten sam inny błąd (nie kwalifikuje się do przetwarzania przez wszystkie BeanPostProcessors) w mojej fasoli EntityManagerFactory, będę igonore to. Mam zamiar stworzyć kolejne pytanie dotyczące tego problemu "Nie jest to zarządzany", być może nie ma to nic wspólnego z problemem "nie kwalifikuje się do przetworzenia przez wszystkie BeanPostProcessors".Dzięki;) –

Powiązane problemy