Problema cabuloso (JSF+Spring+JPA)

Boa noite.

Bom estou passando por um problema o qual não consegui resolver de jeito nenhum. A situação é a seguinte.

Estou querendo utilizar o Spring e o JPA para acessar ao banco de dados MySQL. Utilizando inversão de controle.

Para isso criei o seguinte applicationContext.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"
            xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean 
        id="testeDao" 
        class="tcs.dao.TesteDaoImpl">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </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.TopLinkJpaVendorAdapter">
                    <property name="showSql" value="true"/>
                    <property name="generateDdl" value="true"/>
                    <property name="databasePlatform" value="oracle.toplink.essentials.platform.database.HSQLPlatform"/>
                </bean>
            </property>
    
        <property name="loadTimeWeaver">
            <bean class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver"/>
        </property>
    </bean>

    <bean 
        id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/xxx"/>
        <property name="username" value="xxx" />
        <property name="password" value="xxx" />
    </bean>

    <bean 
        id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

Para chamar esse applicationContext, coloquei um listener no web.xml, dessa maneira:

<listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
 </listener>

Finalmente tenho uma classe .java que é a mesma referenciada no xml do applicationContext. que é a seguinte:

package tcs.dao;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.orm.jpa.support.JpaDaoSupport;
import tcs.model.Teste;

/**
 *
 * @author Thiago
 */
public class TesteDaoImpl extends JpaDaoSupport implements TesteDao {
    @PersistenceContext(unitName="TestePU")
    EntityManager em;
    public TesteDaoImpl()  {
    }
    
    public Teste getTeste()  {
        Teste teste= new Teste();
        teste.setEmaTeste("xxx@gmail.com");
        teste.setNomTeste("XXX");
        teste.setId(1);
        em.persist(teste);
        return teste;
    }

}

Bom eis o problema: Na hora que entra nessa classe java, a variável “em” esta null, entao na hora do em.persit ocorre o famoso NullPointerException.

Sou meio leigo nesse assunto de inversao de controle, spring…
o que estaria faltando fazer? nao estou encontrando a solução

Antes de mais nada Obrigado,
Thiago

neste post tem a resposta pra o que tu precisa :smiley:
http://www.urubatan.com.br/2006/11/23/suporte-do-spring-20-a-jpa-ficou-muito-bom-ainda-mais-se-usar-um-pouquinho-do-spring-annotation-junto-d/
só exclui a parte do spring-annotations se tu não vai usar ele :smiley:

Opa, vou tentar isso então. Mas, em tempo, esqueci de colocar minha classe do modelo aqui no topico.

Então:

package tcs.model;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author Thiago
 */
@Entity
@Table(name = "teste")
public class Teste implements Serializable {
    @Id
    @Column(name = "id", nullable = false)
    private Integer id;
    @Column(name = "NOM_TESTE", nullable = false)
    private String nomTeste;
    @Column(name = "EMA_TESTE", nullable = false)
    private String emaTeste;

    public Teste() {
    }

    public Teste(Integer id) {
        this.id = id;
    }

    public Teste(Integer id, String nomTeste, String emaTeste) {
        this.id = id;
        this.nomTeste = nomTeste;
        this.emaTeste = emaTeste;
    }

   ... getters ans setters

}

[quote=urubatan]neste post tem a resposta pra o que tu precisa :smiley:
http://www.urubatan.com.br/2006/11/23/suporte-do-spring-20-a-jpa-ficou-muito-bom-ainda-mais-se-usar-um-pouquinho-do-spring-annotation-junto-d/
só exclui a parte do spring-annotations se tu não vai usar ele :D[/quote]

Olá Urubatan
Eu fui checar o seu tópico, porém não sei se é algum problema aqui (testei com o Mozilla e IE) mas os códigos do persistence.xml e applicationContext.xml estão quebrados, na verdade, eles aparecem algumas letras apenas.

Poderia confirmar se com voce está OK? se sim, poderia postar aqui o código desses dois arquivos?

Obrigado Urubatan e meus parabéns pelo seu blog

pra mim tb esta quebrado, eu mandei exibir o codigo fonte e procurei o exemplo lá no meio da confusão! heheheheh

pessoal, aonde eu coloco o applicationContext.xml?

estou usando o netbeans 6 e coloquei dentro da pasta WEB-INF/applicationContext.xml

isso esta correto?