2012 10:45:12 PM org.apache.catalina.core.StandardService startInternalINFO: Starting service CatalinaOct 2, 2012 10:45:12 PM org.apache.catalina.core.StandardEngine startInternalINFO: Starting Servlet Engine: Apache Tomcat/7.0.302) pegue a versao mais atual do full-hibernate-plugin-for-struts2 e verifique as libsO projeto novo deve ficar com a seguinte estrutura :Figura 39- Visao do projeto p/implementar o SpringFigura 40- Visao do projeto p/implementar o Spring- Libsusei o recurso de mapeamento p/ gerar a classe Customer3) Crie a interface ContatoBoFigura 41 - Adicionando um BO para o ContatoJava :package com.springlesson09.model;import java.util.List;public interface ContatoBo { public void saveOrUpdateContato(Contato contato); public List<Contato> listContato(); public Contato listContatoById(Integer contatoId); public void deleteContato(Integer contatoId);}4) Implemente a interface ContatoBoFigura 42 - Implementando a Interface do BOFigura 43 - Implementando a Interface do BO, pelo NBJava :package com.springlesson09.model;import com.springlesson09.dao.CustomerDAO;import java.util.List;public class CustomerBoImpl implements CustomerBo { CustomerDAO customerDAO; //DI via Spring public void setCustomerDAO(CustomerDAO customerDAO) { this.customerDAO = customerDAO; } @Override public void addCustomer(Customer customer) { customerDAO.addCustomer(customer); } @Override public List<Customer> listCustomer() { return customerDAO.listCustomer(); } }5) Verifique a classe de implementacao do ContatoDAOUsaremos os metodos do hibernate e nao da nossa implementacao ; observe :ContatoDAOImpl.javapackage com.springlesson09.dao;import com.googlecode.s2hibernate.struts2.plugin.annotations.SessionTarget;import com.googlecode.s2hibernate.struts2.plugin.annotations.TransactionTarget;import com.springlesson09.model.Contato;import java.util.List;import org.hibernate.Session;import org.hibernate.Transaction;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class ContatoDAOImpl extends HibernateDaoSupport implements ContatoDAO { @SessionTarget Session session; @TransactionTarget Transaction transaction; /** * * @param contato */// @Override public void saveOrUpdateContato(Contato contato) { try {// session.saveOrUpdate(contato); session.save(contato); } catch (Exception ex) { transaction.rollback(); java.util.logging.Logger.getLogger(ContatoDAOImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } } /** * * @return */// @SuppressWarnings("unchecked")// @Override public List<Contato> listContato() { List<Contato> contatos = null; try { contatos = session.createQuery("from Contato").list(); } catch (Exception ex) { java.util.logging.Logger.getLogger(ContatoDAOImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } return contatos; }// @Override public Contato listContatoById(Integer contatoId) { Contato contato = null; try { contato = (Contato) session.get(Contato.class, contatoId); } catch (Exception ex) { java.util.logging.Logger.getLogger(ContatoDAOImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } return contato; }// @Override public void deleteContato(Integer contatoId) { try { Contato contato = (Contato) session.get(Contato.class, contatoId); session.delete(contato); } catch (Exception ex) { transaction.rollback(); java.util.logging.Logger.getLogger(ContatoDAOImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } }}6) Agora vamos criar a action p/ Contatovou chmar de outro nome ContatoSpringAction.java p/ enfatizar o uso do SpringJava :package com.springlesson09.service;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ModelDriven;import com.springlesson09.dao.ContatoDAO;import com.springlesson09.dao.ContatoDAOImpl;import com.springlesson09.model.Contato;import com.springlesson09.model.ContatoBo;import java.util.ArrayList;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;public class ContatoSpringAction implements ModelDriven { Contato contato = new Contato(); List<Contato> contatoList = new ArrayList<Contato>(); ContatoDAO contatoDAO = new ContatoDAOImpl(); ContatoBo contatoBo; @Override public Object getModel() { return contato; } public Contato getContato() { return contato; } public void setContato(Contato contato) { this.contato = contato; } public List<Contato> getContatoList() { return contatoList; } public void setContatoList(List<Contato> contatoList) { this.contatoList = contatoList; } public ContatoDAO getContatoDAO() { return contatoDAO; } public void setContatoDAO(ContatoDAO contatoDAO) { this.contatoDAO = contatoDAO; } public void setContatoBo(ContatoBo contatoBo) { this.contatoBo = contatoBo; } public String execute() throws Exception { return sync(); } public String sync() throws Exception { return "success"; } public String listcontato() throws Exception { contatoList = contatoDAO.listContato(); return sync(); } public String saveOrUpdateContato() throws Exception { contatoDAO.saveOrUpdateContato(contato); //reload contatoList = null; contatoList = contatoDAO.listContato(); return sync(); } public String listContatoById() throws Exception { contato = contatoDAO.listContatoById(contato.getId()); return sync(); } public String deleteContato() throws Exception { HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST); contatoDAO.deleteContato(Integer.parseInt(request.getParameter("id")));// contatoDAO.deleteContato(contato.getId()); contatoList = null; contatoList = contatoDAO.listContato(); return sync(); } public String edit()