Multitenancy com vários Schemas

Pessoal, andei pesquisando sobre multitenancy, e decidimos que a melhor solução para o nosso caso é separar o sistema por “schemas”.
Cada cliente teria o seu schema, mas ai veio a dúvida, como fazer isso dinâmicamente?

O projeto está sendo usado Vraptor + Spring Data-JPA + Hibernate.

Qualquer sugestão será bem vinda :slight_smile:

Não tenho experiencia pratica na utlização de multi-tenancy com schema, no meu caso utilizei uma base para cada tenancy(questões comerciais onde o cliente pode mover sua base de dados).
O que te aconselho é dar uma boa pesquisada na questão da utilização do hibernate para criação do multi-tenancy, quando iniciei o projeto tive problemas na utilização do LAZY das tabelas em função de instabilidades na atual implementação do hibernate…
Parece que as próximas versões do hibernate prometem muitas novidades nesse sentido, mas por hora optei fazer tudo no braço via JPA. Hoje vejo que foi uma faca de dois gumes pois a cada tenancy que nasce na minha aplicação tenho que gerar o schema e a carga inicial no braço e deixá-la na ultima versão como os demais tenancys…

[quote=Xmio]Não tenho experiencia pratica na utlização de multi-tenancy com schema, no meu caso utilizei uma base para cada tenancy(questões comerciais onde o cliente pode mover sua base de dados).
O que te aconselho é dar uma boa pesquisada na questão da utilização do hibernate para criação do multi-tenancy, quando iniciei o projeto tive problemas na utilização do LAZY das tabelas em função de instabilidades na atual implementação do hibernate…
Parece que as próximas versões do hibernate prometem muitas novidades nesse sentido, mas por hora optei fazer tudo no braço via JPA. Hoje vejo que foi uma faca de dois gumes pois a cada tenancy que nasce na minha aplicação tenho que gerar o schema e a carga inicial no braço e deixá-la na ultima versão como os demais tenancys…[/quote]

Xmio, discutimos aqui internamente já sobre isso, uma base para cada cliente no nosso cenário é inviável…

Nos resta trabalhar com schemas separados mesmo, até poderiamos usar um _id pra diferenciar os clientes usando a mesma base, mas cai naquela questão aonde se tem muitos registros pode deixar as operações lentas, pois se tratam de tabelas com grande número de registros.

Encontrei em alguns foruns do hibernate alguma coisa, mas ainda não consegui aplicar no modelo usando JPA. :frowning:

Bom, revivendo o tópico, estou com um problema semelhante aqui.~

Temos uma aplicação desktop que se conecta diretamente à base de dados, utilizando JDBC ela apenas troca o nome do schema e conecta tranquilamente.
Sem maiores problemas.

A questão é que preciso construir uma aplicação para web services.
Como construir uma aplicação dessas que suporte essa troca de “schemas”?
Subir uma aplicação com configuração de conexão diferente, utilizar os datasources do jboss?
Como reaproveitar o o código sem dar muito ctrl+c e ctrl+v?

Alguem já teve de construir algo semelhante?

Estou desenvolvendo um projeto utilizando Vraptor + Spring Data-JPA + Hibernate.

Alguém tem algum exemplo de como utilizar o multitenancy?
Não sei se tem alguma maneira de fazer direto no spring data.
Encontrei algumas coisas mas nada muito explicativo de como proceder.

[quote=varnier]Estou desenvolvendo um projeto utilizando Vraptor + Spring Data-JPA + Hibernate.

Alguém tem algum exemplo de como utilizar o multitenancy?
Não sei se tem alguma maneira de fazer direto no spring data.
Encontrei algumas coisas mas nada muito explicativo de como proceder.[/quote]

Posso ajudar!

Implementei esse método pra multitenancy e tem funcionado muito bem…

Fiz usando Interceptor do hibernate… o qual faz um replace na string dos comandos sql’s antes de serem enviados pro banco de dados…

o que você fez até agora?

No meu caso, não uso spring… crio o interceptor e incluo ele qdo gero a session no sessionFactory…

rodrigomarcelo

Na verdade eu estou bem no inicio do projeto, não tenho nda avançado ainda.

tenho a estrutura do vraptor funcionando, e as classes anotadas com o hibernate.
E se eu utilizar o spring data ele faz o CRUD certinho, mas nada impede de fazer sem o spring.
se vc puder me passar alguns exemplos de como fazer este interceptor fico grato