Bom dia a todos!
Estou com alguns problemas no gerenciamento de sessões que o Spring faz sobre o Hibernate.
Estou evitando utilizar o HibernateDaoSupport, e isso está me trazendo muitoooos problemas.
Já implementei transactions e tudo o que li a respeito mas não rolou de jeito nenhum.
Estou com dois problemas, um de cast quando utilizo transactions ou um de sessão fechada quando não.
Help!
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>
<property name="configLocation" value="hibernate.cfg.xml"/>
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="txManager" />
<property name="transactionAttributeSource">
<value>
wmc.affiliate.model.simple.SimpleCustomerManager.*=PROPAGATION_REQUIRES_NEW,-Exception
</value>
</property>
</bean>
<bean id="customerManager" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>wmc.affiliate.orm.model.manager.CustomerManager</value>
</property>
<property name="target">
<bean class="wmc.affiliate.model.simple.SimpleCustomerManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
</beans>
Agora a interface, implementação e chamada!
Customermanager
package wmc.affiliate.orm.model.manager;
import java.util.List;
import wmc.affiliate.orm.model.Customer;
public interface CustomerManager {
public List<Customer> listCustomers();
}
SimpleCustomerManager
package wmc.affiliate.model.simple;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import wmc.affiliate.orm.model.Customer;
import wmc.affiliate.orm.model.manager.CustomerManager;
public class SimpleCustomerManager implements CustomerManager {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public SessionFactory getSessionFactory() {
return this.sessionFactory;
}
@SuppressWarnings("unchecked")
@Override
public List<Customer> listCustomers() {
List<Customer> customers = null;
Session session = SessionFactoryUtils.getSession(getSessionFactory(), false);
customers = session.createCriteria(Customer.class).list();
return customers;
}
}
E alguns testes…
package wmc.affiliate.orm;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import wmc.affiliate.model.simple.SimpleCustomerManager;
import wmc.affiliate.orm.model.Customer;
import wmc.affiliate.orm.model.Email;
import wmc.affiliate.orm.model.manager.CustomerManager;
public class InsertCustomerEmail {
public static void main(String[] args) {
Customer customer = new Customer();
customer.setName("Lucas");
customer.setLastName("Gertel");
customer.setPhone("0000");
Email email = new Email();
email.setEmail("[email removido]");
email.setCustomer(customer);
Email email2 = new Email();
email.setEmail("[email removido]");
email2.setCustomer(customer);
List<Email> emails = new ArrayList<Email>();
emails.add(email);
emails.add(email2);
customer.setEmails(emails);
Resource resource = new FileSystemResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
//ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Object object = factory.getBean("customerManager");
System.out.println(object.toString());
//SimpleCustomerManager customerManager = (SimpleCustomerManager)object;
//CustomerManager customerManager = (SimpleCustomerManager)factory.getBean("customerManager");
/*
List<Customer> customers = customerManager.listCustomers();
for (Customer customer2 : customers) {
System.out.println(customer2.getLastName());
List<Email> emails2 = customer2.getEmails();
for (Email email3 : emails2) {
System.out.println(email3.getEmail());
}
}
*/
}
}
Alguém sabe o que pode estar errado?
Abraços a todos.