2012-09-10 16 views
14

Tôi đang gặp nhiều khó khăn để thiết lập cấu hình của Spring + Spring Data JPA + QueryDSL + JPA 2.0 + Hibernate trong Maven. Tôi đã giải quyết được rất nhiều vấn đề, nhưng điều này khiến tôi đau đầu = /.Lớp học không đủ điều kiện để được xử lý bởi tất cả BeanPostProcessors

Tôi nhận được ngoại lệ sau đây:

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) 

Tôi đã xem trong Google và hầu hết các lần vấn đề này là do sự vắng mặt của chú thích "@Transactional". Tôi đã cố chú thích các phương pháp của mình, nhưng nó không giải quyết được gì cả. Tôi có absolutelly có ý tưởng về nơi nó xuất phát từ = (

Dưới đây là đoạn code của thử nghiệm của tôi:..

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

    public BaseTest() { 
    } 

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

    @Test 
    public void load(){} 
} 

Lớp DataSet chỉ làm một số tiết kiệm trong db để xem nếu nó hoạt động

ApplicationContext.xml của tôi:

<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> 

tôi không chắc chắn nếu phụ thuộc của tôi được thiết lập một cách chính xác một trong hai:

<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> 

Cảm ơn bạn đã đọc;)

+1

Bạn nhận được điều đó dưới dạng * ngoại lệ *? Hoặc bạn có nghĩa là một thông điệp tường trình? – Raedwald

+0

Xem thêm http://stackoverflow.com/questions/1201726/tracking-down-cause-of-springs-not-eligible-for-auto-proxying/19688634#19688634 nếu bạn nhận được "Bean không đủ điều kiện để được xử lý bởi tất cả BeanPostProcessors " –

Trả lời

15

Cảnh báo này có nghĩa là không có gì, bạn không nên lo lắng về điều đó vì bạn không cần phải áp dụng bất kỳ hậu xử lý để các DataSource. Về mặt kỹ thuật, điều đó có nghĩa là một số bộ xử lý sau (phụ thuộc vào giao dịch, tôi đoán) phụ thuộc vào số DataSource của bạn, do đó, DataSource phải được khởi tạo đầy đủ trước khi khởi tạo bộ xử lý sau đó, sao cho bộ xử lý sau không thể chặn khởi tạo của số DataSource.

Bạn cần phải lo lắng nếu bạn nhận được cảnh báo như vậy về một bean bạn muốn áp dụng sau bộ xử lý.

+0

Cảm ơn bạn đã trả lời axtavt! Đọc phần còn lại của nhật ký tôi thấy rằng sau khi cố gắng tải Tập dữ liệu, vì một số lý do, thay vì sử dụng thông tin được cung cấp trong Tập dữ liệu, nó sẽ tìm một Tệp Đơn vị Persistence (persistence.xml trong META-INF). Nếu không có persistence.xml, kiểm tra không thành công, không tìm thấy đơn vị persistence nào. Nếu tôi lặp lại các thông tin được đưa ra trong tập dữ liệu bean trong persistence.xml nó hoạt động tốt, cơ sở dữ liệu của tôi được tạo thành công. Nhưng bây giờ tôi có một vấn đề khác: –

+0

"Lỗi tạo bean với tên 'albumServiceImpl': Tiêm phụ thuộc autowired không thành công, ngoại lệ lồng nhau là org.springframework.beans.factory.BeanCreationException: Không thể autowire trường: com.ae.repository.AlbumRepository com .ae.service.impl.AlbumServiceImpl.albumRepository; lồng ghép ngoại lệ là org.springframework.beans.factory.BeanCreationException: Lỗi tạo bean với tên 'albumRepository': FactoryBean đã ném ngoại lệ vào việc tạo đối tượng, ngoại lệ lồng nhau là java.lang.IllegalArgumentException: Không một loại được quản lý: class com.ae.entity.Album ". –

+0

Google cho biết điều đó xảy ra khi bạn có lớp trừu tượng hoặc giao diện làm thực thể, nhưng đó không phải là trường hợp của tôi. BTW, tôi nhận được rằng cùng một lỗi khác (không đủ điều kiện để nhận được xử lý bởi tất cả BeanPostProcessors) trong EntityManagerFactory đậu của tôi, tôi sẽ igonore nó. Tôi sẽ tạo một câu hỏi khác liên quan đến vấn đề "Không phải loại được quản lý", có thể nó không liên quan gì đến vấn đề "không đủ điều kiện nhận được xử lý bởi tất cả các BeanPostProcessors".Cảm ơn;) –

Các vấn đề liên quan