Usar ou não JMS?  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
Insônia
Debugger
[Avatar]

Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline

Pessoal, estou com o seguinte problema:

Um sistema deve realizar operações (cálculos e relatórios contábeis) para empresas. A ordem de execução deve ser a ordem de chegada (fila FIFO ? First In First Out)

Imaginei que poderia resolver este problema usando JMS. Consumir uma mensagem por vez parece ser simples, no entanto a intenção é, enquanto uma operação para a empresa A é realizada, outra thread realize para a empresa B.

Não posso iniciar uma thread para cada mensagem, pois se estiver realizando uma operação para a empresa A, não posso realizar outra operação para a empresa A concorrentemente. Porem, eu poderia realizar uma operação para uma empresa B. Ou seja, eu gostaria que as operações sobre empresas diferentes fossem executadas concorrentemente, mas para uma mesma empresa as operações precisam ser realizadas pela ordem de chegada (fila FIFO).

Uma solução seria um consumidor de mensagens para cada empresa, mas parece inviável, pois o número de empresas pode crescer.

Alguém tem uma idéia diferente para permitir a concorrência entre empresas, mas garantir a unicidade de operações para uma empresa? Será que JMS não ajuda mesmo a resolver este problema? Alguma Sugestão?

Toda ajuda é bem vinda

SCJP, SCWCD
Rubem Azenha
GUJ Master
[Avatar]

Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline

precisar uasr JMS? Não pode ser algo mais simples assim:

pensei em algo assim:


e na thread vc sincroniza a empresa "e".



Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
[WWW]
Insônia
Debugger
[Avatar]

Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline

Por ser um problema de produtor/consumidor, JMS parecia ser uma solucao boa (sem reinventar a roda).

Como vou ter muitos produtores e (eu gostaria de ter) muitos consumidores (1 para cada empresa), essa solucao que vc descreveu (aparentemente) me forca a realizar o controle de concorrencia entre o produtor e consumidor, neh? Ou seja, vou ter que utilizar os mecanismos da API para inserir e retirar "operacoes" da minha lista de operacoes a serem realizadas.

E, se nao existisse operacao a ser realizada, eu gostaria de nao ter que iterar sobre laco algum. Fazer isso "na unha" é possivel (usando thread, sleep, notify...), mas eu queria evitar

Obrigado pela sugestao. Ela realmente funciona, mas será que existe algo mais simples, provido pela propria API ou algum framework, que garanta a integridade da minha lista de operacoes e, ao mesmo tempo, me permita executar operacoes concorrentes que sejam de empresas distintas?


SCJP, SCWCD
fmeyer
Moderador
[Avatar]
Membro desde: 22/02/2005 17:26:29
Mensagens: 1583
Localização: Sao Paulo
Offline

Essa nao é uma aplicacao que necessite do uso de filas.

geralmente em integrecoes de legado, sistema distribuidos multiplataforma, e outras coisas um pouco maiores o uso de filas pode ser justificavel.

s

Fernando Meyer http://fernandomeyer.com
[Email] [WWW]
Insônia
Debugger
[Avatar]

Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline

Ok scottys0, talvez eu nao compreenda o que significa "outras coisas um pouco maiores", mas tudo bem! Opinioes sao sempre bem vindas.

Já que o uso de JMS aparentemente nao se aplica, entao devo controlar os produtores/consumidores "na unha"? Terei que fazer todo o controle de qual "empresa" já possui uma "operacao" executando "na unha" também?

Tudo bem, se for necessario, nem vejo problema em fazer. Nada que uma instancia da classe Vector (que é synchronized) nao possa ajudar a resolver este problema. Certo? ou errado?

Obrigado pelas sugestoes... outras continuam sendo bem vindas!

SCJP, SCWCD
 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team