Olá pessoal, estou tentando integrar o VRaptor com o Spring sendo que não estou conseguindo, eu estou achando que deve ser algum jar que está faltando ou estou importando errado.
Bem estou tentando fazer o Exercicio 16.3 da Apostila fj28 VRaptor. VOu colocar as classes e modificações que criei e explicar os erros que esta ocorrendo:
Classe 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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<tx:annotation-driven />
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocation">
<value>classpath:/hibernate.cfg.xml</value>
</property>
</bean>
</beans>
CriadorDeSessionFactory aonde só pede para retirar a anotação @Component:
package br.com.caelum.goodbuy.infra;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import br.com.caelum.vraptor.ioc.ApplicationScoped;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.ComponentFactory;
@ApplicationScoped
public class CriadorDeSessionFactory implements
ComponentFactory<SessionFactory> {
private SessionFactory factory;
private Session session;
// @PostConstruction serão executados assim que o escopo for iniciado,
// ouseja, no começo da
// requisição, sessão de usuário ou da aplicação.
@PostConstruct
public void abre() {
AnnotationConfiguration configuration = new AnnotationConfiguration();
configuration.configure();
this.factory = configuration.buildSessionFactory();
System.out
.println("criado PostConstruction do metodo abre da classe CriadorDeSessionFactory");
}
public SessionFactory getInstance() {
System.out.println("criado o getInstance da classe CriadorDeSessionFactory");
return this.factory;
}
// @PreDestroy serão executados assim que o escopo for finalizado, ou seja,
// no final da requisição, sessão de usuário ou da aplicação.
@PreDestroy
public void fecha() {
this.factory.close();
System.out
.println("criado o @Predestroy do metodo fecha da clase CriadorDeSessionFactory");
}
}
Classe CriadorDeSession:
package br.com.caelum.goodbuy.infra;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import net.vidageek.mirror.dsl.Mirror;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import br.com.caelum.vraptor.proxy.MethodInvocation;
import br.com.caelum.vraptor.proxy.Proxifier;
import br.com.caelum.vraptor.proxy.SuperMethod;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.ComponentFactory;
@Component
public class CriadorDeSession implements ComponentFactory<Session> {
private SessionFactory factory;
private final Proxifier proxifier;
private Session session;
public CriadorDeSession(SessionFactory factory, Proxifier proxifier) {
this.factory = factory;
this.proxifier = proxifier;
System.out
.println("criado Factory e Proxifier - construtor da classe CriadorDeSession");
}
@PostConstruct
public void abre() {
this.session = proxifier.proxify(Session.class,
new MethodInvocation<Session>() {
public Object intercept(Session proxy, Method method,
Object[] args, SuperMethod superMethod) {
Session sessionDoSpring = SessionFactoryUtils
.doGetSession(factory, true);
return new Mirror().on(sessionDoSpring).invoke()
.method(method).withArgs(args);
}
});
}
public Session getInstance() {
return this.session;
}
@PreDestroy
public void fecha() {
this.session.close();
}
}
[color=red]Erros que apresentam a classe CriadorDeSession:
[/color]
1º neste import:
import org.springframework.orm.hibernate3.SessionFactoryUtils;
e no método abre:
@PostConstruct
public void abre() {
this.session = proxifier.proxify(Session.class,
new MethodInvocation<Session>() {
public Object intercept(Session proxy, Method method,
Object[] args, SuperMethod superMethod) {
Session sessionDoSpring = SessionFactoryUtils
.doGetSession(factory, true);
return new Mirror().on(sessionDoSpring).invoke()
.method(method).withArgs(args);
}
});
}
[color=red]Erros:[/color]
Classe ProdutoDAO:
package br.com.caelum.goodbuy.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import br.com.caelum.goodbuy.modelo.Produto;
import br.com.caelum.vraptor.ioc.Component;
import org.springframework.transaction.annotation.Transactional;
@Component
public class ProdutoDAO {
private final Session session;
public ProdutoDAO(Session session) {
this.session = session;
}
@Transactional
public void salva(Produto produto) {
Transaction tx = session.beginTransaction();
session.save(produto);
tx.commit();
}
public Produto carrega(Long id) {
return (Produto) session.load(Produto.class, id);
}
@Transactional
public void atualiza(Produto produto) {
Transaction tx = session.beginTransaction();
this.session.update(produto);
tx.commit();
}
public void remove(Produto produto) {
Transaction tx = session.beginTransaction();
this.session.delete(produto);
tx.commit();
}
public List<Produto> listaTudo() {
return this.session.createCriteria(Produto.class).list();
}
public List<Produto> busca(String nome) {
return session.createCriteria(Produto.class)
.add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE))
.list();
}
public void recarrega(Produto produto) {
session.refresh(produto);
}
}
Me apresenta um erro neste import:
import org.springframework.transaction.annotation.Transactional;
E daí quando vou usar a anotação @ransactional me aparece um erro, por exemplo:
[code]
@Transactional
public void salva(Produto produto) {
Transaction tx = session.beginTransaction();
session.save(produto);
tx.commit();
}[/code]
[color=red]O erro me apresenta que:[/color]
Não tenho idéia do que devo fazer alguém pode me ajudar?? Um Saludo e obrigado desde já!