Rubens, resolvi o problema injetando o SessionFactory na mão, estou usando uma solução mista do Spring AppContext.xml com o Spring javaConfig
meus Beans/Controllers/Repository to mapenando com annotations. O DataSource, o Hibernateproperties e o SessionFactory to mapenado no com o xml.
ApplicationContext.xml
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-autowire="byName" default-lazy-init="false">
<context:annotation-config />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/testedb" />
<property name="username" value="teste" />
<property name="password" value="123456" />
</bean>
<bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.c3p0.minPoolSize">5</prop>
<prop key="hibernate.c3p0.maxPoolSize">20</prop>
<prop key="hibernate.c3p0.timeout">600</prop>
<prop key="hibernate.c3p0.max_statement">50</prop>
<prop key="hibernate.c3p0.testConnectionOnCheckout">false</prop>
</props>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="hibernateProperties">
<ref bean="hibernateProperties" />
</property>
<property name="packagesToScan" value="teste.bean"/>
</bean>
</beans>
Acao.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package teste.bean;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
/**
*
* @author Guilherme
*/
@Entity
@Table(name = "acao")
public class Acao implements Serializable, GenericBean {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name="codAcao", sequenceName="acao_codacao_seq")
@GeneratedValue(strategy=GenerationType.AUTO, generator="codAcao")
@Basic(optional = false)
@Column(name = "codAcao")
private Integer codAcao;
@Basic(optional = false)
@Column(name = "nomeAcao")
private String nomeAcao;
@Column(name = "descAcao")
private String descAcao;
@Basic(optional = false)
@Column(name = "statusAcao")
private boolean statusAcao;
/**
* Sets, Gets and Constructors
*
*/
}
InterfaceAcaoDao.java
package teste.dao;
import teste.bean.Acao;
public interface InterfaceAcaoDao extends InterfaceBaseDao<Acao,Integer>{ }
AcaoDaoImpl.java (to usando generics)
package teste.dao.imp;
import teste.bean.Acao;
import teste.dao.InterfaceAcaoDao;
public class AcaoDaoImpl
extends BaseDaoImpl<Acao, Integer>
implements InterfaceAcaoDao {
public AcaoDaoImpl() {
super(Acao.class);
}
}
InterfaceAcaoMB.java
AcaoMBImpl.java …
Ai no Construtor do BaseDaoImpl:
public class BaseDaoImpl<T extends GenericBean, PK extends Serializable>
extends HibernateDaoSupport
implements InterfaceBaseDao<T, PK> {
private final Class<T> objectClass;
public BaseDaoImpl(Class<T> objectClass) {
this.objectClass = objectClass;
this.setSessionFactory( SpringAccess.getSessionFactory() );
}
........
SpringAccess é uma classe static para retorno dos beans e mapeamentos feitos.
levei quase 2 dias pra achar essa solução =/
estou prototipando uma estrutura para a nova versão do sistema, Spring ( JavaConfig, ORM, Security, MVC, WebFlow, Hibernate+Criteria, Richface, iReport, WebService )