VRaptor + Repository + CustomProvider

25 respostas
edipo_luis_federle

Ola pessoal, tudo certo? Bom estou implementando aqui um esquema de Respository, tenho ja la os repository para Project, tudo certinho, ai no model Project tenho o seguinte:

@Transient
private ProjectRepository repository;

public Project(ProjectRepository repository) {
	this.repository = repository;
}

public Project() {}

private ProjectRepository getRepository() {
	if (repository == null) {
		throw new IllegalStateException("Repository was not set. You should inject it first");
	}
	return repository;
}

,…

Pelo que entendi ele instancia isso via o iogi correto ?

Criei um CustomProvider registrei no web.xml e um RepositoryInterceptor seguindo o codigo do projeto Calopsita, mas sempre caio nessa expetion. teria algo mais para fazer ou estou totalmente errado quanto a isso tudo?

Obrigado desde ja.
Abraço

25 Respostas

edipo_luis_federle

Falha minha pessoal, nao tinha colocando um @Component no ProjectDao que implementa o ProejctRepository.

Vlw

Lucas_Cavalcanti

na última versão do VRaptor vc não precisa do custom provider com o iogi, basta registrar o pacote dele no web.xml:

<context-param>
        <param-name>br.com.caelum.vraptor.packages</param-name>
        <param-value>br.com.caelum.vraptor.http.iogi</param-value>
    </context-param>

mesma coisa se vc for usar os outros componentes opcionais do vraptor

edipo_luis_federle

Legal Lucas, eu consegui fazer funcioanr par aum modelo, mas para outro nao. Tenho users e projects. no controller proejcts quando faço return currentUser.allProjects(); ele me diz que nao tenho o Repository injetado. mas o mesmo esta anotado como @component, tem alguma outra coisa para fazer?

Alguma dica?

Att

Lucas_Cavalcanti

vc tem que fazer que nem o calopsita e registrar um hibernate interceptor:

(olha o openSession)

edipo_luis_federle

Lucas, o RepositoryInterceptor.java eu criei, so o sessionCreator que nao…

edipo_luis_federle

Outra coisa tambem, porque eu consegui usar isso no Projects e nao fazer um chamada do tipo currentUser.getAllProjects() dentro do controller Projects?

att

edipo_luis_federle

Mudei + - para as confs igual do Calopsita e agora ele listou tudo correto, porem nao esta mias incluindo no banco, ele salva tipo “na sessao” o que crio mas nao persiste no DB, o que pode ser isso?

edipo_luis_federle

Tive que fazer isso :

this.session.save(p); this.session.beginTransaction().commit();

Somente

this.session.save(p);

Nao ia

Lucas_Cavalcanti

é que se vc registrou o sessioncreator do VRaptor, ele tá abrindo 2 sessões diferentes, uma sua e uma do vraptor

edipo_luis_federle

Desculpa Luscas, mas nao entendi bem o que vc disse. consegui fazer gravar ok, mas o update so funcionar depois de eu restart a app…

edipo_luis_federle

Tirei o provider e coloquei somente no web.xml porem estou caindo num:

java.lang.NoClassDefFoundError: br/com/caelum/iogi/Instantiator

Lucas_Cavalcanti

tá com o jar do iogi no classpath?

edipo_luis_federle

Lucas, sim estou com o jar sim.

att

edipo_luis_federle

Outra duvida, para fazer igual ta no Calopsita aquele esquema de Repository, na ultima versao do VRaptor teoricamente eu so preciso regitrar o jar no web.xml ? que ele vai instanciar corretamente o repository no model? ou preciso ainda um InterceptorRepository?

Att

Lucas_Cavalcanti

ele não vai registrar o RepositoryInterceptor…

vc precisa fazer isso.
Ele serve pro hibernate fazer a injeção de dependências também, pra tudo funcionar nas queries também.

vc precisa criar o seu próprio SessionCreator

edipo_luis_federle

Certo Lucas, e como faço para não acontecer como vc disse anteriormente, de ter duas sessions ?

Lucas_Cavalcanti

vc não pode registrar o pacote do hibernate, nem o hibernateCustomProvider

edipo_luis_federle

Então teoricamente eu crio o SessionCreator( tipo tem no Calopsita) e nao registreo nada de hibernate no web.xml ? Correto ?

Lucas_Cavalcanti

isso… vc vai precisar criar o sessionFactorycreator e o HibernateTransactionInterceptor também… (pode criar só uma classe que estende as do VRaptor, anotada com @Component e @Intercepts, respectivamente)

edipo_luis_federle

Certo Lucas, irei tentar hoje a noite isso, qualquer coisa posto aqui o que aconteceu, obrigado por hora. :slight_smile:

renanreismartins

sei que é antigo, mas…

entendi a abordagem tomada no calopsita. Porém gostaria que a dependencia fosse injetada na construção do objeto. Por exemplo, mando uma request passando os dados para o controller o controller vai instanciar aquele objeto, então dentro do obj poderia ter meu repositorio injetado.

O iogi já faz isso?

abrasssss

Lucas_Cavalcanti

sim, o iogi faz isso

renanreismartins

Lucas criei um bean que tem um repositorio:

public class Tarefa {

	private String			nome;

	private UserRepository	repository;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public UserRepository getRepository() {
		return repository;
	}

	public void setRepository(UserRepository repository) {
		this.repository = repository;
	}
}

e um controller

@Resource
public class TarefaController {

	@Get("/tarefa/get/{tarefa.nome}")
	public void get(Tarefa tarefa) {
		System.out.println(tarefa.getNome());
	}

	@Post("/tarefa/post")
	public void post(Tarefa tarefa) {
		System.out.println(tarefa.getNome());
	}

}

também declarei o iogi no web.xml

<context-param>
		<param-name>br.com.caelum.vraptor.packages</param-name>
		<param-value>br.com.caelum.vraptor.http.iogi</param-value>
	</context-param>

mesmo assim, dentro do controller, quando inspeciono meu obj tarefa, a referencia a repository está nula.

Algo que devia ser feito e eu esqueci?

abrassss

Lucas_Cavalcanti

tem que receber no construtor

renanreismartins

mais uma vez, mto obrigado!

abrasss

Criado 6 de setembro de 2011
Ultima resposta 6 de set. de 2012
Respostas 25
Participantes 3