Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida estrutura sistema web.

Olá eu gostaria de tirar uma dúvida a respeito da estrutura de sistemas web ERP tipo conta azul, e-gestor.

Tenho um sistema desenvolvido para web, no entanto sempre instalo um servidor de aplicação em um servidor no cliente.

No entanto, eu gostaria de fazer uma estrutura onde que eu hospede o sistema em um só servidor, e qualquer pessoa interessada em comprar o sistema, acesse um site, crie uma conta e teria o seu sistema.

Eu imagino que a estrutura e acesso seja da seguinte forma:

O usuário acessa o site, e ao fazer o login, teria um sistema que verifica em um banco de dados, qual é a empresa que esse login está associado e retorna qual o banco de dados que o mesmo deve se conectar para ter acesso as informações.

Ou seja, teria que ter 2 banco de dados, 1 somente para controlar o acesso de usuários a determinado banco, e 1 banco com todos os dados como Estoque, Financeiro entre outros.

Seria dessa forma que é praticado para esse tipo de aplicação ou estou reinventando a roda e existe uma outra forma?

Utilizo Wildfly, JPA 2 Hibernate, EJB com CDI para comunicação com o banco Postgres. A aplicação é totalmente desenvolvida em JSF com Primefaces.

2 respostas
solução!

Bom dia Rafael,

O que voce esta procurando chama-se multi tenancy. Tenancy seria equivalente a ter 'um mundo para um cliente', multi tenancy seria como se virar com "um banco inteiro por cliente", mas tudo em um banco só (ou dois como sugeriu, mas em geral usa um só). A implementação básica seria uma tabela de autenticação CLIENTE que tem o id dele/a. E ai todas as outras tabelas do banco sempre possuem um CLIENTE_ID para voce usar no WHERE

A abordagem "simples" que citei tem o desafio de não esquecer nenhum where, para garantir a segurança que um tenant não acesse os dados do outro. Em alguns casos seu contrato com o/a cliente pode não permitir que os dados estejam compartilhados no mesmo banco, mesmo que usando os wheres (por exemplo contratos com entidades que obrigam que os dados estejam numa máquina isolada de outros clientes), ai outras abordagens são necessárias:

Aqui existe uma discussão sobre diversas abordagens possíveis para alcançar o que deseja: http://blog.caelum.com.br/um-produto-para-muitos-clientes-implementando-multitenancy/

Att

Muito Obrigado Guilherme, é exatamente o que eu gostaria de saber.