Vraptor + Hibernate + Spring e ZK

3 respostas
M

Oie Galera!

Tenho com buscando uma solução para injeção de dependência a dois dias e não acho.
Acontece o seguinte tenho um projeto funcionando que roda Vraptor + Hibernate + Zk JSP e ele funciona assim:
-> o Vraptor chama a class jsp pela url.
-> abre a class ZK.jsp
-> ao clicar em um botão(evento acontece pelo Zk um ajax interno) que é chamado da classe classe Java; E nesta classe Java eu preciso fazer a injeção de dependência para que possa usar os métodos implementados no DAO.
Eu pesquisei um pouco, vi que tem como implementar o Spring em conjunto com Vraptor; Porém, estou programando a pouco tempo e não consegui, até segui o exemplo na apostila da Caelum fj28.

Classe DAO
package br.com.teste.dao;

import static br.com.teste.util.StringUtil.isNullOrEmpty;

import java.util.Collection;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.LogicalExpression;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import br.com.caelum.vraptor.ioc.Component;
import br.com.teste.model.Bairro;

@Component
public class BairroDao {

    private final Session session;
        
    public BairroDao(Session session) {
        this.session = session;        
    }
    
    public void salvaOuAtualiza(Bairro bairro) {
        this.session.saveOrUpdate(bairro);
    }
        
    public void salva(Bairro bairro) {
        this.session.save(bairro);
    }
    
    public void atualiza(Bairro bairro) {
        this.session.merge(bairro);
    }
        
    public void remove(Long id) {
    	Bairro bairro = (Bairro) this.session.load(Bairro.class, id);        
        this.session.delete(bairro);        
    }    
    //paginada
    @SuppressWarnings("unchecked")
    public Collection<Bairro> lista(int pageNumber, int pageSize) {
    	if(pageNumber == 0){
    		pageNumber = 1;    		
    	}   	     	
    	if (pageSize == 0 ){
    		pageSize = 5;
    	}
        Collection<Bairro> bairroList = this.session.createCriteria(Bairro.class).setFirstResult(pageSize * (pageNumber - 1)).setMaxResults(pageSize).list();
        return bairroList;
    }
    }
Exemplo da minha classe java que chama o exemplo zk o qual eu necessito que eu consiga usar os metódos da minha classe DAO
package br.com.teste.custom;

import java.sql.SQLException;

import org.hibernate.Session;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Components;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.ext.AfterCompose;
import org.zkoss.zul.Window;

import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.teste.dao.BairroDao;
import br.com.teste.util.HibernateUtil;

@Resource
@SuppressWarnings("serial")
public class TestePaginControle extends Window implements AfterCompose{
	
	
	private BairroDao bairroDao ; 
	private Result result;
	private Validator validator;
	
	
	@SuppressWarnings("deprecation")
	@Override
	public void afterCompose() {
		// TODO Auto-generated method stub
		Components.wireVariables(this, this);
		Components.addForwards(this,this);
		
	}
	
	public void onClick$botaoAtualizarBoxCateg(Event event)throws InterruptedException, SQLException{		
		System.out.println(bairroDao.lista(4, 3));
		Messagebox.show("Teste ");
	}

}

Alguém pode me auxiliar a configurar o Vraptor com Spring? e ou Me orientar como fazer a injeção de dependência de outra maneira? Outras soluções são validas dentro no contexto também.

[]s...

3 Respostas

Lucas_Cavalcanti

se o ZK não tiver nada de injeção de dependências vc pode apelar para essa gambiarra:

http://groups.google.com/group/caelum-vraptor/browse_thread/thread/5ce54b5c5437a884

classe gambiarra. Vc pode ao invés de setar no servlet context, colocar num atributo estático de alguma classe.

M

Lucas Cavalcanti:
se o ZK não tiver nada de injeção de dependências vc pode apelar para essa gambiarra:

http://groups.google.com/group/caelum-vraptor/browse_thread/thread/5ce54b5c5437a884

classe gambiarra. Vc pode ao invés de setar no servlet context, colocar num atributo estático de alguma classe.

Lucas, pelo que pesquisei e o meu amigo me disse também; O ZK tem dependência via CDI.

http://www.ibm.com/developerworks/br/java/library/wa-aj-zkcdi/

Mas não sei como posso adequar isso ao meu projeto que já está rodando.
Se puder me dar uma força e vi o post bacana, vou testar também.

[]s… e Obrigada :wink:

Lucas_Cavalcanti

o que vc pode fazer nesse caso é criar um componente do cdi que consegue pegar os beans do spring/vraptor.

ou usar o acesso estático do jeito que eu falei.

Criado 8 de março de 2012
Ultima resposta 8 de mar. de 2012
Respostas 3
Participantes 2