Pergunta

nós temos um aplicativo J2EE em que ainda estamos trabalhando. Ele roda em banco de dados Oracle. e a camada de negócios é codificado com EJB 2.0 com uma interface rich client.

Agora, a aplicação vai ser implantado em vários sites. e cada site será a criação de novos itens (novos contratos, etc.).

o que queremos realizar é para duplicar todos os novos itens adicionados a um DB localização central usando mesmo esquema DB como os locais.

O que você acha que é a maneira mais eficaz de conseguir isso?

Eu pensei sobre a serialização de todos os novos itens criados e enviá-los para o site remoto para a integração através de fila Java Message Service. é que boa abordagem?

E há também vai haver algumas alterações a serem replicadas para os satélites.

Foi útil?

Solução

Eu diria que uma relação sincronizada com as introduz centro de acoplamento que você não quer. Daí sua idéia asynch parece muito bom para mim. Você provavelmente tem algum identificador dependente da localização nos registros de modo que as novas criações contratos em locais diferentes não irá colidir e você aceita alguma latência na replicação do centro.

Assim, o caso simples é que é só usar JMS mensagens de cada local para o centro.

A coisa agradável sobre este appraoch é que os satélites não precisa mesmo de saber sobre a estrutura de banco de dados no centro, pode ser projetado completamente idepedently.

As coisas ficam mais interessantes se você também precisa mudanças replicada de volta do centro para os satélites. A grande questão é se podemos chegar conflitos entre as mudanças no centro e mudanças no satélite.

Caso simples: Qualquer item de dados tem uma "casa". Por exemplo, o satélite originário é o lugar onde as mudanças são feitas. Ou após a criação do centro é o único lugar ti fazer alterações. Caso em que podemos tratar o centro como o "Hub", ele pode propagar alterações para os satélites. JMS simples vai fazer muito bem para isso.

caso um pouco mais difícil: As alterações podem ser feitas em qualquer lugar, mas apenas em um lugar de cada vez. Daí podemos introduzir tipo somne ??se bloqueio esquema. Eu tenderia a ter o Centro de como o proprietário e usar serviços da web synchrnous para bloquear e atualizar os dados. Agora nós são acoplados, mas que necessário, se quisermos ter um dono definitivo.

bastante complexo caso: pode alguém muda qualquer coisa sem bloqueio. É uma espécie de um "Ato Primeiro, pedir desculpas mais tarde" abordagem. Tomamos a abordagem otimista que as mudanças não irá colidir. Podemos enviar as alterações para aprovação para o centro e o centro pode usar um otimistas mudanças bloqueio ou merge não conflitantes aproximar. Eu tenderia a fazer isso por filas mudanças do autor, mas na verdade processá-los por chamadas síncronas. Então, dissociando a especificação da mudança da disponibilidade do centro. Alguns bancos de dados mais sofisticados têm capacidades diff / merge que podem ajudar com isso.

Big perguntas são a medida em que você quer ser acoplado à disponibilidade do centro e da probabilidade de conflito mudanças. Muitas vezes o design da aplicação astuto pode reduzir muito a probabilidade de conflitos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top