Ajuda em configuração JBoss Seam[RESOLVIDO]

Olá, estou desenvolvendo meu primeiro projeto web usando o JBoss Seam e Eclipse Galileo JEE.

Estou recebendo a seguinte exceção:

....
Caused by: javax.naming.NameNotFoundException: UserTransaction not bound
....

Meus arquivos de configuração:

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="Clinica" transaction-type="JTA">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>java:/ClinicaDatasource</jta-data-source>
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
			<property name="hibernate.hbm2ddl.auto" value="create" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
			<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />  
            <property name="transaction.factory_class" value="net.sf.hibernate.transaction.JTATransactionFactory" />  
            <property name="jboss.entity.manager.factory.jndi.name"	value="java:/ClinicaEntityManagerFactory" />
		</properties>
	</persistence-unit>

</persistence>

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory name="HibernateSessionFactory">
  <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
  <property name="hibernate.connection.password">admin</property>
  <property name="hibernate.connection.url">jdbc:postgresql:/localhost:5432/clinica</property>
  <property name="hibernate.connection.username">postgres</property>  
  <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
  <property name="hibernate.connection.pool_size">8</property>
  <property name="hibernate.connection.autocommit">false</property>
  <property name="hibernate.show_sql">true</property>
  <property name="hibernate.format_sql">true</property>
  <property name="hibernate.hbm2ddl.auto">create</property>
  <property name="hibernate.c3p0.max_size">8</property>
  <property name="hibernate.c3p0.min_size">1</property>
  <property name="hibernate.cache.use_query_cache">true</property>
  <property name="hibernate.jdbc.use_scrollable_resultset">true</property>
  <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>  
  <property name="transaction.factory_class">net.sf.hibernate.transaction.JTATransactionFactory</property>   
  <mapping class="com.clinica.pojos.Paciente"/>
  <mapping class="com.clinica.pojos.Usuario"/>
 </session-factory>
</hibernate-configuration>

Clinica-ds.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE datasources PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
                             "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">
<datasources>
 <local-tx-datasource>
  <jndi-name>ClinicaDatasource</jndi-name>
  <use-java-context>true</use-java-context>
  <connection-url>jdbc:postgresql://localhost:5432</connection-url>
  <driver-class>org.postgresql.Driver</driver-class>
  <user-name>postgres</user-name>
  <password>admin</password>
  <min-pool-size>1</min-pool-size>
  <max-pool-size>8</max-pool-size>
 </local-tx-datasource>
</datasources>

hibernate-console.properties

#File used by hibernate tools to override <datasource> and other container specific settings in persistence.xml
hibernate.connection.password=admin
hibernate.connection.username=postgres
hibernate.connection.driver_class=org.postgresql.Driver
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.url=jdbc:postgresql://localhost:5432

hibernate.connection.provider_class=org.hibernate.connection.DriverManagerConnectionProvider
hibernate.datasource=java:/ClinicaDatasource
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup

Árvore de Diretórios

Deve haver alguma redundância, e com certeza deve estar faltando algo, já que a exceção foi lançada.

Se tiver alguém baguá em Seam que possa me ajudar a resolver essa parada fico muito grato.

È verdade que existe muita redundãncia no seu código… e o menor dos seus problemas esta sendo o Seam, na verdade vc esta se perdendo com o Hibernate.

“persistence.xml” é um bootstrap pra vc trabalhar com JPA. Uma vez isso configurado vc não precisa de hibernate.cfg.xml e hibernate-console.properties. Na verdade os 3 arquivos são praticamentes exclusivos, se utiliza um não precisa utilizar outro.

Recomendo fortemente que você leia o excelente livro “Java Persistence With HIbernate” do criador do Hibernate, Gavin King. Se não me engano tbm tem a versão traduzida se você preferir. Este livro trata de JPA, Hibernate e boas praticas gerais na utilização de ferramentas ORM.

Não se aventure em JPA/HIbernate antes de uma boa base sobre o assunto.

Bom, voltando a sua dúvida, retire o hibernate.cfg.xml e o hibernate-console.properties… a não ser que vc trabalhe com *-hbm.xml em vez de anotaçoes JPA. No persistence.xml retire as linhas:

&lt;property name="hibernate.transaction.manager_lookup_class"&gt;org.hibernate.transaction.JBossTransactionManagerLookup&lt;/property&gt; &lt;property name="transaction.factory_class"&gt;net.sf.hibernate.transaction.JTATransactionFactory&lt;/property&gt;

Se vc esta começando com o Seam, crie uma aplicação atraves do plugin JBossTools para Eclipse. Ele criara uma estrutra 100% funcional para seu projeto incluindo JPA + Seam + JSF.

[]s

Valew mesmo Lezinho pela resposta!!! E esse projeto foi criado usando o JBossTools.Vou testar depois posto o resultado.

Bom, retirei os arquivos hibernate.properties, hibernate.cfg.xml e hibernate-console.properties, e alterei meu 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="Clinica" transaction-type="JTA">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>java:/ClinicaDatasource</jta-data-source>
		<properties>
		    <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
		    <property name="hibernate.connection.url" value="jdbc:postgresql:/localhost:5432/clinica"/>
		    <property name="hibernate.connection.username" value="postgres"/>
            <property name="hibernate.connection.password" value="admin"/>  			  
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
			
			<property name="hibernate.hbm2ddl.auto" value="create" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
            <property name="jboss.entity.manager.factory.jndi.name"	value="java:/ClinicaEntityManagerFactory" />           

		    <property name="hibernate.connection.autocommit" value="false"/>
		    <property name="hibernate.c3p0.min_size" value="1"/>
  			<property name="hibernate.c3p0.max_size" value="8"/>  			
  			<property name="hibernate.cache.use_query_cache" value="true"/>
  			<property name="hibernate.jdbc.use_scrollable_resultset" value="true"/>  			
		</properties>
	</persistence-unit>

</persistence>

Porém as mesmas exceções cotinuam sendo lançadas, entre elas:

Caused by: java.lang.RuntimeException: exception invoking: getTransaction
Caused by: javax.naming.NamingException: Could not dereference object [Root exception is javax.naming.NameNotFoundException: UserTransaction not bound]
Caused by: javax.naming.NameNotFoundException: UserTransaction not bound
java.lang.RuntimeException: exception invoking: getTransaction

Será que tem algo a ver com o arquivo Clinica-ds.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE datasources PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
                             "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">
<datasources>
 <local-tx-datasource>
  <jndi-name>ClinicaDatasource</jndi-name>
  <use-java-context>true</use-java-context>
  <connection-url>jdbc:postgresql://localhost:5432</connection-url>
  <driver-class>org.postgresql.Driver</driver-class>
  <user-name>postgres</user-name>
  <password>admin</password>
  <min-pool-size>1</min-pool-size>
  <max-pool-size>8</max-pool-size>
 </local-tx-datasource>
</datasources>

O que pode estar acontecendo? Algum erro de JNDI?

Verifique todos os seus arquivos que referenciam a url de conexão do banco de dados

jdbc:postgresql://localhost:5432

Normalmente vc tem que passar o nome do banco tbm, assim como está no hibernate.cfg.xml ==>

jdbc:postgresql:/localhost:5432/clinica

[] ´s

Deve ter algum engano. Se vc criar um projeto pelo JBossTools, selecionando “Seam Web Project”, ele não vai criar hibernate.cfg.xml e hibernate-console.properties. Ele vai criar um datasource funcional, onde inclusive vc testa a conexao antes de terminar o wizard, e gerar um persistence.xml apropriado e configurado para aquele datasource.

Pra vc testar um novo projeto criado, vc até pode fazer engenharia reversa com o JBossTools, que ele gera um CRUD pra vc no Seam, assim vc terá certeza que tudo esta configurado certo ou não. Depois se vc quiser apagar o código gerado pra fazer o seu, com a certeza que tudo esta certo, isso pode ser feito.

Gera pelo JBoss Tools… Esse é pelo Seam-Gen…

Indico:
Eclipse Galileo SR2 + (JBoss Tools 3.1.0 GA Stable Release) + (JBoss Seam 2.2 GA) + (JBoss AS 4.2.3.GA-jdk6 -Q é +Leve ou SUPERIOR)

Usa a pespectiva Seam. Cria o projeto “Seam Web Project” & “Seam Generate Entities”…

Não Tem Como ERRAR!!!
Desculpa tá bem explicadinho, porque o que eu mais vejo é problemas decorrentes da montagem inicial desse ambiente de trabalho

1º- http://docs.jboss.org/tools/movies/demos/ootb_new_seam_project/new_seam_project.htm

2º- http://docs.jboss.org/tools/movies/demos/connecting_to_db_and_reverse_engineering_db_table/connecting_to_db_and_reverse_engineering_db_table.htm

Obrigado a todos pelas respostas. Escolhi trabalhar com o Seam ao ouvir sobre o poder deste poderoso framework. É que ainda estou no inicio da aprendizagem. Se puderem me indicar algum livro fico muito grato. No mais muito obrigado pelas respostas. Vou seguir os conselhos dados no post. se surgir algum problema criarei outro post.

Aconselho aprender bem ORM ( JPA / Hibernate ), leia o livo que indiquei. Depois, um livro ótimo de Seam é o Seam in Action, de Dan Allen.

Pessoal, consegui rodar o Seam. Obrigado pela ajuda e conselhos!