Problema com WildFly(JBoss) 8.10 + JPA 2.1

9 respostas
diegoarantes

Olá pessoal decidi usar o WildFly antigo JBoss AS para servidor de Aplicação.
Mas não estou conseguindo fazer ele funcionar com o JPA. Ao adicionar o arquivo persistence.xml ele retorna o seguinte erro:

10:53:26,970 INFO  [org.jboss.as.jpa] (MSC service thread 1-8) JBAS011401: Read persistence.xml for AbsoftPU
10:53:27,003 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.deployment.unit."Quality-Web.war".FIRST_MODULE_USE: org.jboss.msc.service.StartException in service jboss.deployment.unit."Quality-Web.war".FIRST_MODULE_USE: JBAS018733: Failed to process phase FIRST_MODULE_USE of deployment "Quality-Web.war"
	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:166) [wildfly-server-8.1.0.Final.jar:8.1.0.Final]
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0]
	at java.lang.Thread.run(Thread.java:744) [rt.jar:1.8.0]
Caused by: java.lang.IllegalArgumentException: Empty name segment is not allowed for jdbc:mysql:
	at org.jboss.msc.service.ServiceName.of(ServiceName.java:90) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
	at org.jboss.msc.service.ServiceName.append(ServiceName.java:117) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
	at org.jboss.as.naming.deployment.ContextNames.buildServiceName(ContextNames.java:197)
	at org.jboss.as.naming.deployment.ContextNames$BindInfo.<init>(ContextNames.java:209)
	at org.jboss.as.naming.deployment.ContextNames$BindInfo.<init>(ContextNames.java:200)
	at org.jboss.as.naming.deployment.ContextNames.bindInfoFor(ContextNames.java:138)
	at org.jboss.as.naming.deployment.ContextNames.bindInfoForEnvEntry(ContextNames.java:184)
	at org.jboss.as.jpa.processor.PersistenceUnitServiceHandler.deployPersistenceUnitPhaseOne(PersistenceUnitServiceHandler.java:494)
	at org.jboss.as.jpa.processor.PersistenceUnitServiceHandler.addPuService(PersistenceUnitServiceHandler.java:264)
	at org.jboss.as.jpa.processor.PersistenceUnitServiceHandler.handleWarDeployment(PersistenceUnitServiceHandler.java:191)
	at org.jboss.as.jpa.processor.PersistenceUnitServiceHandler.deploy(PersistenceUnitServiceHandler.java:126)
	at org.jboss.as.jpa.processor.PersistenceBeginInstallProcessor.deploy(PersistenceBeginInstallProcessor.java:52)
	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:159) [wildfly-server-8.1.0.Final.jar:8.1.0.Final]
	... 5 more

10:53:27,006 ERROR [org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 1) JBAS014613: Operation ("deploy") failed - address: ([("deployment" => "Quality-Web.war")]) - failure description: {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"Quality-Web.war\".FIRST_MODULE_USE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"Quality-Web.war\".FIRST_MODULE_USE: JBAS018733: Failed to process phase FIRST_MODULE_USE of deployment \"Quality-Web.war\"
    Caused by: java.lang.IllegalArgumentException: Empty name segment is not allowed for jdbc:mysql:"}}
10:53:27,166 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 1) JBAS018559: Deployed "Quality-Web.war" (runtime-name : "Quality-Web.war")
10:53:27,166 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 1) JBAS014774: Service status report
JBAS014777:   Services which failed to start:      service jboss.deployment.unit."Quality-Web.war".FIRST_MODULE_USE: org.jboss.msc.service.StartException in service jboss.deployment.unit."Quality-Web.war".FIRST_MODULE_USE: JBAS018733: Failed to process phase FIRST_MODULE_USE of deployment "Quality-Web.war"

Procurei em forums do JBoss mais não consegui achar uma resposta para isto.

9 Respostas

Ataxexe

Posta o seu persistence.xml também.

diegoarantes

Persistence.xml

<?xml version="1.0" encoding="UTF-8"?> <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="AbqualityPU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>br.com.abquality.entities.Veiculo</class> <properties> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/teste"/> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="javax.persistence.schema-generation.database.action" value="create"/> </properties> </persistence-unit> </persistence>

rodrigo.uchoa

Esse persistence não tá errado não? Lembre-se que o WildFly é Java EE 7 e portanto adere a especificação JPA 2.1. Parece que o seu persistence é do JPA 1.0. Da uma investigada nisso.

diegoarantes

Consegui resolver meu problema :slight_smile:
Realmente o rodrigo.uchoa tinha razão meu persistence.xml estava para a versão interior.
Para resolver o problema primeiramente tive de criar um módulo no Jboss com o driver do Mysql

Criei uma pasta /com/mysql/main dentro da pasta de módulos do Jboss copiei o driver e criei um arquivo:
module.xml

<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.3" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-5.1.32-bin.jar"/> </resources> <dependencies> <module name="javax.api"/> </dependencies> </module>

depois dentro do standalone.xml do Jboss criei um datasorce adicionando as linhas abaixo:

<datasources> <datasource jndi-name="java:jboss/datasources/dbLocal" pool-name="dbLocal" enabled="true" use-java-context="true"> <connection-url>jdbc:mysql://localhost:3306/teste</connection-url> <driver>mysql.com</driver> <security> <user-name>root</user-name> </security> </datasource> <drivers> <driver name="mysql.com" module="com.mysql"> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> </driver> </drivers> </datasources>

E meu persistence.xml ficou assim:

<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="Quality-WebPU" transaction-type="JTA"> <jta-data-source>java:/jboss/datasources/dbLocal</jta-data-source> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="javax.persistence.schema-generation.database.action" value="create"/> </properties> </persistence-unit> </persistence>

Resolveu meu problema obrigado pessoal.

diegoarantes

Agora estou com outro problema, ao executar a aplicação ele me retorna o seguinte erro:

Caused by: javax.persistence.PersistenceException: Unable to execute JPA schema generation create command [create table Pessoa (id integer not null, cpf varchar(255), nome varchar(255), primary key (id))] Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'pessoa' already exists\"}}"

Pelo que eu vi ele diz que a tabela já existe !
Ele cria a tabela no banco atualiza normalmente se eu mudar algo nas entidades, mas sempre retorna este erro ao executar a aplicação.

rodrigo.uchoa

Bom, o erro é claro. Você ta usando schema generation pra re-criar o banco quando o contexto sobe, mas aparentemente ta dando erro pois as tabelas já existem. Apagar antes ou simplesmente desistir do schema generation não te atende?

Eu sinceramente não lembro se o próprio persistence provider (hibernate) deveria apagar antes de re-criar.

diegoarantes

O interessante é que eu tenho uma outra aplicação que roda em uma versão mais antiga do JPA (2.0) e JBoss 7 … e o Schema é atualizado automaticamente.

rodrigo.uchoa

Não seria o caso de usar update no lugar de create?

diegoarantes

Então eu estava usando o seguinte no meu persistence.xml

Mesmo assim me retornava o erro.

Fiz um downgrade na versão do JPA para a 2.0 e funcionou perfeitamente.
Meu persistence ficou assim :

<?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="TesteJBossPU" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/jboss/datasources/Teste</jta-data-source> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence>

Desde já agradeço á atenção de todos :slight_smile:

Criado 18 de setembro de 2014
Ultima resposta 23 de set. de 2014
Respostas 9
Participantes 3