Sim, eu queria ter o controle de quando manter esse objeto vivo (na sessao)
e qnd destrui-lo.
Eu olhei o blazeds_dev_guide e vi que uma FlexSession pode ter várias
FlexClient e nos testes que fiz eu coloquei o objeto na sessão através de
session.setAttribute("obj", obj);
Mas quando startei outro browser (no caso outro FlexClient) e eu executei o
mesmo caso de uso ele alterou o mesmo obj do primeiro FlexClient.
Mas aí o que você me diz dessa abordagem de fazer a invocação remota a cada
set do objeto?
[]'s
2010/9/14 Mário Júnior <[email protected]>
> Saquei... vc quer manter o escopo do objeto sempre "vivo", independente das
> requisicoes... ou entao ter o controle de quando manter esse objeto vivo (na
> sessao) e qnd destrui-lo, certo?
>
> Bom, vc pode usar o FlexSession para guardar objetos na sessao, mas precisa
> ter cuidado para q esse escopo nao fique "para toda a aplicação" mas só para
> o FlexClient que solicitou.
>
> Pesquise na documentação (blazeds_dev_guide.pdf) por essas duas classes:
> FlexClient e FlexSession.
> Também, verifique q vc precisará colocar os seus servicos com scope de
> "session". Qnd usa o remoting-config.xml é fácil de configurar colocando:
>
> <destination id="blablaba'>
> <source>pacote.da.classe.Servico</source>
> <scope>session</scope>
> < ... />
> </destination>
>
> Mas, como vi q vc está usando o Spring-BlazeDS Integration, precisa olhar
> na documentação do spring como muda esse contexto (nao sei pq nunca fiz, mas
> acho q deve ser na própria anotação).
>
>
> Abraços, t+
>
>
>
>
> Em 13 de setembro de 2010 20:44, Leonardo Ribeiro
> <[email protected]>escreveu:
>
> Beleza Mário,
>>
>> Mas me diz uma coisa, supondo a situação (novamente) da nota fiscal que
>> tem os seus itens (uma collections falando em java).
>> O objeto nota fiscal tem responsabilidade sobre os seus itens, é através
>> desse objeto que podemos adicionar e remover itens (na nota não tem o método
>> setItens(List itens)).
>> Sendo assim, eu teria um dto nota que contem dto's itens...
>>
>> O problema que vejo é que na view (flex) eu vou adicionar dto's notas e
>> itens (não haverá nenhuma regra aqui)....
>> quando for submetido para o server a nota com seus itens o serviço
>> receberá, irá fazer a conversão para as entidades de domínio e a regra será
>> aplicada, mas se o cara digitou uma nota com uns 15, 20, 50 itens ele só vai
>> ter um feedback do sistema no final, ou to errado?
>>
>>
>> Agora me diz o que acha da seguinte situação:
>>
>> public abstract class DomainEntity implements IDomainEntity {
>>
>> private Long id;
>> }
>>
>> public class Usuario extends DomainEntity {
>>
>> private String nome;
>> private String login;
>> private String senha;
>> private String email;
>> }
>>
>> @Service
>> @RemotingDestination
>> public class UsuarioUseCase implements IUsuarioUseCase {
>>
>> public Usuario usuario;
>> public void novo() {
>> this.usuario = new Usuario();
>> }
>> public void setNome(String nome) {
>> this.usuario.setNome(nome);
>> }
>> public String getNome() {
>> return this.usuario.getNome();
>> }
>>
>> //outros metodos delegate...(para cada atributo de usuario)
>> }
>>
>> Minha view tem acesso a esse useCase e no meu formulário por exemplo,
>> quando eu
>> clicasse em "novo" seria invocado o metodo remoto "novo" de
>> "usuarioUseCase" que criaria uma
>> nova instancia de Usuario... e a cada campo preenchido invocasse um metodo
>> correspondente,
>> por exemplo, no cadastro de usuario eu após entrar com o valor para o nome
>> seria invocado o
>> metodo setNome do server e assim para os outros atributos.
>> Com isso eu poderia já ir quando necessário validando com as regras de
>> negócio.
>> E como o flex é assincrono já ajudaria pois o processo no client não vai
>> "parar" esperando
>> o retorno do server...
>> Mas para isso eu precisaria ter uma referência remota para a "sessão" para
>> saber que o nome
>> que está sendo setado no metodo setNome, se refere ao usuário previamente
>> criado pelo metodo
>> "novo".
>> Tem como eu fazer isso no Flex (guardar a "sessão" (não sei se é sessão))?
>>
>>
>>
>> 2010/9/13 Mário Júnior <[email protected]>
>>
>> Exactly!
>>>
>>> A idéia é vc sempre transportar DTOs e nunca expor suas entidades
>>> (objetos de domínio).
>>> Em suma, quase sempre os DTOs tem a mesma estrutura de entidades, mas nem
>>> sempre tb. Isso te permite uma maior flexibilidade em transportar dados
>>> entre view e services e, também, não expondo seus domínios vc consegue
>>> manter a regra de negócio entre eles mais "oculta" para sua view (uma vez q
>>> a view só conhece os DTOs).
>>>
>>> Agora, como já comentamos, concordamos é mais "chato" e burocrático
>>> trabalhar com DTOs, principalmente na hora de vc "converter" para
>>> entidades... pensando nisso o Bruno Fuster da DClick postou uma ferramenta
>>> bem interessante:
>>>
>>> http://blog.dclick.com.br/2009/10/22/transfer-object-pattern-annotations/pt/
>>>
>>>
>>> []s
>>>
>>>
>>>
>>> Em 13 de setembro de 2010 10:40, Leonardo Ribeiro <[email protected]
>>> > escreveu:
>>>
>>> Fala Mário...
>>>>
>>>> Só uma dúvida cara, usando a abordagem dos DTOs, se eu vou criar um novo
>>>> "usuario" por exemplo, no meu código flex eu irei criar um novo DTO usuario
>>>> e envia-lo para o server e lá irei fazer a "conversão" em um usuario do
>>>> "dominio" e realizar as operações necessárias, correto?
>>>>
>>>> Obrigado
>>>>
>>>> 2010/9/8 Leonardo Ribeiro <[email protected]>
>>>>
>>>> Sim, eu já havia pensado nisso, nos DTOs, mas queria ter a opinião de
>>>>> quem já usa ou se deparou com o mesmo problema que o meu aqui agora...
>>>>>
>>>>> []'s
>>>>>
>>>>>
>>>>> 2010/9/8 Mário Júnior <[email protected]>
>>>>>
>>>>>> Sim, trabalhoso, mas pensando de forma mais "politicamente correta"
>>>>>> seria isso mesmo!
>>>>>>
>>>>>> Pela conversa - e pela dúvida específica - me parece q vc está expondo
>>>>>> diretamente as entidades do seu negócio né?
>>>>>> No começo eu tb fazia isso (
>>>>>> http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensource-para-sistemas-web-parte-2-final/#comment-149..
>>>>>> caramba, já tem +2 anos esse meu comentário =P) mas depois com o tempo
>>>>>> me
>>>>>> conscientizei de q, de fato, não é uma boa prática expor entidades do
>>>>>> hibernate, justamente por me deparar com os principios básicos de
>>>>>> encapsulamento, code responsability, etc... então adotei o uso de VOs (q
>>>>>> hj
>>>>>> já aprendi/acostumei a chamá-los de DTOs). São objetos "burros" q
>>>>>> simplesmente trafegam dados entre a view e os services, e daí nos
>>>>>> services
>>>>>> eu transfiro os dados desses DTOs para as entidades, respeitando toda a
>>>>>> regra de negócio encapsulado nesses objetos.
>>>>>>
>>>>>> Enfim, como comentei antes, cada caso é um caso, e todos estão
>>>>>> sujeitos a longas análises... pra isso estamos ae :)
>>>>>>
>>>>>>
>>>>>> []s e boa sorte.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Em 8 de setembro de 2010 19:07, Leonardo Ribeiro <
>>>>>> [email protected]> escreveu:
>>>>>>
>>>>>> Mário,
>>>>>>>
>>>>>>> É, realmente pensando bem não seria uma boa já que teria os casts...
>>>>>>> Você que já tem experiência em vários projetos java x flex, como
>>>>>>> resolve o problema do encapsulamento, tendo como exemplo o simples
>>>>>>> objeto
>>>>>>> NotaFiscal que tem como atributo Itens ?
>>>>>>>
>>>>>>> Sendo que em NotaFiscal não tem um método setItens(List itens) mas
>>>>>>> sim, por exemplo, addItem(Item item), porque a nota que deve controlar
>>>>>>> seus
>>>>>>> itens, fazendo se necessário alguma validação no item passado como
>>>>>>> parâmetro
>>>>>>> no método addItem(Item item)?
>>>>>>>
>>>>>>> Usa VO? Nesse caso teria que sempre que ler do BD que retorna objetos
>>>>>>> do domínio, fazer a criação do VO correspondente e enviar para o Flex e
>>>>>>> quando receber do Flex o VO fazer o inverso para poder trabalhar no
>>>>>>> server
>>>>>>> com o objeto de domínio correspondente... isso? Trabalhoso né? hehe
>>>>>>>
>>>>>>> Obrigado pela atenção
>>>>>>>
>>>>>>>
>>>>>>> 2010/9/8 Mário Júnior <[email protected]>
>>>>>>>
>>>>>>> É possível sim.
>>>>>>>> Abra o source da classe JavaAdapter. Nessa classe vc tem o método
>>>>>>>> invoke(Message message).
>>>>>>>>
>>>>>>>> Dentro de message (faça um cast para RemotingMessage) vc tem tudo oq
>>>>>>>> precisa saber (qual classe de serviço será chamada e qual o objeto de
>>>>>>>> transporte será passado como argumento, assim como qual é o seu
>>>>>>>> homonimo no
>>>>>>>> java, etc...).
>>>>>>>>
>>>>>>>> Agora, precisa ter um bom cuidado com isso, pois ao meu ver, vc
>>>>>>>> estaria envolvendo uma certa "regra de negócio" dentro desse adapter.
>>>>>>>> Não
>>>>>>>> digo que é errado (não sou extremista) mas fique ciente q a medida q o
>>>>>>>> seu
>>>>>>>> projeto for crescendo (e as regras aumentando) vc vai ter sempre q
>>>>>>>> fazer
>>>>>>>> "testes" no objeto tranportado para saber se é um tipo X ou tipo Y
>>>>>>>> para daí
>>>>>>>> então decidir qual método chamar (ou deixar de chamar), etc...
>>>>>>>>
>>>>>>>> Daí fica a pergunta: Não seria melhor fazer esses testes na sua
>>>>>>>> camada de serviços, em vez de fazer na camada de comunicação?
>>>>>>>>
>>>>>>>> ps: cada "caso" é um caso... :)
>>>>>>>>
>>>>>>>>
>>>>>>>> []s
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Em 8 de setembro de 2010 15:31, Leonardo Ribeiro <
>>>>>>>> [email protected]> escreveu:
>>>>>>>>
>>>>>>>>> Pessoal,
>>>>>>>>>
>>>>>>>>> Alguém que já tenha mexido no fonte do BlazeDS sabe se é possível
>>>>>>>>> fazer com que ele, ao invés de fazer a "criação/injeção" dos valores
>>>>>>>>> do
>>>>>>>>> objeto as3 -> java via setters publicos usar reflection?
>>>>>>>>>
>>>>>>>>> Porque isso? Porque daí eu não precisaria de setID por exemplo, que
>>>>>>>>> seria a "pk" do objeto, uma vez que essa "pk" seria criada no
>>>>>>>>> construtor do
>>>>>>>>> objeto e não tem sentido alterar. Outro caso seria de no objeto java
>>>>>>>>> ter uma
>>>>>>>>> coleção como atributo (típico caso de nota fiscal ter uma coleção de
>>>>>>>>> itens)
>>>>>>>>> com isso não precisaria ter um setItens(List itens) no objeto
>>>>>>>>> NotaFiscal.java, e sim um addItem(Item item), mantendo o
>>>>>>>>> encapsulamento,
>>>>>>>>> pois quem deve inserir/gerir os itens da nota é a nota.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> []'s
>>>>>>>>> Leonardo
>>>>>>>>>
>>>>>>>>> Linux User #488650
>>>>>>>>> Ubuntu User #27045
>>>>>>>>> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>>>>>>>>> Para enviar uma mensagem, envie um e-mail para
>>>>>>>>> [email protected]
>>>>>>>>> Para sair da lista, envie um email em branco para
>>>>>>>>> [email protected]
>>>>>>>>> Mais opções estão disponíveis em
>>>>>>>>> http://groups.google.com/group/flexdev
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Mario Junior
>>>>>>>> http://blog.mariojunior.com/
>>>>>>>> @mariojunior
>>>>>>>>
>>>>>>>> --
>>>>>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>>>>>>>> Para enviar uma mensagem, envie um e-mail para
>>>>>>>> [email protected]
>>>>>>>> Para sair da lista, envie um email em branco para
>>>>>>>> [email protected]
>>>>>>>> Mais opções estão disponíveis em
>>>>>>>> http://groups.google.com/group/flexdev
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> []'s
>>>>>>> Leonardo
>>>>>>>
>>>>>>> Linux User #488650
>>>>>>> Ubuntu User #27045
>>>>>>> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>>>>>>>
>>>>>>> --
>>>>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>>>>>>> Para enviar uma mensagem, envie um e-mail para
>>>>>>> [email protected]
>>>>>>> Para sair da lista, envie um email em branco para
>>>>>>> [email protected]
>>>>>>> Mais opções estão disponíveis em
>>>>>>> http://groups.google.com/group/flexdev
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Mario Junior
>>>>>> http://blog.mariojunior.com/
>>>>>> @mariojunior
>>>>>>
>>>>>> --
>>>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>>>>>> Para enviar uma mensagem, envie um e-mail para
>>>>>> [email protected]
>>>>>> Para sair da lista, envie um email em branco para
>>>>>> [email protected]
>>>>>> Mais opções estão disponíveis em
>>>>>> http://groups.google.com/group/flexdev
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> []'s
>>>>> Leonardo
>>>>>
>>>>> Linux User #488650
>>>>> Ubuntu User #27045
>>>>> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> []'s
>>>> Leonardo
>>>>
>>>> Linux User #488650
>>>> Ubuntu User #27045
>>>> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>>>>
>>>> --
>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>>>> Para enviar uma mensagem, envie um e-mail para [email protected]
>>>> Para sair da lista, envie um email em branco para
>>>> [email protected]
>>>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>>>>
>>>
>>>
>>>
>>> --
>>> Mario Junior
>>> http://blog.mariojunior.com/
>>> @mariojunior
>>>
>>> --
>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>>> Para enviar uma mensagem, envie um e-mail para [email protected]
>>> Para sair da lista, envie um email em branco para
>>> [email protected]
>>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>>>
>>
>>
>>
>> --
>> []'s
>> Leonardo
>>
>> Linux User #488650
>> Ubuntu User #27045
>> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>>
>> --
>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>> Para enviar uma mensagem, envie um e-mail para [email protected]
>> Para sair da lista, envie um email em branco para
>> [email protected]
>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>>
>
>
>
> --
> Mario Junior
> http://blog.mariojunior.com/
> @mariojunior
>
> --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para [email protected]
> Para sair da lista, envie um email em branco para
> [email protected]
> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>
--
[]'s
Leonardo
Linux User #488650
Ubuntu User #27045
Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev