EJB e Problemas com concorrencia... (se eh que se pode chamar de concorrencia)  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
chun
GUJ Master
[Avatar]
Membro desde: 08/11/2004 15:43:41
Mensagens: 1699
Localização: Curitiba/PR
Offline

Seguinte rapaziada... tenho o seguinte problema:

Tenho uma App JEE 5 rodando com session beans stateless e com cliente Swing...

Quando o usuario editar um "registro de uma determinada tabela" eu quero impedir que outro usuario edite o mesmo registro ( por ex: de uma outra estacao) , quero dar uma msg do tipo "Este registro já esta sendo editado em outra estacao"

A questao eh:

Existe alguma forma "menos porca" que colocar uma variavel estatica guardando os "id's em uso" do lado do session bean ?

Valeu !!!!

Ps: Este post é uma opinião pessoal e NÃO DEVE SER ENCARADO COMO VERDADE ABSOLUTA... então... caso você não concorde... não precisa cortar os pulsos...

------
Controverso Eu ? http://www.go-java.com/blog
[WWW] [ICQ]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Você não deveria fazer dessa forma, deveria utilizar o suporte a versionamento do entity manager com travas otimistas.

Se você está utilizando o Hibernate -> http://www.hibernate.org/hib_docs/entitymanager/reference/en/html/transactions.html

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
chun
GUJ Master
[Avatar]
Membro desde: 08/11/2004 15:43:41
Mensagens: 1699
Localização: Curitiba/PR
Offline

Sim , eu sei que o EntityManager é capaz de fazer versioning para evitar atualizações errôneas.... porem eu gostaria de dar a MSG logo que o cara "clikar no botao alterar" e nao ao "salvar" entende ?

Ps: Este post é uma opinião pessoal e NÃO DEVE SER ENCARADO COMO VERDADE ABSOLUTA... então... caso você não concorde... não precisa cortar os pulsos...

------
Controverso Eu ? http://www.go-java.com/blog
[WWW] [ICQ]
gianbala
Smalltalk

Membro desde: 03/05/2006 18:46:08
Mensagens: 3
Localização: Mato Grosso - Brasil
Offline

acho q uma solução seria controlar variavel do banco lock...

tipo alguma coisa como trancar o registro enquanto a 1º pessoa edita....
so que a 2º ficaria esperando até ficar unlock...


não sei se ajudei ?

Gian - :>
[Email] [MSN]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

chun wrote:Sim , eu sei que o EntityManager é capaz de fazer versioning para evitar atualizações errôneas.... porem eu gostaria de dar a MSG logo que o cara "clikar no botao alterar" e nao ao "salvar" entende ?


Não entendi, você quer que quando o cara estiver inserindo um registro, se ele for inserido por outra pessoa, já apareça uma mensagem avisando que o registro já foi inserido?

Mas se o cara nem inseriu ainda, como é que outra pessoa pode alterar?

Você tá complicando uma coisa terrívelmente simples, pense bem se é isso mesmo que você quer fazer.

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
chun
GUJ Master
[Avatar]
Membro desde: 08/11/2004 15:43:41
Mensagens: 1699
Localização: Curitiba/PR
Offline

Maurício Linhares wrote:
chun wrote:Sim , eu sei que o EntityManager é capaz de fazer versioning para evitar atualizações errôneas.... porem eu gostaria de dar a MSG logo que o cara "clikar no botao alterar" e nao ao "salvar" entende ?


Não entendi, você quer que quando o cara estiver inserindo um registro, se ele for inserido por outra pessoa, já apareça uma mensagem avisando que o registro já foi inserido?

Mas se o cara nem inseriu ainda, como é que outra pessoa pode alterar?

Você tá complicando uma coisa terrívelmente simples, pense bem se é isso mesmo que você quer fazer.



O que eu quero eh apenas ALTERACAO... esqueca a inclusao... o registro já vai tar lá... ae UM usuario vai apertar no botao ALTERAR e comecar editar (isso pode levar varios minutos, pois o cara no MEIO DE UMA ALTERACAO pode ir tomar um café...) ... se por acaso OUTRO usuario de OUTRA maquina tentar editar o MESMO registro , quero que dê uma mensagem pra ele "Este registro já está sendo editado em outra estacao"

Ps: Este post é uma opinião pessoal e NÃO DEVE SER ENCARADO COMO VERDADE ABSOLUTA... então... caso você não concorde... não precisa cortar os pulsos...

------
Controverso Eu ? http://www.go-java.com/blog
[WWW] [ICQ]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

chun wrote:O que eu quero eh apenas ALTERACAO... esqueca a inclusao... o registro já vai tar lá... ae UM usuario vai apertar no botao ALTERAR e comecar editar (isso pode levar varios minutos, pois o cara no MEIO DE UMA ALTERACAO pode ir tomar um café...) ... se por acaso OUTRO usuario de OUTRA maquina tentar editar o MESMO registro , quero que dê uma mensagem pra ele "Este registro já está sendo editado em outra estacao"


Você já pensou na possibilidade do cara ir tomar o café, se engasgar e ir parar no hospital e aquele registro tiver que ser alterado pra fazer uma venda de alguns milhões de dólares?

Adivinha só quem é que vai perder o emprego

Mas é uma escolha sua, só tenha cuidado pra não se arrepender depois. Travas otimistas foram pensadas exatamente para este tipo de acontecimento.

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
chun
GUJ Master
[Avatar]
Membro desde: 08/11/2004 15:43:41
Mensagens: 1699
Localização: Curitiba/PR
Offline

Maurício Linhares wrote:
chun wrote:O que eu quero eh apenas ALTERACAO... esqueca a inclusao... o registro já vai tar lá... ae UM usuario vai apertar no botao ALTERAR e comecar editar (isso pode levar varios minutos, pois o cara no MEIO DE UMA ALTERACAO pode ir tomar um café...) ... se por acaso OUTRO usuario de OUTRA maquina tentar editar o MESMO registro , quero que dê uma mensagem pra ele "Este registro já está sendo editado em outra estacao"


Você já pensou na possibilidade do cara ir tomar o café, se engasgar e ir parar no hospital e aquele registro tiver que ser alterado pra fazer uma venda de alguns milhões de dólares?

Adivinha só quem é que vai perder o emprego

Mas é uma escolha sua, só tenha cuidado pra não se arrepender depois. Travas otimistas foram pensadas exatamente para este tipo de acontecimento.



Resumindo... ou usa-se versionamento e tem-se um erro ao salvar o registro (caso ele tenha sido alterado por outra estacao) OU faz uma propriedade estadica no container , certio ?

Ps: Este post é uma opinião pessoal e NÃO DEVE SER ENCARADO COMO VERDADE ABSOLUTA... então... caso você não concorde... não precisa cortar os pulsos...

------
Controverso Eu ? http://www.go-java.com/blog
[WWW] [ICQ]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Não entendi esse negócio de propriedade estática.

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Se isso é tão importante p/ teu sistema, coloca uma tabela no banco indicando que está editando o que. Simples assim.


http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
chun
GUJ Master
[Avatar]
Membro desde: 08/11/2004 15:43:41
Mensagens: 1699
Localização: Curitiba/PR
Offline

louds wrote:Se isso é tão importante p/ teu sistema, coloca uma tabela no banco indicando que está editando o que. Simples assim.



Não seria mais elegante deixar um Sessionbean controlar isso? (usando um arraylist estatico nele e ponho lá os ID's que estao em edicao) ae nao dependo do banco de dados...

Ps: Este post é uma opinião pessoal e NÃO DEVE SER ENCARADO COMO VERDADE ABSOLUTA... então... caso você não concorde... não precisa cortar os pulsos...

------
Controverso Eu ? http://www.go-java.com/blog
[WWW] [ICQ]
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

louds wrote:Se isso é tão importante p/ teu sistema, coloca uma tabela no banco indicando que está editando o que. Simples assim.


Antes de 1997, enquanto usava Clipper, meus sistemas faziam mais ou menos isto. Só que precisei criar um sistemas de mensagens que aparecesse na tela de quem queria editar o registro em uso. É claro que precisa de um tempo máximo de edição para evitar o caso do cara que vai ao banheiro enquanto edita.

Para fazer isto hoje em dia, para mim o mais difícil é a parte da mensagem aparecer na tela do cliente. Acho que isto parece tarefa para Comet programming ou continuations do Jetty. Eu nunca usei estas coisas que prometem maravilhas. O Chun que é bom de Glassfish deve saber como fazer isto usando um artigo que está hoje no Java.net:

The Grizzly Comet or why space shuttle Discovery launch was delayed

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
chun
GUJ Master
[Avatar]
Membro desde: 08/11/2004 15:43:41
Mensagens: 1699
Localização: Curitiba/PR
Offline

Luca wrote:Olá

louds wrote:Se isso é tão importante p/ teu sistema, coloca uma tabela no banco indicando que está editando o que. Simples assim.


Antes de 1997, enquanto usava Clipper, meus sistemas faziam mais ou menos isto. Só que precisei criar um sistemas de mensagens que aparecesse na tela de quem queria editar o registro em uso. É claro que precisa de um tempo máximo de edição para evitar o caso do cara que vai ao banheiro enquanto edita.

Para fazer isto hoje em dia, para mim o mais difícil é a parte da mensagem aparecer na tela do cliente. Acho que isto parece tarefa para Comet programming ou continuations do Jetty. Eu nunca usei estas coisas que prometem maravilhas. O Chun que é bom de Glassfish deve saber como fazer isto usando um artigo que está hoje no Java.net:

The Grizzly Comet or why space shuttle Discovery launch was delayed

[]s
Luca



Muito interessante... será que existe algo parecido que possa ser usado com EJB3+Swing ?

Ps: Este post é uma opinião pessoal e NÃO DEVE SER ENCARADO COMO VERDADE ABSOLUTA... então... caso você não concorde... não precisa cortar os pulsos...

------
Controverso Eu ? http://www.go-java.com/blog
[WWW] [ICQ]
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

Em Swing deve ser bem mais fácil fazer pipocar uma mensagem na tela de quem tenta alterar um registro que está marcado como sendo editado. E para mim o meio mais fácil da saber isto é como o Louds disse.

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
plentz
Moderador
[Avatar]

Membro desde: 28/01/2004 07:34:12
Mensagens: 1584
Localização: Porto Alegre, RS
Offline

louds wrote:Se isso é tão importante p/ teu sistema, coloca uma tabela no banco indicando que está editando o que. Simples assim.


louds, você provavelmente ainda não pegou um sistema com isso. E acredite, dói dar manutenção numa tralha dessas.

Travas otimistas++

Diego Plentz - Twitter
"Provide options, don't make lame excuses."
[Email] [WWW]
 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team