:-( Criar um fork não é uma boa opção para mim, pensei que houvesse uma maneira de configuração via XML... a opção de Object agora ficou mais interessante (apesar de eu achar ela "feia")... Bom, obrigado!
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 > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
