Galera, tenho uma aplicação que roda em bd Oracle e SQLServer, preciso setar algumas configurações do hibernate fora da aplicação como por exemplo o dialeto. Gostaria de saber se existe como fazer essas configurações em algum arquivo do Jboss, já tentei usar hibernate.cfg.xml porém uso também ejb e algumas configurações não funcionam. Já procurei em diversos lugares mas nada funcionou aqui.
Uso Jboss 7
Obrigado
Configurar Hibernate fora do persistence.xml
6 Respostas
Ola Humbertosilva,
a aplicação acessa diferentes bancos em runtime?
Olá, não ela acessa apenas um bd.
Desculpe a demora, estava viajando!
Ola Humbertosilva,
mas você usa o Hibernate ou o JPA? o hibernate.cfg.xml ou o persistence.xml?
você pode deixar o gerenciamento de conexões pelo container, configurando o standalone.xml
e no persistence.xml você só adicionaria a JNDI
<jta-data-source>java:jboss/datasources/myDS</jta-data-source>
toda configuração de drivers, e url de conexão fica tudo no container(standalone.xml)
exemplo: exemplo datasource
exemplo2 exemplo datasource jboss 7.1
bom eu não conheço a arquitetura de seu software mas se utiliza o maven e mesmo assim você me dizer quer teria que configurar o alguma propriedade ex: um schema diferente, minha proposta seria configurar no persistence passando uma váriavel(${…}), ex:
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="2.1">
<persistence-unit name="my-ejbPU" transaction-type="JTA">
<jta-data-source>java:jboss/datasources/myDS</jta-data-source>
<properties>
<property name="hibernate.default_schema" value="${schema}" />
<property name="hibernate.show_sql" value="true" />
..............demais properties que precisar
</properties>
</persistence-unit>
</persistence>
depois teriamos que configurar um profile no aquivo settings.xml do maven ex:
<profile>
<id>jboss-remote</id>
<properties>
<schema>schema_homologacao</schema>
</properties>
</profile>
<profile>
<id>jboss-local</id>
<properties>
<schema>schema_producao</schema>
</properties>
</profile>
agora para que o maven trabalhe corretamente substituindo o valor dessa variável você precisa ativar o filtro adicionando na build do pom.xml, ex:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
sendo bem sincero acredito que nem precise disto tudo que apenas deixando o gerenciamento de conexões apartir do container já vai abstrair as configurações de banco da aplicação, mas se mesmo assim desejar a configuração que adicionei aqui trabalha.
Ainda existem outras formas porém vai ficar muito extenso e eu já não me recordo com transparência como fiz. Quando for configurar o datasource no Jboss lembra de criar o módulo para o driver do seu banco caso não exista.
espero que seja útil, abração.
Então, eu uso hibernate e persistence.xml.
Vou tentar explicar melhor…
Tenho uma aplicação que roda em JBoss 7 e que pode tanto rodar com SQL Server quanto Oracle, isso é a gosto do cliente. Tenho um instalador que possui 2 arquivos standalone.xml, quando o cliente seleciona o oracle durante a instalação o instalador joga na pasta do jboss o arquivo referente ao oracle e vice-versa, porém estou tento problemas com o dialeto do hibernate, e pra não ter que ter 1 instalador para cada tipo de banco diferente queria fazer as configurações do dialeto fora da aplicação, e criaria 2 arquivos separados assim como é no meu standalone, e faria com que o instalador disponibilizasse o arquivo de acordo com a instalação que o cliente selecionasse,
Espero que tenha entendido, muito obrigado!
Caro amigo, obrigado pela ajuda!
Consegui resolver da seguinte maneira:
No standalone.xml setei uma variável com o valor do dialeto e no persistence.xml chamei o valor da variável no value.
Persistence:
property name=“hibernate.dialect” value="${dialeto}"
Standalone:
property name=“dialeto” value=“org.hibernate.dialect.SQLServer2008Dialect”