Qual a diferença e relação entre persistence.xml e o arquivo datasource do jboss?

13 respostas
D

Pessoa,
qual e a relação entre esses dois arquivos no jboss? Eu configurei meu persistence.xml e ao iniciar o jboss ele me solicita o datasource configurado tambem, porém não entendi, pq as informações que ele me solicita tambem estão no persistence.xml, por isso fiquei com dúvida a respeito das responsabilidades de cada arquivo e suas relações…

Vi em alguns tutoriais que o jboss necessita do arquivo datasource e ate configurei mais a minha duvida é esta citada acima.

13 Respostas

H

persistence.xml você guarda as informações sobre o persistence unit que é o contexto de classes, conexões e tudo mais.

O jboss para fazer o trabalho bem feito solicita que o datasource esteja dentro do domínio dele (em um arquivo a parte) para melhorar desempenho, fazer pool e assim vai.

datasource tem configurações de DB, persistence pode ter também mas por boa prática é melhor apontar para um DS que está dentro do servidor.

D

jakefrog:
persistence.xml você guarda as informações sobre o persistence unit que é o contexto de classes, conexões e tudo mais.

O jboss para fazer o trabalho bem feito solicita que o datasource esteja dentro do domínio dele (em um arquivo a parte) para melhorar desempenho, fazer pool e assim vai.

datasource tem configurações de DB, persistence pode ter também mas por boa prática é melhor apontar para um DS que está dentro do servidor.


Certo,
então eu posso remover o driver e a url de conexao com o banco do meu persistence e colocar no ds ?

H

diegohsi:
Certo,
então eu posso remover o driver e a url de conexao com o banco do meu persistence e colocar no ds ?
Você tentou? Deu algum erro? [=

D
jakefrog:
diegohsi:
Certo, então eu posso remover o driver e a url de conexao com o banco do meu persistence e colocar no ds ?
Você tentou? Deu algum erro? [=
Voltei, fiz algumas tentativas, mais não esta construindo minha aplicação corretamente no jboss.

de uma olhada por favor pra ver se pode me dar uma luz...
persistence.xml
tentei com java:/ sem e ainda persiste.

<persistence version="1.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_1_0.xsd">

	<persistence-unit name="catalogoclientes" 	transaction-type="JTA">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>java:/sqlite-ds</jta-data-source>
		<class>br.com.catalogoclientes.model.Pessoa</class>
		<class>br.com.catalogoclientes.model.PessoaFisica</class>
		<class>br.com.catalogoclientes.model.PessoaJuridica</class>
		<properties>
			<property name="hibernate.connection.driver_class" value="org.sqlite.JDBC"/>
			<property name="hibernate.connection.url" value="jdbc:sqlite:cliente"/>
			<!-- <property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC" /> -->
			<!-- <property name="javax.persistence.jdbc.url" value="jdbc:sqlite:cliente" /> -->
			<property name="hibernate.dialect" value="br.com.catalogoclientes.util.SQLiteDialect" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
			
			<!-- Opção habilitada apenas para teste - Retirar em produção -->
			<property name="hibernate.hbm2ddl.auto" value="update"/>
		</properties>
	</persistence-unit>
</persistence>
sqlite-ds.xml
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>jdbc/catalogoclientes-ds</jndi-name>
    <connection-url>jdbc:sqlite:cliente</connection-url>
    <driver-class>org.sqlite.JDBC</driver-class>
    <user-name></user-name>
    <password></password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping></type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

log do jboss

persistence.units:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,unitName=catalogoclientes
  State: NOTYETINSTALLED
  I Depend On:
    jboss.jca:name=sqlite-ds,service=DataSourceBinding

2012-07-27 16:28:28,917 DEBUG [org.jboss.system.ServiceController] removing jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3 from server
2012-07-27 16:28:28,917 DEBUG [org.jboss.system.ServiceController] Context not removed, it is recording dependencies: ObjectName: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3
  State: NOTYETINSTALLED
  Depends On Me:
    jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=br/com/catalogoclientes/remote/PessoaBO,service=EJB3

2012-07-27 16:28:28,917 DEBUG [org.jboss.system.ServiceController] removing service: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3
2012-07-27 16:28:28,917 DEBUG [org.jboss.system.ServiceController] no need to remove jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3 from server
2012-07-27 16:28:28,917 WARN  [org.jboss.ejb3.JmxKernelAbstraction] jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3 is not registered
2012-07-27 16:28:28,917 DEBUG [org.jboss.system.ServiceController] stopping service: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=br/com/catalogoclientes/remote/PessoaBO,service=EJB3
2012-07-27 16:28:28,917 DEBUG [org.jboss.system.ServiceController] destroying service: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=br/com/catalogoclientes/remote/PessoaBO,service=EJB3
2012-07-27 16:28:28,917 DEBUG [org.jboss.system.ServiceController] removing service: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=br/com/catalogoclientes/remote/PessoaBO,service=EJB3
2012-07-27 16:28:28,917 DEBUG [org.jboss.system.ServiceController] Removing context for nonexistent service it is no longer recording dependencies: ObjectName: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3
  State: NOTYETINSTALLED

  deployer: null
  status: null
  state: CONSTRUCTED
  watch: file:/C:/jboss-4.2.3/server/default/tmp/deploy/tmp5824689318659151130catalogoClientesEAR.ear-contents/catalogoClientesEJB.jar
  altDD: null
  lastDeployed: 0
  lastModified: 0
  mbeans:
, isDirectory: false

2012-07-27 16:28:28,974 DEBUG [org.jboss.deployment.MainDeployer] Begin deployment start file:/C:/jboss-4.2.3/server/default/tmp/deploy/tmp5824689318659151130catalogoClientesEAR.ear-contents/catalogoClientesEJB.jar
2012-07-27 16:28:28,974 DEBUG [org.jboss.ejb3.EJB3Deployer] start application, deploymentInfo: org.jboss.deployment.DeploymentInfo@fda0982 { url=file:/C:/jboss-4.2.3/server/default/tmp/deploy/tmp5824689318659151130catalogoClientesEAR.ear-contents/catalogoClientesEJB.jar }
  deployer: MBeanProxyExt[jboss.ejb3:service=EJB3Deployer]
  status: Starting
  state: START_DEPLOYER
  watch: file:/C:/jboss-4.2.3/server/default/tmp/deploy/tmp5824689318659151130catalogoClientesEAR.ear-contents/catalogoClientesEJB.jar
  altDD: null
  lastDeployed: 1343417308932
  lastModified: 1343417308927
  mbeans:
, short name: catalogoClientesEJB.jar, parent short name: catalogoClientesEAR.ear


--- MBeans waiting for other MBeans ---
ObjectName: persistence.units:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,unitName=catalogoclientes
  State: NOTYETINSTALLED
  I Depend On:
    jboss.jca:name=sqlite-ds,service=DataSourceBinding

ObjectName: persistence.units:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,unitName=catalogoclientes
  State: NOTYETINSTALLED
  I Depend On:
    jboss.jca:name=sqlite-ds,service=DataSourceBinding
  Depends On Me:
    jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3

ObjectName: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3
  State: NOTYETINSTALLED
  I Depend On:
    persistence.units:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,unitName=catalogoclientes
  Depends On Me:
    jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=br/com/catalogoclientes/remote/PessoaBO,service=EJB3

ObjectName: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=br/com/catalogoclientes/remote/PessoaBO,service=EJB3
  State: NOTYETINSTALLED
  I Depend On:
    jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3

--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
ObjectName: jboss.jca:name=sqlite-ds,service=DataSourceBinding
  State: NOTYETINSTALLED
  Depends On Me:
    persistence.units:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,unitName=catalogoclientes
    persistence.units:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,unitName=catalogoclientes

É muito ruim quando não sabemos direito o porque das coisas, ainda to boiando nessa arquitetura do jboss, ejb, jpa. Comprei o livro ejb3 in action e chegará dia 30, mais ate espero que vcs me ajudem...

H

Só faltou falar qual o erro! =D

D

myRemoteObj not bound
seguido de NullPointerException

H

Dá uma olhada aqui na página 6:
Aplicação Web Completa JSF EJB JPA JAAS.
Mostra como criar datasource e persistence.xml

Se você estiver utilziando jboss 7.1 você terá que adicionar o java:/ alguma coisa no standalone.xml. Vai aparecer na mensagem de erro.

D

jakefrog:
Dá uma olhada aqui na página 6:
Aplicação Web Completa JSF EJB JPA JAAS.
Mostra como criar datasource e persistence.xml

Se você estiver utilziando jboss 7.1 você terá que adicionar o java:/ alguma coisa no standalone.xml. Vai aparecer na mensagem de erro.


Obrigado jakefrog, eu tinha vasculhado seu blog e tirei muitas duvidas la, porém minha aplicação é desktop mvc, ainda sim. Mesmo assim da pra tirar muitas duvidas la, e estou
utilizando jboss 4.2.3

H

diegohsi:
jakefrog:
Dá uma olhada aqui na página 6:
Aplicação Web Completa JSF EJB JPA JAAS.
Mostra como criar datasource e persistence.xml

Se você estiver utilziando jboss 7.1 você terá que adicionar o java:/ alguma coisa no standalone.xml. Vai aparecer na mensagem de erro.


Obrigado jakefrog, eu tinha vasculhado seu blog e tirei muitas duvidas la, porém minha aplicação é desktop mvc, ainda sim. Mesmo assim da pra tirar muitas duvidas la, e estou
utilizando jboss 4.2.3
Eita, calma aí que agora eu ñ entendi nada.
Sua aplicação é Desktop ou Web?

Se for desktop, aí você coloca as configs dentro do persistence. Se for web você coloca dentro do datasource, no caso do jboss 4.2 é um arquivo que deve ficar junto do EAR se for do 7+ aí vocÊ coloca no standalone.xml.

D

jakefrog:
diegohsi:
jakefrog:
Dá uma olhada aqui na página 6:
Aplicação Web Completa JSF EJB JPA JAAS.
Mostra como criar datasource e persistence.xml

Se você estiver utilziando jboss 7.1 você terá que adicionar o java:/ alguma coisa no standalone.xml. Vai aparecer na mensagem de erro.


Obrigado jakefrog, eu tinha vasculhado seu blog e tirei muitas duvidas la, porém minha aplicação é desktop mvc, ainda sim. Mesmo assim da pra tirar muitas duvidas la, e estou
utilizando jboss 4.2.3
Eita, calma aí que agora eu ñ entendi nada.
Sua aplicação é Desktop ou Web?

Se for desktop, aí você coloca as configs dentro do persistence. Se for web você coloca dentro do datasource, no caso do jboss 4.2 é um arquivo que deve ficar junto do EAR se for do 7+ aí vocÊ coloca no standalone.xml.


Minha aplicação é Desktop swing + ejb + jpa, e o pessoal aqui utiliza o persistence.xml + o datasource, fiz as configs aqui até que mudou o aviso do jboss, e confirmando estou usando o 4.2.3

A

Achei estranho isso aqui:

&lt;jta-data-source&gt;java:/sqlite-ds&lt;/jta-data-source&gt;  
...

...

&lt;jndi-name&gt;jdbc/catalogoclientes-ds&lt;/jndi-name&gt;

Os nomes devem coincidir pra você usar o datasource. O java: antes você pode obter usando a tag use-java-context no datasource.

Outra coisa: se você configura a conexão no JBoss não precisa configurar no persistence.xml, então pode remover o driver e a url de conexão deste.

Ah! E o log que você postou é o boot.log, é melhor olhar o server.log também.

Uma dúvida: algum motivo pra você não utilizar um JBoss mais recente (nem que seja o 5.x)?

D
Ataxexe:
Achei estranho isso aqui:
&lt;jta-data-source&gt;java:/sqlite-ds&lt;/jta-data-source&gt;  
...

...

&lt;jndi-name&gt;jdbc/catalogoclientes-ds&lt;/jndi-name&gt;

Os nomes devem coincidir pra você usar o datasource. O java: antes você pode obter usando a tag use-java-context no datasource.

Outra coisa: se você configura a conexão no JBoss não precisa configurar no persistence.xml, então pode remover o driver e a url de conexão deste.

Ah! E o log que você postou é o boot.log, é melhor olhar o server.log também.

Uma dúvida: algum motivo pra você não utilizar um JBoss mais recente (nem que seja o 5.x)?
Eu havia feito a correção nos nomes já. Utilizo o 4.2.3 devido a aplicação do pessoal aqui utilizar. Estou imergindo na tecnologia deles ainda, e meu primeiro contato com servidor de aplicação e essas arquiteturas EE. entao estão brotando duvidas sobre isso, por isso compre um livro pra ver se me atento a essas caracteristicas do java EE. Agora o problema mudou,
--- MBeans waiting for other MBeans ---
ObjectName: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3
  State: FAILED
  Reason: java.lang.RuntimeException: It is illegal to inject an EXTENDED PC into something other than a SFSB
  I Depend On:
    persistence.units:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,unitName=catalogoclientes
  Depends On Me:
    jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=br/com/catalogoclientes/remote/PessoaBO,service=EJB3

ObjectName: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=br/com/catalogoclientes/remote/PessoaBO,service=EJB3
  State: NOTYETINSTALLED
  I Depend On:
    jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3

--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
ObjectName: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3
  State: FAILED
  Reason: java.lang.RuntimeException: It is illegal to inject an EXTENDED PC into something other than a SFSB
  I Depend On:
    persistence.units:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,unitName=catalogoclientes
  Depends On Me:
    jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=br/com/catalogoclientes/remote/PessoaBO,service=EJB3
D

Pessoal,
removi essa anotação do meu controller

removi ela o erro mudou, e se eu deixo mostra o aviso no server.log acima

MBeans waiting for other MBeans --- ObjectName: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=PessoaHBDAO,service=EJB3 State: FAILED Reason: java.lang.RuntimeException: It is illegal to inject an EXTENDED PC into something other than a SFSB I Depend On: persistence.units:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,unitName=catalogoclientes Depends On Me: jboss.j2ee:ear=catalogoClientesEAR.ear,jar=catalogoClientesEJB.jar,name=br/com/catalogoclientes/remote/PessoaBO,service=EJB3

Criado 27 de julho de 2012
Ultima resposta 27 de jul. de 2012
Respostas 13
Participantes 3