Problema de arquitetura com spring/jpa/jsf

4 respostas
cs.santos0

Iai pessual, blz?

to montando a arquitetura de uma aplicação aki, porem estou com problemas nessa integracao na hora de persistir num vai nem com reza braba....

eu tenho:

package br.com.ams.dao;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br.com.ams.exception.DAOException;

@Transactional(readOnly=true, propagation=Propagation.REQUIRED)
public abstract class JpaDao<T, PK extends Serializable> implements GenericDao<T, PK> {	

	@PersistenceContext
	protected EntityManager entityManager;

	private Class<T> oClass;
	
	@SuppressWarnings("unchecked")
	public JpaDao(){
		this.oClass = (Class<T>) ((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];  
	}
	
	@Transactional(readOnly=false, propagation=Propagation.REQUIRED)
	public void save(T model) throws DAOException{			
		this.getEntityManager().persist(model);		
	}

	@Transactional(readOnly=false, propagation=Propagation.REQUIRED)
	public void delete(T model) throws DAOException{		   
		model = this.getEntityManager().merge(model);  
		this.getEntityManager().remove(model);  
	}

	@Transactional(readOnly=false, propagation=Propagation.REQUIRED)
	public void update(T model) throws DAOException{
		this.getEntityManager().merge(model); 
	}
	
	public T findById(PK id) throws DAOException{
		return this.getEntityManager().find(oClass, id);
	}

	@SuppressWarnings("unchecked")
	public List<T> listAll() throws DAOException{		 
        return this.getEntityManager().createQuery("From " + oClass.getSimpleName()).getResultList();
	}	
	
	@SuppressWarnings("unchecked")
	public Class getObjectClass(){
		return this.oClass;
	}

	public EntityManager getEntityManager() {		
		if(this.entityManager == null){
			throw new  IllegalStateException("EntityManager is null. Check That");
		}
		return entityManager;
	}

	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}		
}
import org.springframework.stereotype.Repository;

import br.com.ams.dao.JpaDao;
import br.com.ams.entity.Product;

@Repository
public class ProductDao extends JpaDao<Product, Integer>{
}
@Controller
public class TesteHandler {
	
	private Product model;
	
	@Autowired		
	private ProductDao dao;
	
	private static final Logger log = Logger.getLogger(TesteHandler.class);		
	
	public TesteHandler(){
		this.model = new Product();
	}	
	
	public void addPessoa(){			
		try {
			model.setName("Ciro Santos JPA JPA");
			this.dao.save(model);
			System.out.println("Commited");				
			
		} catch (DAOException e) {			
			e.printStackTrace();
			log.error(e);
		}finally{
			this.model = new Product();
		}
<application>
     <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>

<managed-bean>
		<managed-bean-name>testeHandler</managed-bean-name>
		<managed-bean-class>br.com.ams.handler.TesteHandler</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>			
	</managed-bean>
<?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:jee="http://www.springframework.org/schema/jee"
	xmlns:lang="http://www.springframework.org/schema/lang"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-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/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	
	<context:annotation-config />	

	<bean id="springApplicationContext" class="br.com.ams.SpringApplication" />
	
	<context:component-scan base-package="br.com.ams.dao">
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
	</context:component-scan>
	
	 <!-- <context:component-scan base-package="br.com.ams.*"/>--> 
	
	<tx:annotation-driven transaction-manager="transactionManager" />

	<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

	<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" />

	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="emf" />
	</bean>
	
	<bean id="productDao" class="br.com.ams.dao.jpa.ProductDao" />

	<bean id="log4jConfigurer"
		class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
		<property name="targetClass">
			<value>org.springframework.util.Log4jConfigurer
			</value>
		</property>
		<property name="targetMethod">
			<value>initLogging</value>
		</property>
		<property name="arguments">
			<list>
				<value>classpath:log4j.xml</value>
			</list>
		</property>
	</bean>

</beans>

porem da esse erro ao chamar o metodo de adicionar no meu mbean:

javax.faces.FacesException: #{testeHandler.addPessoa}: java.lang.NullPointerException
	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
	javax.faces.component.UICommand.broadcast(UICommand.java:387)
	org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
	org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
	org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
	org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
	org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

javax.faces.el.EvaluationException: java.lang.NullPointerException
	javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	javax.faces.component.UICommand.broadcast(UICommand.java:387)
	org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
	org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
	org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
	org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
	org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

java.lang.NullPointerException
	br.com.ams.handler.TesteHandler.addPessoa(TesteHandler.java:31)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.apache.el.parser.AstValue.invoke(AstValue.java:131)
	org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
	javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	javax.faces.component.UICommand.broadcast(UICommand.java:387)
	org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
	org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
	org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
	org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
	org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

alguem ai poderia me dar uma forca..nao to sabendo o que esta errado...

vlw

4 Respostas

M

Fala, cs.santos0!

cara, segundo o stack trace, tá dando erro na linha 31 da sua classe TestHandler, mas essa linha não aparece no trecho de código que você colocou.

Posta o resto do código pra gente dar uma olhada!

[]s,
Takeda

cs.santos0

mtakeda:
Fala, cs.santos0!

cara, segundo o stack trace, tá dando erro na linha 31 da sua classe TestHandler, mas essa linha não aparece no trecho de código que você colocou.

Posta o resto do código pra gente dar uma olhada!

[]s,
Takeda

vlw a força cara…

entao…esta sim…

é essa linha aqui:
this.dao.save(model);

vc tem algum ideia do q esta acontecendo?
vlw

danieldomingues86

Olá,

Olha pelo que voce diz se a linha que está dando erro é essa : this.dao.save(model);
Vejo que o erro só pode estar relacionado com a injeção do seu dao, pois o objeto model está criado

@Autowired private ProductDao dao;
De uma olhada nas configurações do applicationContext.xml do Spring como está sendo feito
e se no faces-config.xml, a configuração de delegação de responsabilidades está sendo feita do JSF para o Spring
poder gerenciar seus Beans.

Abraço.

M

O seu dao está configurado no XML como productDao, mas o seu atributo chama dao.
Tente renomear em um dos dois lugares e deixar com o mesmo nome (por exemplo, mude na classe para productDao, deixando igual no XML.

Além disso, recomendo que a sua classe tenha um setter para esse atributo productDao

Criado 27 de maio de 2010
Ultima resposta 27 de mai. de 2010
Respostas 4
Participantes 3