Portabilidade aplicação grails datasource sqlserver / oracle
20/07/2015 13:14
0
Olá pessoal,

Estou desenvolvendo uma aplicação grails e gostaria de mantê-la portável entre os bancos sqlserver e oracle.
No caso do oracle é necessário mapear as sequences nas classes de domínio, mas se o fizer a aplicação não vai subir se o datasource estiver apontando para uma instancia sqlserver.
Há alguma configuração que possa ser feita quando a aplicação apontar para o sqlserver ignorar o mapeamento de sequences nas classes de domínio.

Obrigado
Tags: developer sqlserver oracle


0
Oi Wagner, muito interessante esta sua dúvida.

Neste caso, você tem um mapeamento bem customizado mesmo, visto que está apontando para um tipo específico do Oracle que não existe em outros bancos de dados. Sendo assim, vou ver se consigo pelo menos te dar um direcionamento mínimo aqui.

Encontrei algo interessante pra você aqui: http://stackoverflow.com/questions/5424148/is-it-possible-to-map-a-table-name-for-a-domain-object-dynamically-in-grails

No caso, note que a resposta diz apenas como lidar com o mapeamento do nome da tabela, e não com os atributos, mas acredito que já dá algum direcionamento. Além disto, talvez a gente possa pensar de outra forma: talvez você possa mudar os mapeamentos da aplicação com base no momento em que a mesma é iniciada, modificando o bloco constraints antes que ele seja carregado pelo GORM.

Outra opção, que não sei se pode ser aplicada com certeza, consistiria na criação dos arquivos de configuração em XML na pasta conf/hibernate do projeto. O que talvez desse pra você fazer é projetar um esquema de build que substitua estes arquivos de acordo com os parâmetros. Mas novamente, neste caso, não sei se funcionaria bem com as classes padrão de domínio do Grails, pois só usei os arquivos do Hibernate com classes Java padrão.

São apenas idéias, mas podemos ir desenvolvendo seu problema por aqui até encontrar uma solução. O que acha?


0
Uma coisa a tentar:
Como podemos notar, o mapping de um domain é uma closure
?
?class Person { …
static mapping = {
 table "XPTO"
}
}


Provavelmente em algum momento essa closure é executada e o mapeamento é extraído à partir das chamadas de métodos que a mesma faz (exemplo: método table() )
Se for o caso, você deve ser capaz de colocar alguma condicional e realizar o mapeamento com base em algum parametro, exemplo:
class Person {
?static mapping = {
? ?if (oracle) {
? ? ?table "xpto"
? ? ?id etc etc
? ?}
? ?else {
? ? ?table "xyz"
? ? ?id bla bla
? ?}
?}
}


0
Desculpem a formatação problematica!



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto