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

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