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]
>
> ******************************************************
>
> >
>

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