Bom dia!
Pessoal sou bem Novo ( em Java ) venho do MS-VFP e para aprendizado estou desenvolvendo uma aplicacao bem simples
apenas com o intuito de me adequar a linguagem estou lendo bastante a respeito, vendo exemplos etc…
e pelo que li resolvi utilizar as tecnologias que estão dispostas no projeto ( pequeno projeto ) mais estou encontrando
um problema, o log do Apache não é tão claro pra mim tem muitas informações … mais percebo o problema so não
sei como resolver.
de Framework existente no projeto eu coloquei o JSF 2, Spring 3 e JPA o Container Tomcat 7
usando a IDE Eclipse Helios
Bem o problema é que o Bean não esta sendo criado, ou a variavel que ira receber o objeto entityManager…
o log do Tomcat me diz isto mais … olhei e não sei como resolver
porque ja olhei o codigo da minha classe que representa o Controller, do DAO e não sei o que pode estar errado.
Se alguem puder me dar uma dica … coloco as informações que disponho abaixo
Bem o Log do Tomcat me da este erro:
[EL Finest]: 2011-03-21 00:17:30.318–ServerSession(14211340)–Thread(Thread[Thread-1,5,main])–End predeploying Persistence Unit contatoSpringJpa; session file:/C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/contatoSpringJpa/WEB-INF/classes/_contatoSpringJpa; state Predeployed; factoryCount 1
21/03/2011 00:17:30 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@26c7da: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,statusDAOImpl,em,org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor#0,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor]; root of factory hierarchy
21/03/2011 00:17:30 org.springframework.web.context.ContextLoader initWebApplicationContext
GRAVE: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘statusDAOImpl’: Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘em’ defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.reflect.UndeclaredThrowableException
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:341)
Bem abaixo tenho descrito como esta alguns arquivos que podem indicar o que estou fazendo de errado
Faces-Config.xml
<?xml version="1.0" encoding="UTF-8"?> org.springframework.web.jsf.el.SpringBeanFacesELResolverObs este arquivo de configuracao do JSF achei estranho qdo fui colocar a Variavel RESOLVER da forma como li em um livro
a IDE me deu uma mensagem … e bem ficou desta forma como eu peguei aqui no Forum mais olhei a documentação do
spring e não achei nada a respeito.
o applicationContext.xml
context:annotation-config/
<context:component-scan base-package=“br.com.dominio.controller”/>
<context:component-scan base-package=“br.com.dominio.dao”/>
<context:component-scan base-package=“br.com.dominio.entidades”/>
<!-- Classe responsavel pela gestao das entidades -->
<bean id="em"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="contatoSpringJpa" />
</bean>
<!-- Classe responsavel pela injecao do EntityManager nas classes
que usam a anotacoes @PersistenceContext -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<!-- Classe responsavel pela gestao das transacoes -->
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="em" />
</bean>
<!-- Marcacao de transacoes atraves de anotacoes -->
<tx:annotation-driven />
o arquivo java que representa o DAO ( StatusDAOImpl.java )
package br.com.dominio.dao;
import java.util.List;
import javax.persistence.*;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import br.com.dominio.entidades.Status;
@Repository
public class StatusDAOImpl implements StatusDAO {
@PersistenceContext
private EntityManager em ;
public StatusDAOImpl() {
}
@Transactional
public void insert(Status status) {
em.persist(status);
}
@Transactional
public Status findByPK(Object id) {
return em.find(Status.class, id);
}
@Transactional
public void update(Status status) {
em.merge(status);
}
@Transactional
public void delete(Status status) {
em.remove(status);
}
@Transactional
public List<Status> findAll() {
List<Status> result =
em.createQuery("SELECT p FROM Status").getResultList();
return result;
}
}
e por fim o meu controller ( StatusController.java )
package br.com.dominio.controller;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.springframework.transaction.annotation.Transactional;
import br.com.dominio.dao.StatusDAOImpl;
import br.com.dominio.entidades.Status;
@ManagedBean(name=“statusController”)
@ViewScoped
public class StatusController {
private StatusDAOImpl DAO;
private Status status;
private DataModel model;
public String novoStatus() {
this.status = new Status();
return "novo";
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
@Transactional
public DataModel getTodos() throws
Exception {
model = new ListDataModel(DAO.findAll()) ;
return model;
}
@Transactional
public String salvar() throws
Exception {
if(status.getId()==null)
DAO.insert(status);
else
DAO.update(status);
return "sucesso";
}
public Status getStatusFromEditOrDelete( ) {
status =
(Status) model.getRowData( );
return status;
}
@Transactional
public String excluir( )
throws Exception {
status = getStatusFromEditOrDelete( );
DAO.delete(status);
return "sucesso";
}
}
Bem Agradeço a quem puder me dar uma ajuda para que eu prossiga na proxima etapa da minha meta que é fazer as paginas
Robson Lira