Problema com Hibernate + Spring e Annotations

Olá pessoas!
Estou configurando uma aplicação para rodar spring, usando hibernate. Configurei o meu bean sessionFactory para injetar nos meus DAOs, da seguinte forma:

trexo de applicationContext.xml

<bean 	id="sessionFactory" 
			class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
			autowire="byType">
				
		<property name="dataSource">
			<ref bean="dataSource"/>
		</property>
		<property name="hibernateProperties">
		    <props>
		        <prop key="hibernate.dialect">
		            org.hibernate.dialect.PostgreSQLDialect
		        </prop>
		        <prop key="hibernate.hbm2ddl.auto">update</prop>
		    </props>
		</property>
	
		<property name="annotatedClasses">
                                         <!-- mapeamento das minhas classes anotadas -->
                                </property>
		
</bean>

Estou injetando esse bean sessionFactory via anotação @Resource(name=“sessionFactory”) nos meus daos da seguinte forma:

@Service("meuDao")
public class MeuDAO extends HibernateDaoSupport{
   
   @Resource(name="sessionFactory")
   private SessionFactory sessionFactory;

   (...)

o problema é que não funciona. Na hora que o spring instancia o bean do dao, ele dá o seguinte erro:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'meuDao': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required

é como se o spring não injetasse o sessionFactory via annotation. O detalhe é que se eu injetar o sessionFactory no meu dao pelo xml, funciona corretamente. Aí me vem um problema, TODO dao que eu implementar eu vou ter que declarar seu bean no xml e fazer a injeção por lá.
Outro problema é que eu tenho um Controller onde todos meus MBeans herdam dele, e esse controller possui um dao injetado via Spring. Mas quando eu crio um MBean que herda desse Controller, o dao aparece como null, é como se o Spring não injetasse a dependência quando eu faço herança.

Estou fazendo alguma coisa errado? Se alguém puder me ajudar fico muito grato, já busquei em vários sites mas não consegui resolver o problema até o momento.

to com o mesmo problema, descobriu a solução!?

Como está o web.xml ?

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 )

[quote=grsouza]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.

SpringAccess é uma classe static para retorno dos beans e mapeamentos feitos.[/quote]Olá grsouza;

Tambem estou recebendo o maldito “IllegalArgumentException: ‘sessionFactory’ or ‘hibernateTemplate’ is required” mesmo tendo configurado o sessionFactory pro DAO corretamente.
Mas estou tendo problemas pra implementar uma solução parecida com a sua. Como vc utiliza seu SpringAccess ? É algo tipo @Component @Scope e a propriedade sessionFactory com @Autowired; ou é com new ClassPathXmlApplicationContext ?

Abaixo estão disponíveis os códigos das 2 soluções que tentei.
Com a implementação1 que fiz do SpringXmlAccess; o início do contexto da aplicação está caindo em loop infinito :shock:
E com a implementação2 (SpringAnnotationAccess) está dando aquele problema: “Unsatisfied dependency of type [interface org.hibernate.SessionFactory]: expected at least 1 matching bean”. Já tentei colocar o setSessionFactory no construtor do AbstractDAO assim como vc fez; e tambem coloca-lo com @PostConstruct no SiteRemotoHibernateDAOImpl.

applicationContext-persistence.xml:[code]<?xml version="1.0" encoding="UTF-8"?>

<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@************:1521:xe"/>
    <property name="username" value="********"/>
    <property name="password" value="***********"/>
</bean>

<bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">  
    <property name="properties">  
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>  
            <prop key="hibernate.show_sql">false</prop>  
			<prop key="hibernate.jdbc.wrap_result_sets">false</prop>
			<prop key="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WebSphereExtendedJTATransactionLookup</prop>
        </props>  
    </property>  
</bean>  

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
	<property name="dataSource">
		<ref local="dataSource1"/>
	</property>
	<property name="hibernateProperties">
		<ref bean="hibernateProperties" />
	</property>
	<property name="packagesToScan"  value="com.altec.bsbr.app.gac.entity"/>
</bean>

<bean id="siteRemotoHibernateDAO" class="com.altec.bsbr.app.gac.dao.impl.SiteRemotoHibernateDAOImpl" >
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>
[/code]Exceção antes das soluções abaixo:[quote]org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'siteRemotoHibernateDAOImpl' defined in file [C:\Arquivos de programas\IBM\WebSphere\AppServer1\profiles\AppSrv01\installedApps\O360UDI17Node01Cell\GAC.ear\gac.war\WEB-INF\classes\com\altec\bsbr\app\gac\dao\impl\SiteRemotoHibernateDAOImpl.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required at org.springframework.orm.hibernate3.support.HibernateDaoSupport.checkDaoConfig(HibernateDaoSupport.java:117) at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335) ... 108 more[/quote]

SiteRemotoHibernateDaoImpl:[code]@Repository
public class SiteRemotoHibernateDAOImpl extends AbstractHibernateDAO<SiteRemoto, Long> implements
SiteRemotoHibernateDAO {

/**
@Autowired
SessionFactory sessionFactory;

@PostConstruct
public void init() {
    setSessionFactory(sessionFactory);
}
*/

public SiteRemotoHibernateDAOImpl() {
    super();
}[/code]AbstractHibernateDAO:[code]public abstract class AbstractHibernateDAO<ENTITY extends EntityBean, PK extends Serializable>
extends HibernateDaoSupport implements AbstractDAOPublic<ENTITY, PK>, PropertySelector {

private Class<ENTITY> persistentClass;

@Autowired
private SpringAnnotationAccess springAnnotationAccess;

public void setSpringAnnotationAccess(SpringAnnotationAccess springAnnotationAccess) {
    this.springAnnotationAccess = springAnnotationAccess;
}

@SuppressWarnings("unchecked")
public AbstractHibernateDAO() {
    try {
        persistentClass = (Class<ENTITY>) ((ParameterizedType) getClass().getGenericSuperclass())
            .getActualTypeArguments()[0];
        this.setSessionFactory(springAnnotationAccess.getSessionFactory());
        //            this.setSessionFactory(SpringXmlAccess.getSessionFactory()); //loop-infinito
    }
    catch (Exception e) {
        LOGGER.error(ExceptionUtils.getStackTrace(e));
    }
    finally {
    }
}[/code]#############

IMPLEMENTAÇÃO-2
#############
PROBLEMA: Unsatisfied dependency of type [interface org.hibernate.SessionFactory]: expected at least 1 matching bean
SpringAnnotationAccess.java:[code]@Component
@Scope(“singleton”)
public final class SpringAnnotationAccess {

@Autowired
private SessionFactory sessionFactory;

public SessionFactory getSessionFactory() {
    return sessionFactory;
}

public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

/**
 * 
 */
public SessionFactory getTheSessionFactory() {
    return getSessionFactory();
}

}[/code]#############
IMPLEMENTAÇÃO-1
#############
PROBLEMA: loop infinito na inicialização do contexto (start do servidor websphere)
SpringXmlAccess.java:[code]public final class SpringXmlAccess {

public static SessionFactory getSessionFactory() {

    ApplicationContext appCtx = new ClassPathXmlApplicationContext(
        new String[] { "applicationContext-persistence.xml" });
    SessionFactory sessionFactory = (SessionFactory) appCtx.getBean("sessionFactory", SessionFactory.class);
    return sessionFactory;

}

}[/code]

Resolví !

Nem utilizei o SpringXmlAccess ou SpringAnnotationAccess no AbstractHibernateDAO.
Coloquei a injeção direto do xml. <bean id="siteRemotoHibernateDAO" class="com.altec.bsbr.app.gac.dao.impl.SiteRemotoHibernateDAOImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean>E pra resolver o problema de vez removí a linha do “hibernate.transaction.manager_lookup_class” que estava causando problemas (org.hibernate.transaction.WebSphereExtendedJTATransactionLookup). Creio que o fato é porque estou utilizando o quartz. E apesar do chamado estar partindo do websphere ele fica isolado do contexto do servidor de aplicação.

O problema que este transaction lookup estava causando está abaixo:[quote][08/02/10 13:59:38:796 ACT] 00000068 javaURLContex E NMSV0310E: Uma operação JNDI em um nome “java:” não pode ser concluída porque o tempo de execução do servidor não é capaz de associar o encadeamento da operação com qualquer componente de aplicativo J2EE. Essa condição pode ocorrer quando o cliente JNDI utilizando o nome “java:” não é executado no encadeamento de um pedido de aplicativo do servidor. Certifique-se de que um aplicativo J2EE não execute operações JNDI em nomes “java:” dentro de blocos de código estático ou em encadeamentos criados pelo aplicativo J2EE. Esse código não executa necessariamente no encadeamento de um pedido de aplicativo do servidor e, portanto, não é suportado por operações JNDI em nomes “java:”. Rastreio da pilha de exceções:
javax.naming.ConfigurationException [Root exception is javax.naming.NameNotFoundException: Name comp/websphere not found in context “java:”.]
at com.ibm.ws.naming.java.javaURLContextImpl.throwConfigurationExceptionWithDefaultJavaNS(javaURLContextImpl.java:411)
at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:388)
at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:205)
at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:145)
at javax.naming.InitialContext.lookup(InitialContext.java:363)
at org.hibernate.transaction.WebSphereExtendedJTATransactionLookup$TransactionManagerAdapter$TransactionAdapter.(WebSphereExtendedJTATransactionLookup.java:183)
at org.hibernate.transaction.WebSphereExtendedJTATransactionLookup$TransactionManagerAdapter$TransactionAdapter.(WebSphereExtendedJTATransactionLookup.java:178)
at org.hibernate.transaction.WebSphereExtendedJTATransactionLookup$TransactionManagerAdapter.getTransaction(WebSphereExtendedJTATransactionLookup.java:140)
at org.springframework.orm.hibernate3.SessionFactoryUtils.registerJtaSynchronization(SessionFactoryUtils.java:448)
at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:346)
at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java:235)
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:167)
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:142)
at com.altec.bsbr.app.gac.dao.impl.AbstractHibernateDAO.getHibernateSession(AbstractHibernateDAO.java:241)
at com.altec.bsbr.app.gac.dao.impl.AbstractHibernateDAO.buscaTudo(AbstractHibernateDAO.java:106)
at com.altec.bsbr.app.gac.service.impl.JobTeste.execute(JobTeste.java:74)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)
Caused by: javax.naming.NameNotFoundException: Name comp/websphere not found in context “java:”.
at com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1767)
at com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1083)
at com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:991)
at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1263)
at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:384)
… 16 more

[08/02/10 13:59:38:796 ACT] 00000068 SystemOut O 13:59:38.796 [gacSchedulerFactoryBean_Worker-5] ERROR c.a.b.app.gac.service.impl.JobTeste - org.springframework.dao.DataAccessResourceFailureException: Could not register synchronization with JTA TransactionManager; nested exception is org.hibernate.HibernateException: javax.naming.ConfigurationException: A JNDI operation on a “java:” name cannot be completed because the serverruntime is not able to associate the operation’s thread with any J2EE application component. This condition can occur when the JNDI client using the “java:” name is not executed on the thread of a server application request. Make sure that a J2EE application does not execute JNDI operations on “java:” names within static code blocks or in threads created by that J2EE application. Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on “java:” names. [Root exception is javax.naming.NameNotFoundException: Name comp/websphere not found in context “java:”.]
at org.springframework.orm.hibernate3.SessionFactoryUtils.registerJtaSynchronization(SessionFactoryUtils.java:474)
at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:346)
at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java:235)
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:167)
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:142)
at com.altec.bsbr.app.gac.dao.impl.AbstractHibernateDAO.getHibernateSession(AbstractHibernateDAO.java:241)
at com.altec.bsbr.app.gac.dao.impl.AbstractHibernateDAO.buscaTudo(AbstractHibernateDAO.java:106)
at com.altec.bsbr.app.gac.service.impl.JobTeste.execute(JobTeste.java:74)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)
Caused by: org.hibernate.HibernateException: javax.naming.ConfigurationException: A JNDI operation on a “java:” name cannot be completed because the serverruntime is not able to associate the operation’s thread with any J2EE application component. This condition can occur when the JNDI client using the “java:” name is not executed on the thread of a server application request. Make sure that a J2EE application does not execute JNDI operations on “java:” names within static code blocks or in threads created by that J2EE application. Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on “java:” names. [Root exception is javax.naming.NameNotFoundException: Name comp/websphere not found in context “java:”.]
at org.hibernate.transaction.WebSphereExtendedJTATransactionLookup$TransactionManagerAdapter$TransactionAdapter.(WebSphereExtendedJTATransactionLookup.java:188)
at org.hibernate.transaction.WebSphereExtendedJTATransactionLookup$TransactionManagerAdapter$TransactionAdapter.(WebSphereExtendedJTATransactionLookup.java:178)
at org.hibernate.transaction.WebSphereExtendedJTATransactionLookup$TransactionManagerAdapter.getTransaction(WebSphereExtendedJTATransactionLookup.java:140)
at org.springframework.orm.hibernate3.SessionFactoryUtils.registerJtaSynchronization(SessionFactoryUtils.java:448)
… 9 more
Caused by: javax.naming.ConfigurationException: A JNDI operation on a “java:” name cannot be completed because the serverruntime is not able to associate the operation’s thread with any J2EE application component. This condition can occur when the JNDI client using the “java:” name is not executed on the thread of a server application request. Make sure that a J2EE application does not execute JNDI operations on “java:” names within static code blocks or in threads created by that J2EE application. Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on “java:” names. [Root exception is javax.naming.NameNotFoundException: Name comp/websphere not found in context “java:”.]
at com.ibm.ws.naming.java.javaURLContextImpl.throwConfigurationExceptionWithDefaultJavaNS(javaURLContextImpl.java:416)
at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:388)
at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:205)
at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:145)
at javax.naming.InitialContext.lookup(InitialContext.java:363)
at org.hibernate.transaction.WebSphereExtendedJTATransactionLookup$TransactionManagerAdapter$TransactionAdapter.(WebSphereExtendedJTATransactionLookup.java:183)
… 12 more
Caused by: javax.naming.NameNotFoundException: Name comp/websphere not found in context “java:”.
at com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1767)
at com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1083)
at com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:991)
at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1263)
at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:384)
… 16 more[/quote]

romuloff,

  desculpe a demora a responder, estava ausente do PC (dias de férias) ....
  eu acabei usando uma outra abordagem, meus daos extendem de HibernateSupportDao e eu faço o Spring popular por IoC o sessionfactory, e como uso anotação eu não preciso ficar mapeando os Beans no XML nem colocando as properties na mão ... uso @Autowired quando preciso injetar algum Bean
  Não to com acesso aos fontes no momento, olhando aqui nos favoritos do meu NB achei dois links que usei como referência:

http://javafree.uol.com.br/artigo/871470/
http://www.vaannila.com/spring/spring-hibernate-integration-1.html

  depois de implementar esse exemplo/tutorial na tua aplicação podes evoluir ele para usar as anotacoes do spring ;)

  não sei se fui de muita ajuda, qualquer coisa da um berro ai que amanhã eu posto parte dos fontes.

[quote=grsouza]acabei usando uma outra abordagem, meus daos extendem de HibernateSupportDao e eu faço o Spring popular por IoC o sessionfactory, e como uso anotação eu não preciso ficar mapeando os Beans no XML nem colocando as properties na mão … uso @Autowired quando preciso injetar algum Bean
Não to com acesso aos fontes no momento, olhando aqui nos favoritos do meu NB achei dois links que usei como referência:
http://javafree.uol.com.br/artigo/871470/
http://www.vaannila.com/spring/spring-hibernate-integration-1.html[/quote]Sim. Utilizar @Autowired é muito bom. A minha aplicação até que já utiliza esta facilidade (@Service, @Component, @Repository, etc); quando o escopo é a aplicação rodando no Websphere.

Mas é que precisei de montar esse outro contexto para quando a aplicação chamar Job’s do Quartz.
Com o Quartz não consegui achar nenhuma referencia utilizando injeção somente por annotation. :evil:

então, nunca mexi com Quartz … achei na net esse Annotation-Custom do Spring pra Jobs-Schedule … veja se vai te ajudar em algo:
http://code.google.com/p/spring-custom-annotations/