Como trabalhar com dois dataSources?
10/03/2016 15:19
1
Prezados colegas,

Gostaria de trabalhar com dois dataSources simultaneamente em meu aplicativo. 

Ex.:

development {
dataSource {
 dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
 url = "jdbc:h2:devDb;MVCC=TRUE;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE"
 dialect = "trustBC.ImprovedH2Dialect"
}

?outroDataSource {
 dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
 url = "jdbc:h2:outroDevDb;MVCC=TRUE;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE"
 dialect = "trustBC.ImprovedH2Dialect"
}

}

Como posso vincular Domains, Controllers e Views a um determinado datasource?

Obrigado!
Tags: Grails,dataSource,domain,controller,view,multi datasource


1
Oi Pedro, já deu uma olhada nesta seção da documentação? http://grails.github.io/grails-doc/latest/guide/conf.html#multipleDatasources


1
Faço isso constantemente : 

development {
dataSource {
dbCreate = "update" // one of 'create', 'create-drop','update'
url = "jdbc:postgresql://localhost:5433/agritech_dev"
driverClassName = "org.postgresql.Driver"
dialect = "org.hibernate.dialect.PostgreSQLDialect"
}
dataSource_OUTRO {
dialect = org.hibernate.dialect.SQLServerDialect
driverClassName = 'net.sourceforge.jtds.jdbc.Driver'
username = 'xx'
password = 'xxxx'
url = 'jdbc:jTDS:sqlserver://100.0.0.4/XXXX'
}
}

Coloco este mapping no Domain :

?static mapping = {
datasource 'OUTRO'
table 'TABLE'
version false
columns {
? ?...
?}

}

E daí uso o Domain normalmente como se fossem do mesmo banco, mas na verdade tenho alguns de um banco e outros de outro, para fazer integração entre os dados de outro sistema e o meu que rodam na mesma rede.
11/03/2016 10:30


0
Lembrando que eu mudo eles de package para não me confundir, e você pode usar isso de outra forma, usando o mesmo domain para bancos diferentes, aí vc cria os data sources como se fosse um namespace, este código foi retirado da documentação do grails que o kico citou aí em cima.
class ZipCode {
String code

?static mapping = {
datasources(['lookup', 'auditing'])
}
}

def zipCode = ZipCode.auditing.get(42)
zipCode.auditing.save()
11/03/2016 10:36


0
Olá Pedro Henrique.

Sim. Eu já olhei esta documentação.

O que quero saber mais especificamente é:

Cenário:
Tenho um domínio de produto 
Tenho um domínio de status de produto.
Tenho um domínio de histórico de status de produto

Ideia
Eu gostaria de ter o domínio de histórico de status de produto em um banco a parte (por exemplo: historico), e os demais domínios (status, e produto) no próprio banco DEFAULT.

Pergunta:
Como posso fazer isso já que estes domínios estariam fazendo referências a campos que apontam para outro banco?

Obrigado pelo seu tempo!
11/03/2016 14:06


0
Se é um banco relacional, acho que não dá pra fazer esta relação, mas se você vai ter dois bancos porque não coloca o histório em um banco como MongoDB, onde não existe integridade relacional e ele gravaria o seu objeto com os relacionamento interamente, acho que seria além de mais fácil de fazer talvez seria até mais performático.
11/03/2016 16:12


0
Olá Pedro Henrique,

No seu caso de integração, você não relaciona um banco com o outro?

No documento apresentado pelo Kiko, há uma referência para "Hibernate Mapped Domain Classess", onde o autor fala de um domain "Livro" em um banco de dados e o domain "Biblioteca" em outro banco... só que ainda não consegui fazer funcionar.

Grato!?
11/03/2016 16:34


1
Sim, mas onde tem o código do produto, por exemplo eu só uso String na propriedade então isso elemina um relacionamento(integridade relacional) e digo o nome do campo no mapping, aí quando quero juntar tudo eu uso um Service de Fachada ;-)
11/03/2016 16:56


0
Olá Pedro Henrique.
Bom dia.
Eu criei a configuração necessária conforme descrito em http://grails.github.io/grails-doc/latest/guide/conf.html#multipleDatasources, porém estou com os seguintes problemas:

1) Os domains não estão sendo criados dentro do novo datasource para o qual foram mapeados. Eles continuam default. O novo datasource foi criado automaticamente.
2) Quando faço inclusão nos domais funciona normalmente, porém a edição dá mensagem de que o pacoite.Domain não existe...

Alguma dica sobre a configuração correta?

Obrigado
27/03/2016 10:49



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