Bind de unidade de persistência no JBoss

7 respostas
frederico.vieira

Pessoal, criei um projeto EJB no NetBeans. Criei as entidades diretamente do banco de dados MySQL. Quando executo o projeto, são gerados erros, informando que a unidade de persistência não foi inicializada (pu not bound).

Alguém sabe o que fazer para corrigir esse problema? Tem alguma configuração especial a ser feita no JBoss?

Segue configuração do arquivo persistence.xml

<?xml version="1.0" encoding="UTF-8"?> org.hibernate.ejb.HibernatePersistence pu

Att,

Fred

7 Respostas

J

Tu deve configurar o teu Data Source, para que ele seja do Mysql.

  1. Retira o datasouce default que esta na tua configuração ex.: (JBOSS_HOME/server/default/deploy/hsqldb-ds)

  2. Tu coloca o datasouce do Mysql na tua configuração. (Existe um exemplo do datasource do Mysql em JBOSS_HOME/docs/examples/jms)

  3. Tu deve alterar também o teu JMX, que esta no diretorio de deploy, para o jmx do Mysql, existe um exemplo também

no diretório do Jboss(JBOSS_HOME/docs/examples/jca).

  1. Verifica os nomes dos datasources.

Não esquece de referenciar no teu persistence.xml o data source atravéz do jndi.

frederico.vieira

Olá java++, obrigado pela resposta.

Mesma fazendo o que você disse, continuo com os erros abaixo:

10:34:26,812 INFO  [JmxKernelAbstraction] 	jboss.jca:name=pu,service=DataSourceBinding

10:34:26,812 INFO  [PersistenceUnitDeployment] Starting persistence unit persistence.units:ear=vm.ear,jar=vm-ejb.jar,unitName=pu

10:34:26,828 WARN  [ServiceController] Problem starting service persistence.units:ear=vm.ear,jar=vm-ejb.jar,unitName=pu

javax.naming.NameNotFoundException: pu not bound

at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)

at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)

at org.jnp.server.NamingServer.getObject(NamingServer.java:543)

at org.jnp.server.NamingServer.lookup(NamingServer.java:296)

10:34:28,921 ERROR [URLDeploymentScanner] Incomplete Deployment listing:

— Incompletely deployed packages —
org.jboss.deployment.DeploymentInfo@cde600b3 { url=file:/E:/web/jboss-4.2.2.GA/server/default/deploy/mysql-ds.xml }
deployer: org.jboss.deployment.XSLSubDeployer@140243b
status: Deployment FAILED reason: Trying to install an already registered mbean: jboss.jca:service=LocalTxCM,name=pu
state: FAILED
watch: file:/E:/web/jboss-4.2.2.GA/server/default/deploy/mysql-ds.xml
altDD: null
lastDeployed: 1199453641828
lastModified: 1199453642000
mbeans:

ObjectName: persistence.units:unitName=ejb
State: FAILED
Reason: javax.naming.NameNotFoundException: pu not bound
I Depend On:
jboss.jca:service=DataSourceBinding,name=pu

ObjectName: persistence.units:ear=vm.ear,jar=vm-ejb.jar,unitName=pu
State: FAILED
Reason: javax.naming.NameNotFoundException: pu not bound
I Depend On:
jboss.jca:service=DataSourceBinding,name=pu
Depends On Me:
jboss.j2ee:ear=vm.ear,jar=vm-ejb.jar,name=FuncionarioBean,service=EJB3

ObjectName: jboss.j2ee:ear=vm.ear,jar=vm-ejb.jar,name=FuncionarioBean,service=EJB3
State: NOTYETINSTALLED
I Depend On:
persistence.units:ear=vm.ear,jar=vm-ejb.jar,unitName=pu

— MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM —
ObjectName: persistence.units:ear=vm.ear,jar=vm-ejb.jar,unitName=pu
State: FAILED
Reason: javax.naming.NameNotFoundException: pu not bound
I Depend On:
jboss.jca:service=DataSourceBinding,name=pu
Depends On Me:
jboss.j2ee:ear=vm.ear,jar=vm-ejb.jar,name=FuncionarioBean,service=EJB3

ObjectName: jboss.mq:service=StateManager
State: NOTYETINSTALLED
Depends On Me:
jboss.mq:service=DestinationManager

ObjectName: persistence.units:unitName=ejb
State: FAILED
Reason: javax.naming.NameNotFoundException: pu not bound
I Depend On:
jboss.jca:service=DataSourceBinding,name=pu

ObjectName: jboss.jca:service=DataSourceBinding,name=DefaultDS
State: NOTYETINSTALLED
Depends On Me:
jboss.ejb:service=EJBTimerService,persistencePolicy=database
jboss:service=KeyGeneratorFactory,type=HiLo

J

Frederico,

O nome do persistence-unit deve ser o mesmo do que esta no mysql-ds.

e no persistence.xml deve conter a propriedade para o acesso jndi, não esqueça.

Antes de tu testar com a aplicação no servidor, te aconselho a iniciar o

servidor sem nenhuma aplicação, somente com o ds do mysql configurado.

Depois disso, se não tiver nenhum erro tu prossegue…

frederico.vieira

Olá java++.

Se eu remover os aplicativos do JBoss e deixar o mysql-ds.xml no diretório de deploy, o server funciona normalmente. O problema esta ocorrendo quanto tento executar a aplicação que criei no NetBeans.

Eu crio a persistente unit, conecto ao MySQL e gero as classes de entidade automaticamente com base nas tabelas criadas no banco. Crei um um bean para fazer teste. Quando tento executar o projeto, o JBoss informa que não conseguiu efetuar o bind da minha unidade de persistência. O erro ocorre tanto no NetBean como executando o JBoss diretamente.

Eu constatei também que o NetBean gera um arquivo chamado jboss-ds.xml que contém as mesmas configurações do mysql-ds.xml. Mas eu removi o primeiro arquivo e o erro continua.

Tem alguma idéia do que possa estar acontecendo?

J

Tu poderias colocar o teu arquivo persistence.xml para eu dá uma olhada

e os ds’s (tanto o gerado pelo o NetBeans como o que tu configurou)?

frederico.vieira

Segue arquivos…

persistence.xml

<?xml version="1.0" encoding="UTF-8"?> org.hibernate.ejb.HibernatePersistence pu

mysql-ds.xml

<?xml version="1.0" encoding="UTF-8"?> pu jdbc:mysql://localhost:3306/pu com.mysql.jdbc.Driver usuario senha 5 20 5

jboss-ds.xml (Depois que renomei esse arquivo para mysql-ds.xml, o netbeans criou outro mas sem configuração)

<?xml version="1.0" encoding="UTF-8"?>
M

Altere o persistence.xml na seguinte linha:
<jta-data-source>pu</jta-data-source>
para:
<jta-data-source>java:pu</jta-data-source>

Veja o que acontece.

Criado 3 de janeiro de 2008
Ultima resposta 16 de mai. de 2009
Respostas 7
Participantes 3