| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/05/2006 12:37:06
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/05/2006 12:44:07
|
Rubem Azenha
GUJ Master
![[Avatar]](/images/avatar/cb953f6ca5923f7517125db46ed1293d.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/05/2006 13:10:10
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/05/2006 14:21:56
|
fmeyer
Moderador
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/05/2006 22:38:05
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
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 |
|
|
 |
|
|
|
|