Caros, já é possível utilizar o Spring 3 com Struts 2?
Estou tentando implementar o Spring 3 como IoC e para integrar com o Hibernate 3, porem quando rodo tudo isso no Struts 2 me dá a impressão que a injeção não acontece na classe UsuarioServiceImpl:
LoginAction.java (ainda não aplicado o IoC)
package br.com.internetsistemas.nucleo.action;
import br.com.internetsistemas.nucleo.model.Usuario;
import br.com.internetsistemas.nucleo.service.UsuarioServiceImpl;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 1L;
public String login() {
UsuarioServiceImpl usuarioService = new UsuarioServiceImpl();
Usuario usuario = usuarioService.retrieveUser(1L);
System.out.println(">>>" + usuario);
return SUCCESS;
}
}
UsuarioServiceImpl.java
package br.com.internetsistemas.nucleo.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import br.com.internetsistemas.nucleo.model.Usuario;
import br.com.internetsistemas.nucleo.model.UsuarioDAO;
@Service
public class UsuarioServiceImpl implements UsuarioService {
@Autowired(required = true)
private UsuarioDAO usuarioDAO;
@Transactional
public Usuario createUser(Usuario usuario) {
return this.usuarioDAO.persistOrMerge(usuario);
}
@Transactional(readOnly = true)
public Usuario retrieveUser(Long id) {
System.out.println(usuarioDAO); // Aqui o resultado é null
return this.usuarioDAO.findById(id);
}
}
UsuarioDAOImpl.java
package br.com.internetsistemas.nucleo.model;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class UsuarioDAOImpl implements UsuarioDAO {
@Autowired(required = true)
private SessionFactory sessionFactory;
public Usuario findById(Long id) {
return (Usuario) this.sessionFactory.getCurrentSession().createQuery(
"SELECT u FROM nuc_usuarios u WHERE u.cod_usuarios = ?")
.setParameter(0, id).uniqueResult();
}
public Usuario persistOrMerge(Usuario usuario) {
return (Usuario) this.sessionFactory.getCurrentSession().merge(usuario);
}
}
Usuario.java
package br.com.internetsistemas.nucleo.model;
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
* Classe bean de usuário.
*
* @version 1.0
* @author felipe.fontoura
*/
@Entity
@Table(name = "nuc_usuarios")
public class Usuario {
@Id
@GeneratedValue
@Column(name = "cod_usuarios")
private Long id;
@Column(name = "usuario", nullable = false, length = 45)
private String login;
@Column(name = "senha", nullable = false, length = 45)
private String senha;
@Column(name = "nome", nullable = true, length = 45)
private String nome;
@Column(name = "email", nullable = true, length = 80)
private String email;
@Column(name = "ultimo_login", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Calendar ultimoLogin;
public Usuario() {
ultimoLogin = Calendar.getInstance();
}
public Long getId() {
return id;
}
public String getLogin() {
return login;
}
public String getSenha() {
return senha;
}
public String getNome() {
return nome;
}
public String getEmail() {
return email;
}
public Calendar getUltimoLogin() {
return ultimoLogin;
}
public void setId(Long id) {
this.id = id;
}
public void setLogin(String login) {
this.login = login;
}
public void setSenha(String senha) {
this.senha = senha;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setEmail(String email) {
this.email = email;
}
public void setUltimoLogin(Calendar ultimoLogin) {
this.ultimoLogin = ultimoLogin;
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="nucleo" extends="struts-default">
<action name="login" method="login"
class="br.com.internetsistemas.nucleo.action.LoginAction">
<result name="success">/jsp/nucleo/login.jsp</result>
</action>
</package>
</struts>
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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" 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/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="br.com.internetsistemas" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean>
<tx:annotation-driven />
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Obrigado, abraços!