errata: não é Leonardo, é Felipe Leonhardt.


2009/10/21 Mário Júnior <[email protected]>

> Vixii... dizer as possibilidades de extensao é assunto para um livro, tanto
> q sexta-feira agora o Autor do Livro Professional BlazeDS estará presente na
> Sexta-Flex, mais detalhes:
>
> http://www.igorcosta.com/blog/
>
> A opçao do Leonardo é igual a minha sugestao numero 3, mas nesse caso ao
> alterar a classe Amf3Input vc terá q compilar uma nova versao do blazeDS
> para vc, por isso eu disse em criar um "*fork"*.
>
> Já a opção do Adapter, vc pode definir via xml (como vc mesmo já descobriu
> no remote-config).
>
>
>
>
>
>
>
> 2009/10/21 Eduardo Rodrigues <[email protected]>
>
>>
>> Mário, eu já consegui redefinir o JavaAdapter no meu
>> remoting-config.xml, vc têm alguma referência que mostre como
>> redefinir os outros pontos??? No caso o Amf3Input, mas eu gostaria de
>> saber quais são todas as possibilidades de extensão do BlazeDS...
>>
>> 2009/10/21 Frederico Lellis <[email protected]>:
>> >
>> > Alguem que ja implementou a opção numero 4 (né Mario hehehe) podia
>> > disponibilizar a classe aqui pro grupo ne?
>> >
>> > abraços.
>> >
>> >
>> > 2009/10/21 Eduardo Rodrigues <[email protected]>:
>> >>
>> >> "Seguinte... se no Java estiver trabalhando com Integer / Long /
>> >> Double (são wrappers, não são tipos nativos) e o Flex te mandar um
>> >> NaN, o BlazeDS vai serializar para null?!? Acho q nao.... qual versao
>> >> do BlazeDS está usando?"
>> >>
>> >> Nao, pelos meus testes ele converte pra 0.
>> >>
>> >> Estou tendendo para a opção 4. Achei este tópico no flexbrasil do
>> Felipe:
>> >>
>> >> "Bom dia,
>> >>
>> >> Segundo a própria Adobe ela não considera como um BUG, bom, deixa eu
>> >> tentar explicar.
>> >>
>> >> No flex não existem númericos como NULL e sim NaN(Not a Number) que se
>> >> você observar teóricamente os NaN's para o Java(Double.NaN) possuem
>> >> uma referência e não são nulos e que ao ser "traduzido" para o Java e
>> >> se o objeto esperado para esse número for um Long por exemplo o
>> >> BlazeDS ao fazer algo como "referenciaDoNumeroDouble.longValue()" o
>> >> JAVA AUTOMATICAMENTE joga 0 ou seja nao é um BUG porque NaN não é
>> >> NULL. Por ser assim funcionalmente está correto, mas não atende ao uso
>> >> de muitos programadores, que precisam necessariamente que venha NULL,
>> >> para evitar mais polêmica, sim eu concordo que Adobe poderia fazer com
>> >> que no FLEX, lá mesmo, para os Number's fosse NULL por default e não
>> >> NaN.
>> >>
>> >> Lembrando que tratar isso na camada de negócio você poderá ter
>> >> inúmeros problemas, por exemplo: e se você quiser que realmente venha
>> >> 0 do Flex? Então bastante cuidado.
>> >>
>> >> E para resolver isso, sendo que raramente em uma galáxia muito
>> >> distante eu vou usar o NaN? hehhehehe
>> >>
>> >> 1. Estude muito o fluxo do BlazeDS antes de passar para a camada de
>> >> Negócio do seu back-end. Como?
>> >> Resp: Você pode criar reimplementar classes do blazeDS no momento que
>> >> ele está deserializando os objetos são elas:
>> >> 1. AMFEndpoint
>> >> 2. AmfMessageDeserializer
>> >> 3. Amf0Input
>> >> 4. Amf3Input
>> >>
>> >> e na classe Amf3Input você sobreescreve o método readObject() e faz da
>> >> seguinte maneira:
>> >>
>> >> @Override
>> >> public Object readObject() throws ClassNotFoundException, IOException {
>> >> Object value = super.readObject();
>> >> if (value instanceOf Double && ((Double).value).isNaN()){
>> >> value = null;
>> >> }
>> >> return value;
>> >> }
>> >>
>> >> Att. e espero ter ajudado,
>> >>
>> >> Felipe Leonhardt"
>> >>
>> >> http://forum.flexbrasil.com.br/viewtopic.php?f=8&t=1843&p=5814#p5814
>> >>
>> >> 2009/10/21 Mário Júnior <[email protected]>:
>> >>> Acho q isso merece um post no blog.... Estendendo e ENNNtendendo o
>> >>> JavaAdapter do BlazeDS .... assim q tiver tempo posto lá.
>> >>>
>> >>>
>> >>>
>> >>> 2009/10/21 Mário Júnior <[email protected]>
>> >>>>
>> >>>> Olá pessoal!
>> >>>>
>> >>>> Seguinte... se no Java estiver trabalhando com Integer / Long /
>> Double
>> >>>> (são wrappers, não são tipos nativos) e o Flex te mandar um NaN, o
>> BlazeDS
>> >>>> vai serializar para null?!? Acho q nao.... qual versao do BlazeDS
>> está
>> >>>> usando?
>> >>>>
>> >>>> Como Frederico disse, as opções 1 e 2 não se aplicam ao caso do
>> Eduardo,
>> >>>> pq ele PODE precisar do numero 0 (zero). Então, o correto é aplicar a
>> >>>> solução 3 ou 4 (eu uso a 4, mais flexivel).
>> >>>>
>> >>>> Assim, se o BlazeDS te mandar um 0 (zero) vc vai persistir o 0(zero),
>> mas
>> >>>> lembre-se que o Number em AS3 não existe null, existe o NaN (Not a
>> Number),
>> >>>> e o BlazeDS "padrao" converte NaN para 0 por isso q usar wrappers
>> (nos meus
>> >>>> testes) nao funcionaram! Portanto, o ideal é oq o Frederico disse:
>> aplique
>> >>>> as opções 3 ou 4.. bom, eu mesmo posso recomendar a 4.
>> >>>>
>> >>>>
>> >>>>
>> >>>> Abraços.
>> >>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>> 2009/10/21 Augustus Costa <[email protected]>
>> >>>>>
>> >>>>> Essa sua solução é meio gambiarra vei... isso por que minha coluna
>> no
>> >>>>> banco pode aceitar um zero, como no exemplo velocidade de um
>> veiculo...
>> >>>>>
>> >>>>> Acho muito melhor vc deixar (nesses casos) o tipo no flex como
>> object pq?
>> >>>>> pq caso vc esteja usando Integer no Java o resultado pode ir nulo.
>> >>>>>
>> >>>>> 2009/10/21 Frederico Lellis <[email protected]>
>> >>>>>>
>> >>>>>> Bom dia Eduardo,
>> >>>>>>
>> >>>>>> Vou colar uma resposta dada pelo Mario que tive sobre o mesmo
>> assunto.
>> >>>>>>
>> >>>>>>
>> >>>>>> "Ola Frederico.... cara.. ja tive muito essas encheçoes de saco do
>> >>>>>> BlazeDS... vc tem 4 formas de resolver isso:
>> >>>>>>
>> >>>>>> 1) No setter do seu id, vc pode verificar se o valor passado no
>> >>>>>> argumento for 0 (zero), entao sete-o para null.
>> >>>>>>
>> >>>>>> 2) Caso vc nao queira "poluir" suas entidades com essa validacao
>> >>>>>> chata, vc poderá validar isso nas suas classes de servicos.
>> >>>>>> Qnd vc receber uma entidade com id == 0, entao sete-a para null. É
>> a
>> >>>>>> mesma coisa da solução anterior, só mudamos de lugar nao mais no
>> >>>>>> setter da entidade, mas agora fazer na classe de servico antes de
>> >>>>>> passar o seu objeto para seu dao ( receio q esteja usando algum ORM
>> -
>> >>>>>> i.e hibernate).
>> >>>>>>
>> >>>>>>
>> >>>>>> Essas duas solções funcionam, mas podem ser um pouco "chatas" uma
>> vez
>> >>>>>> q se terá SEMPRE q fazer o "if (entidade.getId == 0)" ...
>> >>>>>> Entao se o programador esquecer de fazer isso em algum momento, já
>> >>>>>> era! Além de tornar a pratica repetitiva, está sujeita a falhas.
>> >>>>>>
>> >>>>>> Agora... vou falar as outras duas formas.... prepare-se para
>> imergir
>> >>>>>> no mundo BlazeDS (yes! Imersão BlazeDS.. hehe)
>> >>>>>>
>> >>>>>>
>> >>>>>> Seguinte.. 98% dos usuarios java/flex que usam BlazeDS mal conhecem
>> >>>>>> sua estrutura, por isso se perdem com essas coisas.
>> >>>>>> Oq vou dizer aqui vi pouca gente usar, lá vai.
>> >>>>>>
>> >>>>>>
>> >>>>>> 3) Criar seu fork do BlazeDS:
>> >>>>>> Baixe o source do BlazeDS, abra a classe Amf3Input.java e
>> sobrescreva
>> >>>>>> o metodo read(), inserindo o seguine trecho de codigo:
>> >>>>>>
>> >>>>>> @Override
>> >>>>>> public Object readObject() throws ClassNotFoundException,
>> IOException {
>> >>>>>>    Object value = super.readObject();
>> >>>>>>    if (value instanceOf Double && ((Double).value).isNaN()){
>> >>>>>>        value = null;
>> >>>>>>    }
>> >>>>>>
>> >>>>>>    return value;
>> >>>>>> }
>> >>>>>>
>> >>>>>>
>> >>>>>> Muita atenção para esse trecho: ((Double).value).isNaN())
>> >>>>>> Isso significa que se o Flex me mandar um NaN (Nota a Number) vou
>> >>>>>> converte-lo para null, e nao para 0 (zero) como é o procedimento
>> >>>>>> normal.
>> >>>>>> É aí q está o segredo da serialização de numeros (long / int) entre
>> Fx
>> >>>>>> <=> Java!
>> >>>>>>
>> >>>>>> Alterada a classe, compile o BlazeDS e utilize sua versao propria.
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>> 4) (A forma que EU uso)
>> >>>>>> O BlazeDS é flexível a ponto de eu criar meu proprio Adapter
>> (classe
>> >>>>>> responsavel por invocar as suas classes de serviço no Java).
>> >>>>>> Entao, oq eu faço é extender a classe JavaAdapter e sobreescrever o
>> >>>>>> método invoke()
>> >>>>>> Nesse ponto vc tem acesso aos parametros (de entrada e saída) de
>> >>>>>> serialização.
>> >>>>>> Com isso em maos, vc pode usar Reflexao para validar/alterar os
>> >>>>>> valores q chegam do Flex (e os q vao tb).
>> >>>>>>
>> >>>>>> Assim fica mais generico, e bem mais reaproveitavel.
>> >>>>>>
>> >>>>>>
>> >>>>>> Espero ter ajudado.
>> >>>>>>
>> >>>>>> Abraços."
>> >>>>>>
>> >>>>>>
>> >>>>>> Eu implementei do lado do java os checks, mas no seu caso voce tera
>> >>>>>> que implementar a solução número 4 ou 3.
>> >>>>>>
>> >>>>>> espero ter ajudado.
>> >>>>>>
>> >>>>>> obs: caso voce venha a fazer a solução numero 4, disponibiliza a
>> >>>>>> classe aqui para o grupo?
>> >>>>>>
>> >>>>>> abraços.
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>> 2009/10/21 Eduardo Rodrigues <[email protected]>:
>> >>>>>> >
>> >>>>>> > Bom dia pessoal,
>> >>>>>> >
>> >>>>>> > Andei lendo e testando e o quando tenho um objeto Number nulo no
>> lado
>> >>>>>> > do flex o comportamento é que ele é serializado para o valor
>> default
>> >>>>>> > no java.
>> >>>>>> > Digamos que eu mapeie um Integer no java e um Number no flex,
>> quando o
>> >>>>>> > number está nulo ele vai 0 pro java, mesmo sendo Integer um
>> wrappper
>> >>>>>> > que poderia ser perfeitamente serializado para null.
>> >>>>>> > Em aplicações que o valor 0 é um valor significativo e nulo é a
>> >>>>>> > ausência de valor este comportamento não é desejado.
>> >>>>>> > Ex:
>> >>>>>> > Lançamento de notas de provas escolares.
>> >>>>>> > O aluno quer saber quando sua nota não foi lançada (nulo) ou se
>> ele
>> >>>>>> > tirou 0.
>> >>>>>> >
>> >>>>>> > Como vocês costumam tratar este tipo de caso? Eu realmente não
>> quero
>> >>>>>> > criar um boolean do tipo "valor lançado" pois isto é muito
>> >>>>>> > anti-natural no meu ponto de vista.
>> >>>>>> >
>> >>>>>> > Estou usando BlazeDA + java 5+
>> >>>>>> >
>> >>>>>> > Obrigado!
>> >>>>>> >
>> >>>>>> > >
>> >>>>>> >
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>> --
>> >>>>>> --
>> >>>>>> ******************************************************
>> >>>>>>
>> >>>>>> Frederico Lellis de Albuquerque
>> >>>>>> Analista Desenvolvedor Java/Flex Pleno.
>> >>>>>> Graduado Em Ciência da Computação
>> >>>>>> [email protected]
>> >>>>>>
>> >>>>>> ******************************************************
>> >>>>>>
>> >>>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> --
>> >>>>> Horus Augustus C. C. Lima
>> >>>>>
>> >>>>> Sagarana Tech
>> >>>>> Mobile +55(85)8842.4402
>> >>>>> Desk +55(85)3304.6530
>> >>>>> [email protected]
>> >>>>> http://www.sagaranatech.com
>> >>>>>
>> >>>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>> --
>> >>>> Mario Junior
>> >>>> Enterprise Java / Flex Architectures
>> >>>> Adobe Certified Expert Flex 3 with AIR
>> >>>>
>> >>>> Sofshore Informática
>> >>>> http://www.sofshore.com.br
>> >>>> +55 (48) 3337 2003
>> >>>> Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100
>> Itacorubi
>> >>>> Florianopolis SC Brasil
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> Mario Junior
>> >>> Enterprise Java / Flex Architectures
>> >>> Adobe Certified Expert Flex 3 with AIR
>> >>>
>> >>> Sofshore Informática
>> >>> http://www.sofshore.com.br
>> >>> +55 (48) 3337 2003
>> >>> Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100
>> Itacorubi
>> >>> Florianopolis SC Brasil
>> >>>
>> >>> >
>> >>>
>> >>
>> >> >
>> >>
>> >
>> >
>> >
>> > --
>> > --
>> > ******************************************************
>> >
>> > Frederico Lellis de Albuquerque
>> > Analista Desenvolvedor Java/Flex Pleno.
>> > Graduado Em Ciência da Computação
>> > [email protected]
>> >
>> > ******************************************************
>> >
>> > >
>> >
>>
>> >>
>>
>
>
> --
> Mario Junior
> Enterprise Java / Flex Architectures
> Adobe Certified Expert Flex 3 with AIR
>
> Sofshore Informática
> http://www.sofshore.com.br
> +55 (48) 3337 2003
> Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100 Itacorubi
> Florianopolis SC Brasil
>



-- 
Mario Junior
Enterprise Java / Flex Architectures
Adobe Certified Expert Flex 3 with AIR

Sofshore Informática
http://www.sofshore.com.br
+55 (48) 3337 2003
Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100 Itacorubi
Florianopolis SC Brasil

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Responder a