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