Integração em aplicações Web: Struts + Spring + Hibernate
14 respostas
jbneto
Salve salve galera,
Estou precisando integrar Spring + Struts + Hibernate em um sistema Web na empresa onde trabalho atualmente. Mas não consigo encontrar um material explicativo, principalmente da integração entre Struts e Spring, pois entre Spring e Hibernate eu já desenrolei.!
Qualquer ajuda será bem vinda, grande abraço pessoal. E um ótimo final de semana para todos.! 8)
Pessoal de início eu estou integrando Hibernate + Spring e só depois vou integrar com Struts… Mas mesmo assim eu não estou conseguindo, abaixo segue meu applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jee="http://www.springframework.org/schema/jee"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"><!-- Declaração da Session Factory --><beanid="sessionFactory"scope="singleton"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><propertyname="annotatedClasses"><list><value>br.com.srv.model.Celular</value></list></property><propertyname="hibernateProperties"><props><propkey="hibernate.show_sql">false</prop><propkey="hibernate.format_sql">false</prop><propkey="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop><propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><propkey="hibernate.connection.pool_size">1</prop><propkey="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop><propkey="hibernate.connection.url">jdbc:mysql://localhost/rastrobr</prop><propkey="hibernate.connection.username">root</prop><propkey="hibernate.connection.password">1234</prop></props></property></bean><!-- Permite a utilização da anotação @Transaction --><tx:annotation-driventransaction-manager="transactionManager"/><beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><propertyname="sessionFactory"ref="sessionFactory"/></bean><!-- Declaração dos Objetos de Acesso a Dados --><beanid="celularDAO"class="br.com.srv.dao.CelularDao"><propertyname="sessionFactory"ref="sessionFactory"/></bean></beans>
E agora segue o meu web.xml:
<!-- Inicialização do Contexto do Spring --><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class></listener>
javax.servlet.ServletException: java.lang.Exception: Não foi possível encontrar os celulares
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
org.securityfilter.filter.SecurityFilter.doFilter(SecurityFilter.java:188)
Aparece esse erro aí no browser… obs.: Não estou, ainda integrando Struts + Spring, apenas Spring+Hibernate.
jbneto
Eu também tenho que declarar o Service que faz a chamada ao Dao no applicationContext.xml???
Eu queria mexer, por enquanto, apenas na camada de persistencia. Ou seja, deixar os Actions e Services de lado… e alterar apenas os DAOs para trabalhar com Spring e Hibernate. É possível?
packagebr.com.srv.service;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.springframework.transaction.annotation.Transactional;importbr.com.srv.dao.CelularDao;importbr.com.srv.model.Celular;@Transactional(readOnly=false)publicclassCelularService{privateCelularDaocelularDao;publicCelularDaogetCelularDao(){returncelularDao;}publicvoidsetCelularDao(CelularDaocelularDao){this.celularDao=celularDao;}publicCelularfindByCodVeiculo(LongcodVeiculo)throwsException{Celularcelular=null;try{ApplicationContextcontext=newClassPathXmlApplicationContext("WEB-INF/applicationContext.xml");celularDao=(CelularDao)context.getBean("celularDAO");celular=celularDao.findById(codVeiculo);}catch(Exceptione){System.out.println(e);thrownewException("Não foi possível encontrar os celulares");}returncelular;}}
Mas quando eu subo o tomcat ele vai carregar o applicationContext dá o seguinte erro no console:
Ele não está conseguindo criar o bean ‘celularService’, o que eu estou fazendo de errado??? :?
rubensdemelo
Fora dessa classe, vc consegue acessar o bean? (em uma classe de testes por exemplo)
Vc já debugou e viu o que chega nessa linha:
rubensdemelo
Se for usar o struts2, use o maven
mvn archetype:generate:3
O maven cria um projeto prontinho, com struts2 + hibernate + spring.
jbneto
Rubens, a aplicação naum tah nem rodando cara… esse erro explode no console quando eu starto o tomcat.!
E outra coisa, estou trabalhando em um sistema que já existe e é um pouco antigo, portanto, ele já trabalha com Struts 1… e a galera da empresa quer que eu ponha Hibernate e Spring.!
rubensdemelo
}catch (Exception e) {
System.out.println(e);
throw new Exception("Não foi possível encontrar os celulares");
}
Tira essa parte do código ou então coloque uma exceção mais específica e veja qual é a exceção.
Sem isso vai ser impossível saber qual é a exceção lançada, afinal vc está capturando a exceção-mãe.