Friday 2 May 2008

Criando um Data Source no JBOSS 4.2.2 com JPA

Estou postando aqui essas dicas pois tive muita dificuldades em criar um Data Source (DS) no JBOSS 4.2.2. E mesmo procurando em varios forums e lendo a documentacao da propria JBOSS nao me foi muito clara.
Primeira coisa a ser feita e a copia do seu driver JDBC para o diretorio $JBOSS_PATH\server\default\lib,
no meu caso era o do MySQL : mysql-connector-java-5.0.4-bin.jar
Depois disso vamos criar o DS propriamente dito. Va em
$JBOSS_PATH\docs\examples\jca, copie o -ds.xml referente ao seu Servidor de Bando de Dados (BD), Eu usei o mysql-ds.xml, e coloque-o em $JBOSS_PATH\server\default, e edite-o para as suas configuracoes.
Este e o meu :

< ?xml version="1.0" encoding="UTF-8"? >
< !-- $Id: mysql-ds.xml 63175 2007-05-21 16:26:06Z rrajesh $ -- >
< !-- Datasource config for MySQL using 3.0.9 available from:
http://www.mysql.com/downloads/api-jdbc-stable.html
-- >
< datasources >
< local-tx-datasource >
< jndi-name >MySqlDS< /jndi-name >
< use-java-context >false< /use-java-context >
< connection-url >jdbc:mysql://< seu ip >:3306/teste< /connection-url >
< driver-class >com.mysql.jdbc.Driver< /driver-class >
< user-name >user< /user-name >
< password >12345678< /password >

< !-- should only be used on drivers after 3.22.1 with "ping" support
< valid-connection-checker-class-name >
org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker
< /valid-connection-checker-class-name >
-- >
< !-- sql to call when connection is created -- >
< new-connection-sql >select p.* from pm p;< /new-connection-sql >
< !-- sql to call on an existing pooled connection when it is obtained from pool - MySQLValidConnectionChecker is preferred for newer drivers
< check-valid-connection-sql >some arbitrary sql< /check-valid-connection-sql >
-- >
< !-- corresponding type-mapping in the standardjbosscmp-jdbc.xml -- >
< metadata >
< type-mapping>mySQL
< /metadata >
< /local-tx-datasource >
< /datasources >

Depois voce tem que copiar o arquivo < seu BD >-jdbc2-service.xml que esta em $JOBSS_PATH\docs\examples\jms, para o diretorio $JBOSS_PATH\server\default\deploy\jms, como estou testando com o MySQL copiei o arquivo mysql-jdbc2-service.xml.
Apos isso va em $JBOSS_PATH\server\default\lib, e remova ou altere a extencao dos seguintes arquivos : hsqldb.jar e hsqldb-plugin.jar
So com isso o JBOSS ja ira fazer o start sem erros, mas ainda falta o principal, fazer o seu sistema achar o DS do JBOSS.
Aqui esta o meu persistence.xml :

< ?xml version="1.0" encoding="UTF-8"? >
< 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="SPEPU" transaction-type="JTA" >
< provider >org.hibernate.ejb.HibernatePersistence< /provider >
< jta-data-source >MySqlDS< /jta-data-source >
< /persistence-unit >
< /persistence >

Eu uso a IDE MyEclipse 6.0.1, mas tambem ja teste com o NetBeans 6.0 e as duas IDE's quando geram o projeto, colocam as libs que o JBOSS ja possui, o que causa a "confusao".
Portanto faca uma lista de todas as libs que o JBOSS possui, de uma olhada em todos os diretorios lib, e depois remova do seu projeto.
As primeiras etapas foi facil chegar so lendo os foruns e a documentacao, mas essa de remover os libs do meu projeto que o JBOSS ja possui, foi a que deu mais trabalho para chegar.
Bom espero ter ajudado voce que esta com dificuldade em criar o DS para o JBOSS 4.2.2