Configuração Jndi + Glassfish + Spring + Hibernate + Jpa (puts)

Estou tentando configurar o glassfisfh 3 hibernete 3 spring 3 e jpa

Alguém sabe onde o vacilando. Obrigado pela força.



<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

     <!--
    <bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"  >
            <property name="persistenceUnitName"  value="TotalsatCommonTestPU" />
    </bean>

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


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

     <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName">
            <!--value>java:jndi_postgres_adm</value-->
            <value>jdbc/_financeiro</value>
        </property>
    </bean>



    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="persistenceUnitName" value="TotalsatCommonTestPU"   />
    </bean>

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

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



    <bean id="teste"  class="com.br.totalsat.common.Teste" />

</beans>




<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="TotalsatCommonTestPU" transaction-type="JTA">
        <jta-data-source>jdbc/_financeiro</jta-data-source>
  
    <properties />
    </persistence-unit>
</persistence>

  @PersistenceContext(name="persitenceFinaceiro")
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 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-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <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>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>

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

    
    <persistence-context-ref>
        <persistence-context-ref-name>persitenceFinaceiro</persistence-context-ref-name>
        <persistence-unit-name>TotalsatCommonTestPU</persistence-unit-name>
    </persistence-context-ref>

            
</web-app>

Se vc quer implementar via JPA, pq q vc não acessa direto via o DataSource definido no ‘persistence.xml’??!

Ah ninja, deixa eu adivinhar, vc não está usando netBeans, né?!! :shock:

To usando sim, não por preferencia e sim por normas da empresa.
Você tem um exemplo para me passar ?

Flavio,
(P/ 1 exemplo, 1º me fala a versão do seu netBeans.)

Bem, aparentemente vc não teve ainda 1 insight de p/ q q servem e como funcionam o “.LocalEntityManagerFactoryBean” o “.LocalContainerEntityManagerFactoryBean”.
Se vc obteve suas Classes de Domain Model (Entidades de Negócio) via Engenharia Reversa usando a tool do netBeans, a partir de seu Banco de Dados, e, pelo q vc falou, usando o GlassFish, provavelmente (e se o seu Projeto Java é Web) ela gerou 1 Peristence Unit refenciando 1 DataSource definido no Container (Se vc estivesse usando o TomCat, vc teria q definir este DataSource “na unha” lá no Context.xml; mas isto já “era outros 500” :o)

(Uma dica: sempre q vc criar/definir 1 DataSource declare seguindo o seguinte padrão: nomebasededadosDS )

Muito bem, se o seu DataSource estiver funcionando bem, vc pode criar um EM com a conexão “configurada”/definida na Peristence Unit do ‘persistence.xml’, usando o LocalEntityManagerFactoryBean ± assim:

<!-- JPA LocalEntityManagerFactoryBean (Se "persistenceUnitName" não é definido e só há 1 PU no persistence.xml, ela(ou a 1ª PU) é usada. --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" > <property name="jpaVendorAdapter"> <!-- customização do JPA Provider (neste caso o Hibernate). --> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="true"/> <property name="generateDdl" value="false"/> <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" /> </bean> </property > <property name="jpaProperties"> <props> <!-- Cria o Conections-Pooled DataSource usando a conexão definida na PersitenceUnit.--> <prop key="hibernate.c3p0.initialPoolSize">10</prop> <prop key="hibernate.c3p0.min_size">5</prop> <prop key="hibernate.c3p0.max_size">15</prop> <prop key="hibernate.c3p0.timeout">300</prop> <prop key="hibernate.c3p0.max_statements">50</prop> <prop key="hibernate.c3p0.idle_test_period">3000</prop> </props> </property> </bean>

Obs.: o ‘LocalContainerEntityManagerFactoryBean’ é outra opção q só deve ser usado caso vc deseja fazer o LookUp do DataSource via JNDI -> isto configurado diretamente no applicationContext do Spring.
(Se tiver + alguma dúvida, é só avisar! ;-)))

[Editado]P.S.: ah, caso queira configurar a transação via JTA e ver boas ideias em: http://springtips.blogspot.com/2008/06/spring-entitymanagerfactory-in-jta-and.html(Spring entityManagerFactory in jta and non-jta modes).

Cara valeu pela força, eu tive dando uma estudada e é oque meu chefe me pediu, para estabelecer uma conexão global e nao local pelo oque eu olhei na sua forma vc usa uma forma de conexão local, <bean id=“entityManagerFactory” class=“org.springframework.orm.jpa.LocalEntityManagerFactoryBean” > , ai eu vi umas configurações no pdf reference que vem junto do spring para fazer uma conexão global, então fiz o seguinte.


applicationContext.xml

&lt;jee:jndi-lookup id="dataSource" jndi-name="persitenceFinaceiro"/&gt;

&lt;bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" /&gt;

&lt;context:annotation-config /&gt;


&lt;bean id="dao"  class="com.br.totalsat.dao.Dao" /&gt;

// Porém quando coloco essa tag &lt;context:component-scan base-package="com.totalsat.control"&gt; ta exception, mas ela não seria obrigatória para eu injetar o dao ?

Meu percistence ta ´so assim 


&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"&gt;
  &lt;persistence-unit name="TotalsatCommonTestPU" transaction-type="JTA"&gt;
    &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;
    &lt;jta-data-source&gt;jdbc/_financeiro&lt;/jta-data-source&gt;
  
    &lt;class&gt;com.br.totalsat.common.Teste&lt;/class&gt;
    &lt;properties/&gt;
  &lt;/persistence-unit&gt;
&lt;/persistence&gt;


Me dao ta assim


 private EntityManager entityManager;

    public void salvar(Object object) {

        entityManager.clear();
        entityManager.persist(object);
        entityManager.flush();

    }

    public EntityManager getEntityManager() {
        return entityManager;
    }

   
    @PersistenceContext(name="persitenceFinaceiro")
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }


O managed bean em que eu injeto o Dao ta assim

public class Test {


    @Resource
    private Dao dao;

    public void save(){



        Teste test = new Teste();

        test.setNome("Flávio");

        dao.salvar(test);

    }

    public Dao getDao() {
        return dao;
    }

    public void setDao(Dao dao) {
        this.dao = dao;
    }

    


}


Meu web.xml ta assim
  &lt;listener&gt;
        &lt;listener-class&gt;
            org.springframework.web.context.ContextLoaderListener
        &lt;/listener-class&gt;
    &lt;/listener&gt;

    
    &lt;persistence-context-ref&gt;
        &lt;persistence-context-ref-name&gt;persitenceFinaceiro&lt;/persistence-context-ref-name&gt;
        &lt;persistence-unit-name&gt;TotalsatCommonTestPU&lt;/persistence-unit-name&gt;
    &lt;/persistence-context-ref&gt;


Seguinte esas é uma aplicação de teste, quando funcionar agente vai trabalhar em cima.

Agora pelo menos quando eu faço o deploy na esta mais dando exception, o problema é que quando eu dou um save ele ta dando nullPointer

Abrigado pela força vou dar uma olhada no link quq vc me passou.

Vou revisar.

[quote=Flavio machine]Cara valeu pela força, eu tive dando uma estudada e é oque meu chefe me pediu, para estabelecer uma conexão global e nao local pelo oque eu olhei na sua forma vc usa uma forma de conexão local, <bean id=“entityManagerFactory” class=“org.springframework.orm.jpa.LocalEntityManagerFactoryBean” > , ai eu vi umas configurações no pdf reference que vem junto do spring para fazer uma conexão global, então fiz o seguinte.
[/quote]Flavio, o ‘LocalEntityManagerFactoryBean’ cria 1 EntityManagerFactory usando a conexão padrão de sua PU, sendo q esta conexão pode ser definida tanto por acesso direto como referenciando 1 DataSource (q. por sua vez, é 1 recurso global do seu container). No seu caso, não importa qual EntityManagerFactory vc use, se ela referencia a sua PU (<persistence-unit name=“TotalsatCommonTestPU” transaction-type=“JTA”> ) e essa PU já referencia 1 DataSource (<jta-data-source>jdbc/_financeiro</jta-data-source> ): isto, por si só, já significa q a Factory de EntityManager cria 1 EntityManager usando 1 recurso global (o DataSource de seu Container) e isso usando o Transacional JTA.
Mas, tudo bem! Se ainda quer obter o DataSource através de configuração explicita no Spring: sem problema. Obs.: apenas ouvi dizer q quando vc injeta o ‘dataSource’ no “.LocalContainerEntityManagerFactoryBean” e a sua aplicação se tornar larga escala “pode ser” q ela fique 1 pouco + lenta. Mas, funcionando, é o q importa (p/- no 1º momento). Entretanto, percebo algumas coisas q são potenciais problemas:

[quote=Flavio machine]

&lt;bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" /&gt; [/quote] Aki vc alterou o nome padrão (transactionManager) do “.JtaTransactionManager” para “txManager”. Se não o referenciou explicitamente no <tx:annotation-driven/> pode ser q haja algum problema na parte transacional. :shock:

[quote=Flavio machine]

&lt;context:annotation-config /&gt; &lt;bean id="dao" class="com.br.totalsat.dao.Dao" /&gt; // Porém quando coloco essa tag &lt;context:component-scan base-package="com.totalsat.control"&gt; ta exception, mas ela não seria obrigatória para eu injetar o dao ? [/quote]Veja bem, vc deve injetar os seus Repositorys (no seu caso, DAOs) nos respectivos DomainServices. Isto geralmente era/é feito de forma declarativa no applicationContext.xml assim: &lt;!-- O Spring é 1 Container FrameWork, portanto, se configurado via XML, todos os Objetos (instanciados) tem q ser definidos como &lt;bean . --&gt; &lt;bean id="usuarioRepo" class="domain.repository.UsuarioRepo" /&gt; &lt;bean id="usuarioServiceFcd" class="domain.srvcFacade.UsuarioServiceFcd"&gt; &lt;property name="usuarioRepo" ref="usuarioRepo" /&gt; &lt;/bean&gt; O annotation-config /> e “component-scan” devem ser usados quando, em vez de via XML, vc deseja fazer Injeção de Dependencias via Java Annotations. Por exemplo, assim:

&lt;context:annotation-config/&gt; &lt;context:component-scan base-package="domain.srvcFacade,domain.repository" use-default-filters="false"&gt; &lt;context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/&gt; &lt;context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/&gt; &lt;!--context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/--&gt; &lt;/context:component-scan&gt; Creio q vc deve ter se equivocado no 'base-package=“com.totalsat.control” '. No meu exemplo, inicialmente eu consegui fazer funcionar (como vc pode observar) configurando o base-package como “domain”(o qual é o pacote base dos SubPacotes ‘srvcFacade’ e ‘repository’). (Esse pacote ‘control’ se refere ao FrontController, ou a 1 tipo de “Gerenciador”, algo +/- como 1 DomainService??!)

[quote=Flavio machine] Meu percistence ta ´so assim .. &lt;persistence-unit name="TotalsatCommonTestPU" transaction-type="JTA"&gt; ... Me dao ta assim .. @PersistenceContext(name=&quot;persitenceFinaceiro&quot;) public void setEntityManager(EntityManager entityManager) { ... [/quote]Vc declara sua PU como 'persistence-unit name=“TotalsatCommonTestPU” ’ e referencia como “persitenceFinaceiro”. Aconselho fortemente evitar essa ambiguidade, pq, mesmo q sua aplicação funcione, qq 1 q for ver o código não vai saber se ela usa a PU “TotalsatCommonTestPU” ou a PU “persitenceFinaceiro”. :shock:

[quote=Flavio machine].. public class Test { @Resource private Dao dao; ...Seguinte esas é uma aplicação de teste, quando funcionar agente vai trabalhar em cima.[/quote]Boa idéia. *2 Aliás, melhor ainda :idea:se vc encapsulasse o Domínio (Fluxo, Lógica e Regras de Negócio), Infra e Perisistência num Projeto JavaSE “Business-Core” (ou, de preferencia: Biblioteca de Classes) empacotado em um .JAR, q poderia servir várias Aplicações Cliente (apresentações), sendo importado por estas. Daí, vc poderia fazer JUnit Testes no topo dos DomainServices (neste testes, vc poderia testar a Persistencia e o recurso Transacional)[quote=Flavio machine]
Agora pelo menos quando eu faço o deploy na esta mais dando exception, o problema é que quando eu dou um save ele ta dando nullPointer
Abrigado pela força vou dar uma olhada no link quq vc me passou.[/quote]
O problema é que os casos de JUnit Testes não estão exatamente no mesmo contexto q os “Spring beans” (Objetos do Domínio (da Aplicação) instanciados e gerenciados pelo Spring). Este contexto dever ser criado usando outra abordagem (algo como: context = new ClassPathXmlApplicationContext(“applicationContext.xml” ); ). Para esta finalidade é desejável definir 1 ‘persistence.xml’ com 2 PU (1 com conexão configurada diretamente, pois vc não vai estar no Contexto Java Web/EE, e outra PU acessando realmente o DataSource q deve ser usando em Produção); e vc tb teria q manter 2 'applicationContext.xml’s: 1 p/ a App em Produção e o outro para Teste (p/ex.: ‘appTestContext.xml’). A vantagem disto é q vc pode fazer os testes totalmente independente de Container!! :mrgreen: Então, (atendendo a pedidos :lol: ) continuando o exemplo (JUnit no topo do Business-Core): (‘persistence.xml’) *1 <- mudei de idéia: vou colocar o exemplo em outro post pq este aki já está longo D+ (e tb p/ organização)! :roll:

Então, (atendendo a pedidos :lol: ) continuando o exemplo (JUnit no topo do Business-Core): Aki está o ‘persistence.xml’:&lt;persistence ... &gt; &lt;persistence-unit name="agendaJPA2-corePU" transaction-type="RESOURCE_LOCAL"&gt; &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt; &lt;!--non-jta-data-source&gt;java:/comp/env/jdbc/agendaDS&lt;/non-jta-data-source--&gt; &lt;properties&gt; &lt;property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/agenda"/&gt; &lt;property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/&gt; &lt;property name="javax.persistence.jdbc.user" value="root"/&gt; &lt;property name="hibernate.connection.password" value=""/&gt; &lt;property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/&gt; &lt;/properties&gt; &lt;/persistence-unit&gt; &lt;persistence-unit name="agendaJPAds-corePU" transaction-type="JTA"&gt; &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt; &lt;!--validation-mode&gt;NONE&lt;/validation-mode--&gt; &lt;jta-data-source&gt;jdbc/agendaDS&lt;/jta-data-source&gt; &lt;properties/&gt; &lt;/persistence-unit&gt; &lt;/persistence&gt; (Obs.: substitua todos “agenda” pelo nome da sua Base de Dados.) Agora o ‘appTestContext.xml’ (deve ser adicionado o’.LocalEntityManagerFactoryBean’ postado anteriormente): [code]<beans xmlns=… >
<!-- JPA LocalEntityManagerFactoryBean (Se “persistenceUnitName” não é definido e só há 1 PU no persistence.xml, ela(ou a 1ª PU) é usada. -->

&lt;!-- Transaction manager para um JPA EntityManagerFactory simples (alternativa ao JTA) --&gt;
&lt;bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"&gt;
    &lt;property name="entityManagerFactory" ref="entityManagerFactory"/&gt;
&lt;/bean&gt;

<!-- Instrui o Spring a realizar gerenciamento transacional declarativo automático nas classes anotadas.–>
<tx:annotation-driven/>

&lt;!-- PostProcessors para realizar injeção de recursos de acordo com a especificação JPA (@PersistenceContext, @PersistenceUnit). --&gt;
&lt;!-- Arquivo onde todos os Objetos (instanciados) declarados como &lt;bean . --&gt;
&lt;import resource="appObjetos.xml" /&gt;

</beans>[/code]
O ‘applicationContext.xml’ p/ ser usado p/ Aplicação em Produção (inclusive se vc deseja configurar o Transacional explicitamente no Spring usando a abordaem da JTA API): [code]<beans xmlns=… >
<!-- JNDI Lookup via JndiTemplate: esta setting permite lookUp da DataSource reBindada no UnitTest.–>
<bean id=“jndiTemplate” class=“org.springframework.jndi.JndiTemplate”>
<property name=“environment”>
<props>
<prop key=“java.naming.factory.initial”>com.sun.jndi.fscontext.RefFSContextFactory</prop>
<prop key=“java.naming.provider.url”>file:/</prop>
</props>
</property>
</bean>
<!-- Datasource de JNDI Lookup(via “jndiTemplate”) <- esta setting p/ ser usada em Produção: DataSource de Container Java.–>
<bean id=“jndiDataSource” class=“org.springframework.jndi.JndiObjectFactoryBean”>
<property name=“jndiTemplate”>
<ref bean=“jndiTemplate”/>
</property>
<property name=“jndiName”>
<value>java:/comp/env/jdbc/agendaDS</value>
</property>
</bean>

<!-- EntityManagerFactory <- DataSource de Container Java(Se há + de 1 PU no persistence.xml, o nome da PU deve ser determinado em persistenceUnitName).–>
<bean id=“entityManagerFactory” class=“org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean”>
<!-- esta setting p/ ser usada em Produção: DataSource de Container Java.–>
<property name=“dataSource” ref=“jndiDataSource”></property>
<property name=“persistenceUnitName” value=“agendaJPAds-jarPU” />
<property name=“jpaPropertyMap”>
<map>
<entry key=“hibernate.transaction.manager_lookup_class” value=“org.hibernate.transaction.JBossTransactionManagerLookup”/>
<entry key=“hibernate.transaction.flush_before_completion” value=“true”/>
<entry key=“hibernate.transaction.auto_close_session” value=“true”/>
<entry key=“hibernate.current_session_context_class” value=“jta”/>
<entry key=“hibernate.connection.release_mode” value=“auto”/>
</map>
</property>
<!-- custom implementation p/ enriquecer o PersistenceUnitInfo read from the persistence.xml
JPA configuration file with the JTA DataSource, specifying the JTA datasource directly in
the Spring configuration file has the advantage that we can use a direct reference to the
datasource instead of using a JNDI name as requied by the jta-data-source setting in the
persistence.xml file -->
<property name=“persistenceUnitPostProcessors”>
<list>
<!-- Obs.: a Classe deste Objeto, “JtaPersistenceUnitPostProcessor”, deve ser definida na App.–>
<bean class=“JtaPersistenceUnitPostProcessor”>
<property name=“jtaMode” value=“true”></property>
<property name=“jtaDataSource” ref=“jndiDataSource”></property>
</bean>
</list>
</property>
<!-- customização do JPA Provider (neste caso o Hibernate). -->
<property name=“jpaVendorAdapter”>
<bean class=“org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter”>
<property name=“showSql” value=“true” />
<property name=“generateDdl” value=“false” />
<!–property name=“database” value=“MYSQL” /–>
<property name=“databasePlatform” value=“org.hibernate.dialect.MySQL5Dialect” />
</bean>
</property>
</bean>

<!-- JTA Transaction Manager este setting p/ ser usada em Produção: Container Java.–>
<bean id=“transactionManager” class=“org.springframework.transaction.jta.JtaTransactionManager”>
<property name=“transactionManagerName” value=“java:/TransactionManager”></property>
<property name=“autodetectUserTransaction” value=“false”></property>
</bean>

<!-- Instrui o Spring a realizar gerenciamento transacional declarativo automático nas classes anotadas.–>
<tx:annotation-driven/>

&lt;!-- PostProcessors para realizar injeção de recursos de acordo com a especificação JPA (@PersistenceContext, @PersistenceUnit). --&gt;
&lt;bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/&gt;

&lt;!-- PostProcessors para realizar a conversão de exceções nas classes @Repository (das exceções nativas como JPA PersistenceExceptions to Spring's DataAccessException). --&gt;
&lt;bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/&gt;


&lt;!-- Será automaticamente transacional graças ao @Transactional. EntityManager irá ser auto-injetado graças ao @PersistenceContext. PersistenceExceptions irá ser auto-convertido graças ao @Repository. --&gt;
&lt;!-- Arquivo onde todos os Objetos (instanciados) declarados como &lt;bean . --&gt;
&lt;import resource="appObjetos.xml" /&gt;

</beans>[/code]Obs.: a implementação da Classe “JtaPersistenceUnitPostProcessor”, pode ser obtida no link fornecido anteriormente.
Agora o “appObjetos.xml” (usado por ambos 'app*Context.xml’s):[code]<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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/context http://www.springframework.org/schema/context/spring-context-2.5.xsd”>

&lt;!-- O Spring é 1 Container FrameWork, portanto, se configurado via XML, todos os Objetos (instanciados) tem q ser definidos como &lt;bean . --&gt;
    &lt;!-- a não ser que esteja configurado com (Injeção de Dependecia via) Annotation Component-Scan. --&gt;
    &lt;context:annotation-config/&gt;
    &lt;context:component-scan base-package="domain.srvcFacade,domain.repository" use-default-filters="false"&gt;
        &lt;context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/&gt;
        &lt;context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/&gt;
        &lt;!--context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/--&gt;
    &lt;/context:component-scan&gt;
&lt;bean id="usuario" class="domain.model.Usuario" scope="session" /&gt;
&lt;!--bean id="usuarioRepo" class="domain.repository.UsuarioRepo" /&gt;
&lt;bean id="usuarioServiceFcd" class="domain.srvcFacade.UsuarioServiceFcd"&gt;
    &lt;property name="usuarioRepo" ref="usuarioRepo" /&gt;
&lt;/bean--&gt;
&lt;bean ... &gt;

</beans>[/code]Eventualmente 1 DAO seguindo o padrão: [code]
package domain.repository;

@Transactional
//@Scope(“prototype”) // esta @ somente no caso DI via Annotations
@Repository
public class UsuarioRepo {
@PersistenceContext
private EntityManager em;
// demais codificações de Persistencia/Acesso a Dados…
}[/code]O ‘Domain Service’: [code]package domain.srvcFacade;

@Service
public class UsuarioServiceFcd {
@Autowired // esta @ somente no caso DI via Annotations (context:component-scan)
private UsuarioRepo usuarioRepo;

/** demais codificações de Serviço de Domínio... */

}[/code]E finalmente o Caso de Teste ‘UsuarioServiceFcdTest.java’: voi la[code]public class UsuarioServiceFcdTest {

private ApplicationContext context;
UsuarioServiceFcd usuarioServiceFcd;

//
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
System.setProperty(Context.PROVIDER_URL, "file:/"); // change provider url to a platform specific path
Context registry = new InitialDirContext();
// create a new connection pool data source, read the properties
// file
// and bind it to a name
ComboPooledDataSource cpds = new ComboPooledDataSource();
Properties dsProperties = new Properties();
FileInputStream cpdsPropFile = new FileInputStream("C:/…pathDirSeuProjeto…/test/jdbc.properties");// myconnection.properties created in step1
dsProperties.load(cpdsPropFile);
try {
cpds.setDriverClass(dsProperties.getProperty("driverClass"));
} catch (PropertyVetoException ex) {
Logger.getLogger(UsuarioServiceFcdTest.class.getName()).log(Level.SEVERE, null, ex);
}
cpds.setUser(dsProperties.getProperty("user"));
cpds.setDescription("java:/comp/env/jdbc/agendaDS" + " Data Source"); //replace MYCONNECTIONKEY with the key you wish to use for lookup
cpds.setPassword(dsProperties.getProperty("password"));
cpds.setJdbcUrl(dsProperties.getProperty("jdbcUrl"));
cpds.setIdleConnectionTestPeriod(1800);
cpds.setMaxIdleTime(3000);
cpds.setMaxStatements(50);
cpds.setMaxPoolSize(5);
cpds.setInitialPoolSize(3);
cpds.setAcquireIncrement(5);
cpds.setMinPoolSize(2);
cpds.setTestConnectionOnCheckin(true);

    Connection conC3PO = cpds.getConnection();
    if (conC3PO != null){
        System.out.println(&quot; Success ; ;&quot;); //Success
    // ...
            registry.rebind(&quot;java:/comp/env/jdbc/agendaDS&quot;, cpds); //datasource
            // &quot;closing&quot; a connection sends it back to the pool
            conC3PO.close();
    } else {
    //Something wrong
    }

InitialContext ic = new InitialContext();
// ic.createSubcontext("java:");
// ic.createSubcontext("java:/comp");
// ic.createSubcontext("java:/comp/env");
// ic.createSubcontext("java:/comp/env/jdbc");
// Construct DataSource = /* …*/
// ic.bind("jdbc/agendaDS", datasource);

//    Context webContext = (Context)ic.lookup(&quot;java:/comp/env&quot;);
    DataSource datasource2 = (DataSource)ic.lookup(&quot;java:/comp/env/jdbc/agendaDS&quot;); //DataSource datasource2 = (DataSource)webContext.lookup(&quot;jdbc/agendaDS&quot;) 
//
    try {
         System.out.println(&quot;DB Schema/Catalog is &quot; + datasource2.getConnection().getCatalog().toString() ); //*StartedUp JNDI.
        Connection con = datasource2.getConnection(); // ds.getConnection(&quot;genius&quot;, &quot;abracadabra&quot;)
        System.out.println(&quot;Ds Context name is &quot; +  con.getCatalog().toString() );//datasource2.getConnection() *StartedUp JNDI.datasource2.getConnection().
        //con.setAutoCommit(false);
        //PreparedStatement pstmt = (PreparedStatement)con.prepareStatement( //
        //                            &quot;SELECT * FROM usuario&quot;); // NAME, NAME, TITLE TITLEPERSONNEL WHERE DEPT = ?
        ////pstmt.setString(1, &quot;SALES&quot;);
        //ResultSet rs = pstmt.executeQuery();
        String sQry = &quot;SELECT * FROM usuario&quot;; //any sQry
        Statement stmt = (Statement)con.prepareStatement(sQry);
        ResultSet rs = stmt.executeQuery(sQry); // sQry

        System.out.println(&quot;(testando) Buscando dados...&quot;); // Sales Department:
        while (rs.next() ) {
                String name = rs.getString(&quot;NoME&quot;);
                String title = rs.getString(&quot;login&quot;);
                System.out.println(name + &quot;  ; ;&quot; + title);
        }
        rs.close();
        stmt.close();
        con.close();
    } catch (SQLException ex) {
        Logger.getLogger(UsuarioServiceFcdTest.class.getName() ).log(Level.SEVERE, null, ex);
        throw new SQLException(&quot;SQLException: &quot; + ex.getMessage() );
    }
//    System.out.println(&quot;JNDI Context name is &quot; + JNDIUnitTestHelper.getJndiName() );//*StartedUp JNDI.
    context = new ClassPathXmlApplicationContext(&quot;appTestContext.xml&quot;); // applicationContext // *2 &lt;- pode alternar quando estiver c/ o ambiente funcionando.
    usuarioServiceFcd = (UsuarioServiceFcd)context.getBean(&quot;usuarioServiceFcd&quot;);

//
@Test
public void gravar() {

    System.out.println(&quot;gravar usuário&quot;);
    
    Usuario result = usuarioServiceFcd.gravar(usuarioTeste);
    try {
        assertNotNull(result.getIdUsuario() );
    } catch (AssertionError e){
        fail(&quot;Falhou a gravação de usuário! Falha: &quot; + e.getMessage() );
    }
}

[/code]*2 :idea:<- ah e, a propósito, use a ferramenta de geração de JUnit Test’s do netBeans e implemente seus testes a gosto (claro, sempre implemente os Testes Unitários antes de implementar qq funcionalidade)TDD!!! :XD:
(Vc ficou me devendo a versão do seu netBeans. Aproveita e me passa a do Hibernate (presumo 3.5+) e o seu Spring (q parece ser a 3.x+: pq tentou usar @Resource).)
Clareou 1 pouco?!!

E ai pessoal… muito bom o post!! dificil encontrar tutorial e documentacao usando Spring 3 e Hibernate 3…
Vms ao meu problema… devo esta errando alguma coisa…

Uso o JBoss 4.2.x + Spring 3 + Hibernate 3.5.1-Final

portal-DS.xml , localizado dentro do JBoss, na pasta deploy

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
   <local-tx-datasource>
      <jndi-name>portalDS</jndi-name>
      <connection-url>jdbc:postgresql://localhost:5432/portal</connection-url>
      <driver-class>org.postgresql.Driver</driver-class>
      <user-name>portal</user-name>
      <password>portal</password>
   </local-tx-datasource>
</datasources>

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
	version="1.0">
	<persistence-unit name="portalPU"
		transaction-type="JTA">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>java:/portalDS</jta-data-source>
		<class>br.com.portal.entity.Ano</class>
		<class>br.com.portal.entity.Anunciante</class>
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
			<property name="hibernate.connection.release_mode" value="auto" />
			<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />
			<property name="jboss.entity.manager.factory.jndi.name" value="java:/autoPecasDataSource" />
	</persistence-unit>
</persistence>

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	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-app_2_5.xsd">

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
            /WEB-INF/applicationContext.xml
        </param-value>
	</context-param>

        ....
	<persistence-unit-ref>
		<description>Persistence unit for the bank application.</description>
		<persistence-unit-ref-name>persistence/portalPU</persistence-unit-ref-name>
		<persistence-unit-name>portalPU</persistence-unit-name>
	</persistence-unit-ref>
        ...
</web-app>

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" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

	<bean id="entityManagerFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="portalDS" />
	</bean>
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>
	<context:component-scan base-package="br.com.portal.service" />
	<context:annotation-config />
	<tx:annotation-driven transaction-manager="transactionManager" />
</beans>

Se puderem me ajudar =)

Fato que to comentendo 'varios erros =)

[]ss

Por acaso vc tah testando (a gente)?! :shock: …

…ou, vc tah me tirando?! :hunf:

Não entendi !

@Flavio, apenas 1 mal-entendido. :confused: no problm!

@kubanacan,
Me parece q vc não teve 1 sacada do o q o Spring é e pq q ele serve.
No seu setUp vc adiciona 1 ‘persistence.xml’, mas no Spring vc insiste numa configuração Hibernate puro.

Em vez de usar JBoss, tente primeiro com o TomCat, seguindo suas Instruções de como definir 1 DataSource no Container Java.

Em todo caso, se vc quer ter sucesso no q precisa e decidir seguir algumas dicas q posso te passar é muito provável q vc chegue lá…

Se tiver a fim, é só avisar,

]o['s,

O spring faz uma integração entre o hibernate e o data source ai você vai usar o pool de conexões do servidor e não do hibernate.

Na verdade, um “pool de conexões” implica(só pode ser criado) num DataSource, este podendo ser definido tanto localmente na sua App. como num Container Java.
Inclusive, estes "Poolled-DataSource"s realmente implementam a interface ‘javax.sql.DataSource’. O Hibernate é naturalmente compatível com algumas dessas implementações: C3P0, DBCP, Proxool; sem falar na nativa do Hibernate, q a Hibernate não se cansa de indicar para não ser usada em Produção, por não ser robusta, etc…
Vide: javax.sql.DataSource cpds = new ComboPooledDataSource(); é natural!! 8)
Mas, por enquanto eskeça tudo isto.

[quote=Flavio machine]O spring faz uma integração entre o hibernate e o data source ai você vai usar o pool de conexões do servidor e não do hibernate.
[/quote]A proposta (boa a princípio) do Yury é definir 1 DataSource (Local) via Spring para podermos fazer Testes, inclusive de Performance/Carga (DataSource de Container: 1 Pool com determinada qtd. de conexões), simulando o Ambiente real de Produção. Para isso, ele definine 1 DataSource usando a Implementação C3P0; só q isso ele propõe a abordagem de settar a configuração do cpds (usando 1 “.PropertyPlaceholderConfigurer”)via arquivo ‘jdbc.properties’. (O problema é q isto traz 1 efeito colateral: a configuração de conexão (acesso ao BD) acaba ficando definida em 2 lugares; veja só a ambiguidade: sempre q vc, p/ acaso precise mundar qq coisa na confg, p/ex. a senha (ou ainda, o NomeDeAcesso), vai ter q fazer isso em 2 lugares, no ‘jdbc.properties’ e tb na PU do ‘persistence.xml’. (Até este ponto, todo seu Caso de Unit Test tem q estar “passando”, p/menos com o DataSource local! Ah, já ia me eskecendo: configure a Injeção de Dependencias via XML mesmo; faça sua aplicação (UnitTest) funcionar o + simples possível, mas p/- faça funcionar. :shock: )
Pois bem, a partir daí este ‘dataSource’ é injetado em um “.LocalContainerEntityManagerFactoryBean”. :arrow: Mas, de todo jeito, quando vc for definir 1 applicationContext para Produção, invariavelmente, vai ter q definir o ‘dataSource’, só q, desta vez, vai ter q recuperá-lo(do Container) via JNDI.

[quote=Flavio machine]Porquê vc acha melhor eu tentar no tomCat ?
[/quote]Simples, pq vc pode seguir a Documentação do TomCat, q é muito simples e objetiva, isso sem falar q deve chover de Tuts em portugues do TomCat. Sem mencionar, q o TomCat é muito + fácil de configurar e Starta bem + rápido q o JBoss.

[quote=Flavio machine]Tenho interrese nas dicas sim. Vamo lá. :lol:
Obrigado[/quote]
Bom, o basicão é isso aí… Se tiver dúvidas, problemas… é só postar!!