GlassFish V3 + JSF 1.2 + Spring 2.5 + Hibernate

2 respostas
K

Olá Senhores.

Estou com problemas para integrar o JSF com o Spring. Segue meus arquivos de configuração;

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>TesteJSF_Facelets</display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<context-param>
		<param-name>org.richfaces.SKIN</param-name>
		<param-value>blueSky</param-value>
	</context-param>

	<!-- Making the RichFaces skin spread to standard HTML controls -->
	<context-param>
		<param-name>org.richfaces.CONTROL_SKINNING</param-name>
		<param-value>enable</param-value>
	</context-param>

	<!-- Configuracao do Spring -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/aplicationContext.xml</param-value>
	</context-param>

	<!-- Listener do Spring -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Defining and mapping the RichFaces filter -->
	<filter>
		<display-name>RichFaces Filter</display-name>
		<filter-name>richfaces</filter-name>
		<filter-class>org.ajax4jsf.Filter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>richfaces</filter-name>
		<servlet-name>Faces Servlet</servlet-name>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
	</filter-mapping>

	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>
	<context-param>
		<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
		<param-value>.xhtml</param-value>
	</context-param>
</web-app>

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 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-facesconfig_1_2.xsd">
 <navigation-rule>
  <navigation-case>
   <from-outcome>ok</from-outcome>
   <to-view-id>/pages/ok.xhtml</to-view-id>
  </navigation-case>
 </navigation-rule>
 <application>
  <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
 </application>
</faces-config>

aplicationContext.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:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/exata" />
		<property name="username" value="exata" />
		<property name="password" value="exata" />
	</bean>
	
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="jpaVendorAdapter">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
				<property name="database" value="MYSQL"/>
				<property name="showSql" value="true" />
				<property name="generateDdl" value="false" />
				<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
			</bean>
		</property>
	</bean>
	
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <tx:annotation-driven mode="proxy" />
    <context:annotation-config />
		
	<bean id="enderecoDao" class="br.com.exata.dao.JPAEnderecoDaoImpl">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>
	
	<bean id="endercoService" class="br.com.exata.service.EnderecoServiceImpl">
		<property name="enderecoDao" ref="enderecoDao" />
	</bean>
</beans>

interfaceDAO

public interface EnderecoDAO {
	Integer createEndereco(Endereco customer);
    
    void updateEndereco(Endereco customer);
    
    void deleteEndereco(Endereco customer);
    
    Endereco findEnderecoById(Integer id);
    
    List<Endereco> findAllEnderecos();
    
    List<Endereco> findEnderecosByName(String name);
}

JPAEnderecoDaoImpl

import org.springframework.orm.jpa.support.JpaDaoSupport;

import br.com.xxx.dominio.Endereco;

public class JPAEnderecoDaoImpl extends JpaDaoSupport implements EnderecoDAO {

	
    public Integer createEndereco(Endereco endereco) {
        
        getJpaTemplate().persist(endereco);
        getJpaTemplate().flush();
        
        return endereco.getId();
    }

    public void deleteEndereco(Endereco endereco) {
        getJpaTemplate().remove(endereco);

    }

    public List<Endereco> findAllEnderecos() {
        return (List<Endereco>) getJpaTemplate().find("FROM Endereco c");
    }
    
    public Endereco findEnderecoById(Integer id) {
        return getJpaTemplate().find(Endereco.class, id);
    }

    public List<Endereco> findEnderecosByName(String endereco) {
        return (List<Endereco>) getJpaTemplate().find("FROM Endereco c Where c.name LIKE ?1",endereco);
    }

    public void updateEndereco(Endereco endereco) {
        getJpaTemplate().merge(endereco);

   }
}

interface EnderecoService

import java.util.List;

import br.com.xxx.dominio.Endereco;

public interface EnderecoService {
	Integer createEndereco(Endereco endereco);

	void updateEndereco(Endereco endereco);

	void deleteEndereco(Endereco endereco);

	Endereco findEnderecoById(Integer id);

	List<Endereco> findAllEnderecos();

	List<Endereco> findEnderecosByName(String name);
}

EnderecoServiceImpl

import java.util.List;

import org.springframework.transaction.annotation.Transactional;

import br.com.xxx.dominio.Endereco;
import br.com.xxx.dao.EnderecoDAO;

@Transactional
public class EnderecoServiceImpl {

	private EnderecoDAO enderecoDao;

    public void setEnderecoDao(EnderecoDAO enderecoDao) {
        this.enderecoDao = enderecoDao;
    }

    public Integer createEndereco(Endereco endereco) {
        return enderecoDao.createEndereco(endereco);
    }

    public void deleteEndereco(Endereco endereco) {
        endereco = findEnderecoById(endereco.getId());
    }


    public void updateEndereco(Endereco endereco) {
        enderecoDao.updateEndereco(endereco);
    }

    @Transactional(readOnly = true)
    public List<Endereco> findAllEnderecos() {
        return enderecoDao.findAllEnderecos();
    }

    @Transactional(readOnly = true)
    public Endereco findEnderecoById(Integer id) {
        return enderecoDao.findEnderecoById(id);
    }

    @Transactional(readOnly = true)
    public List<Endereco> findEnderecosByName(String name) {
        return enderecoDao.findEnderecosByName(name);
    }
}

EnderecoBean

import java.util.List;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.xxx.dominio.Endereco;
import br.com.xxx.service.EnderecoService;

@Controller("enderecoBean")
@Scope("session")
public class EnderecoBean {
    
    @Resource
    private EnderecoService enderecoService;
    private Endereco endereco;
    private List<Endereco> enderecos;
    
    public EnderecoBean(){
        
        endereco = new Endereco();
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }
    
    
    public String cadastrar(){
        enderecoService.createEndereco(endereco);
        
        return "hello";
    }
    
    public String listar(){
    	enderecos = enderecoService.findAllEnderecos();
        System.out.println(enderecos.size());
        return "ok";
    }
}

Anexo esta um print das libs q estou usando.

Segue o erro que estou recebendo.

....

INFO: 30/07/10 10:03:38  INFO annotations.Version:43 <clinit> - Hibernate Annotations 3.5.0-Final

INFO: 30/07/10 10:03:38  INFO cfg.Environment:564 <clinit> - Hibernate 3.5.0-Final

INFO: 30/07/10 10:03:38  INFO cfg.Environment:597 <clinit> - hibernate.properties not found

INFO: 30/07/10 10:03:38  INFO cfg.Environment:775 buildBytecodeProvider - Bytecode provider name : javassist


WARNING: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/aplicationContext.xml]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/aplicationContext.xml]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:932)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:912)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:694)
	at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1947)
	at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1619)
	at com.sun.enterprise.web.WebApplication.start(WebApplication.java:90)
	at org.glassfish.internal.data.EngineRef.start(EngineRef.java:126)
	at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:241)
	at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:236)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:339)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:183)
	at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:272)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$900(CommandRunnerImpl.java:83)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224)
	at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:365)
	at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:204)
	at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
	at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:245)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:619)

WARNING: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/aplicationContext.xml]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/aplicationContext.xml]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:932)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:912)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:694)
	at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1947)
	at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1619)
	at com.sun.enterprise.web.WebApplication.start(WebApplication.java:90)
	at org.glassfish.internal.data.EngineRef.start(EngineRef.java:126)
	at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:241)
	at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:236)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:339)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:183)
	at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:272)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$900(CommandRunnerImpl.java:83)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224)
	at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:365)
	at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:204)
	at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
	at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:245)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:619)

INFO: 30/07/10 10:03:39  INFO common.Version:37 <clinit> - Hibernate Commons Annotations 3.2.0.Final

INFO: 30/07/10 10:03:39  INFO ejb.Version:42 <clinit> - Hibernate EntityManager 3.5.0-Final

INFO: 30/07/10 10:03:39  INFO ejb.Ejb3Configuration:512 configure - Processing PersistenceUnitInfo [
	name: punit
	...]

INFO: 30/07/10 10:03:39  INFO support.DefaultListableBeanFactory:399 destroySingletons - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@290049: defining beans [dataSource,entityManagerFactory,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,enderecoDao,endercoService]; root of factory hierarchy

INFO: 30/07/10 10:03:39 ERROR context.ContextLoader:215 initWebApplicationContext - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/aplicationContext.xml]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1337)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	
.....

Alguem sabe o que está errado ?

Desde já, obrigado !


2 Respostas

K

alguem tem idéia?

dandrop

Pelo que eu estou vendo é um Bug do Spring!

Atualiza para a versão 3.x que o erro desaparece!

Estou tentando encontrar um outro jeito para solucionar!

Abs!

Criado 30 de julho de 2010
Ultima resposta 22 de nov. de 2011
Respostas 2
Participantes 2