Configurar Hibernate fora do persistence.xml

6 respostas
H

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

6 Respostas

A

Ola Humbertosilva,
a aplicação acessa diferentes bancos em runtime?

H

Olá, não ela acessa apenas um bd.

H

Desculpe a demora, estava viajando!

A

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.

H

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!

H

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”

Criado 10 de abril de 2016
Ultima resposta 30 de abr. de 2016
Respostas 6
Participantes 2