sexta-feira, 4 de fevereiro de 2011

persistence.xml dinâmico

E aew!

Bom, eu defino o hibernate.dialect no persistence.xml, porém o meu persistence.xml estava dentro do meu ear.. dessa forma quando fosse necessário trocar o dialeto, era necessário alterar o ear. Eu não queria isso. Então para externalizar o hibernate.dialect tentei o seguinte:

Tirei a linha do hibernate.dialect do persistence.xml e iniciei o JBoss passando o parâmetro -Dhibernate.dialect=org.hibernate.dialect.MySQLDialect

Aconteceu o seguinte erro:

17:55:16,514 ERROR [JDBCExceptionReporter] Unexpected token: LAST_INSERT_ID in statement [select last_insert_id()]
state=Create: java.lang.RuntimeException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not retrieve generated id after insert:
[org.jboss.ejb3.timerservice.mk2.persistence.TimeoutMethod]

Bom, pra resolver isso iniciei o JBoss com um parâmetro diferente:
-Dlocalhost8080.hibernate.dialect=org.hibernate.dialect.MySQLDialect

E essa propriedade eu usei no persistence.xml:
<property name="hibernate.dialect" value="${localhost8080.hibernate.dialect}"/>

Obs: Você pode trocar o localhost8080 do localhost8080.hibernate.dialect para o nome do seu projeto.

Pronto, dessa forma tudo funcionou!!!!


Também seria possível configurar o hibernate.dialect via código, mas não era esse meu objetivo.

Se você quiser colocar essa propriedade (localhost8080.hibernate.dialect) num arquivo de propriedades para que não seja necessário setá-la na inicialização do JBoss, faça o seguinte:

No arquivo properties-service.xml que fica em <jboss>\server\<context>\deploy dentro do mbean SystemProperties deve adicionar a propriedade, ficando dessa forma:

<mbean code="org.jboss.varia.property.SystemPropertiesService"
name="jboss:type=Service,name=SystemProperties">

<attribute name="Properties">
localhost8080.hibernate.dialect=org.hibernate.dialect.MySQLDialect
</attribute>

</mbean>

Vaaaleu!
Adriano Schmidt

Nenhum comentário:

Postar um comentário