Problema de arquitetura com spring/jpa/jsf

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:

[code]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;
}		

}
[/code]

[code]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>{
}[/code]

[code]@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();
	}
	[/code]
<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>

[code]<?xml version="1.0" encoding="UTF-8"?>

<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>
[/code]

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

[code]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)
[/code]

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

vlw

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

[quote=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[/quote]

vlw a força cara…

entao…esta sim…

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

vc tem algum ideia do q esta acontecendo?
vlw

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.

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