RESOLVIDO:Spring 2.5 + Hibernate3 - AnnotationSessionFactoryBean: No property 'packagesToScan' found

6 respostas
R

Salve, salve galera do GUJ, tudo bom?

Estou configurando uma aplicação web Spring 2.5.6 + Hibernate3 (annotation based) e estou encontrando um erro bizarro:

org.springframework.beans.InvalidPropertyException: Invalid property ‘packagesToScan’ of bean class [org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean]: No property ‘packagesToScan’ found

Porém, abrindo a class AnnotationSessionFactoryBean que está dentro do jar do Spring, o setter está disponível:

/**
	 * Set whether to use Spring-based scanning for entity classes in the classpath
	 * instead of listing annotated classes explicitly.
	 * <p>Default is none. Specify packages to search for autodetection of your entity
	 * classes in the classpath. This is analogous to Spring's component-scan feature
	 * ({@link org.springframework.context.annotation.ClassPathBeanDefinitionScanner}).
	 */
	public void setPackagesToScan(String[] packagesToScan) {
		this.packagesToScan = packagesToScan;
	}

Alguém tem alguma idéia do que possa ser?

Achei pouquíssimas referencias sobre esse erro no google! E, infelizmente, nenhuma me ajudou… =\

Segue trecho do stacktrace: Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'packagesToScan' of bean class [org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean]: No property 'packagesToScan' found at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:671) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:610) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412) ... 33 more Caused by: org.springframework.beans.InvalidPropertyException: Invalid property 'packagesToScan' of bean class [org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean]: No property 'packagesToScan' found at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:382) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1288) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1249) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) ... 44 more
E o applicationContext:

<?xml version="1.0" encoding="UTF-8"?>
 
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

       <context:annotation-config />

       <context:component-scan base-package="com.xpto.*"/>

	<bean id="dataSource" class="com.mchange.v2.c3p0.DriverManagerDataSource">
		<property name="driverClass" value="com.mysql.jdbc.Driver" />
		<property name="jdbcUrl" value="jdbc:mysql://localhost/site" />
		<property name="user" value="user" />
		<property name="password" value="password" />
	</bean>

   <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

		<property name="dataSource" ref="dataSource" />

		<property name="configurationClass">
            <value>org.hibernate.cfg.AnnotationConfiguration</value>
        </property>

        <property name="namingStrategy">
            <bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
        </property>

		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">true</prop>
				<prop key="hibernate.use_sql_comments">true</prop>
				<prop key="hibernate.max_fetch_depth">3</prop>

				<!-- c3p0 -->
				<prop key="hibernate.c3p0.acquireIncrement">2</prop>
				<prop key="hibernate.c3p0.initialPoolSize">5</prop>
				<prop key="hibernate.c3p0.maxPoolSize">10</prop>
				<prop key="hibernate.c3p0.minPoolSize">2</prop>
				<!-- /c3p0 -->
			</props>
		</property>

		<property name="packagesToScan">
			<list>
				<value>com.xpto.domain.model.entity.* </value>
			</list>
		</property>

	</bean>

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

	<tx:annotation-driven transaction-manager="transactionManager" />     

    <context:annotation-config />

</beans>

Muito obrigado pela atenção!

6 Respostas

C

No applicationContext na linha:

Tenta trocar por:

R

No meu applicationContext.xml eu uso:

&lt;bean id="mySessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;
R

Caio Vinicius:
No applicationContext na linha:

Tenta trocar por:

Olá Caio, bom dia tudo bom?

Muito obrigado pelo retorno!

Bom, eu até cheguei a mudar sim, mas não resolveu meu problema.

Mas na verdade, eu acho que o problema não é que o Spring não está scaneando o pacote, mas sim, que por algum motivo bizarro, ele não está achando a propriedade packagesToScan na classe AnnotationSessionFactoryBean.

Alguma outra dica?

Valeu!

R

raf4ever:
No meu applicationContext.xml eu uso:

&lt;bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;

Faaala @raf4ever, tudo bom?

Valeu pelo retorno!

Então, como estou usando o hibernate3 annotation based, eu pensei em usar o AnnotationSessionFactoryBean (uma especialização da LocalSessionFactoryBean), para não ter que criar arquivos hbm, nem ter que definir classe por classe.

Usando o LocalSessionFactoryBean, sem determinar o packagesToScan, como vc define as entidades?

Mais uma vez, muito obrigado pelo retorno.

C

Bom dia

Tudo bom rogerio, então tenta mudar a linha onde vc invoca a proprieade packageToScan.

Retire esta linha:

<property name="packagesToScan">  
             <list>  
                 <value>com.xpto.domain.model.entity.* </value>  
            </list>  
</property>

E adicione esta:

Teste e poste aqui o resultado.

Falou.

R

Olá Caio, mais uma vez muito obrigado pelo retorno.

Bom, na verdade, estava dessa forma inicialmente. Por via das dúvidas, coloquei novamente, mesmo assim não deu certo, continuava o mesmo erro =(

Mas eu acabei resolvendo de outra forma:

Como eu estava utilizando o hibernate/jpa, mudei a estratégia, e ao invés de usar o org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean, passei a utilizar o org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean. Criei um persistence_unit, e na minha dao generica removi a sessionFactory e criei a propriedade entityManager com a anotação @PersistenceContext.

Conforme descrito aki: http://www.devmedia.com.br/articles/viewcomp.asp?comp=6653

E deu certinho! ^^

Porém agora estou tendo um LazyInitializationException na JSP. O que é estranho, pois já possuo o org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter configurado no web.xml.

Acho que vou abrir uma nova thread sobre isso!

Mesmo assim, muito obrigado pela atenção.

Criado 21 de setembro de 2010
Ultima resposta 22 de set. de 2010
Respostas 6
Participantes 3