Acho q isso está relacionado as Internal Classes (classes dento de outra
classe).
Eu tinha um post sobre isso no meu antigo blog, mas q se perdeu qnd mudei de
server .. agora pensa na preguiça q dá escrever isso tudo dnovo... heheh  =P

Primeiro pensamento que temos q ter em mente: *AS3 não permite uso de
internal class*.
Opa opa.. não joguem pedras... tá bom... dá pra simular isso mas daí a
classe 'filha' (a 'interna'no caso) tem q ficar fora do escopo do package e
acaba ficando acessível apenas para objetos internos da classe 'mae', um
clássico exemplo disso é o SingletonEnforcer muito comum em exemplos de como
implementar o pattern Singleton em AS3. Mas, convenhamos que isso não é a
mesma coisa q dá pra fazer em java.

Sendo assim, se a @Embeddable for uma classe "interna" de outra classe, vc
terá q mapear ela de forma diferente no AS3, seguindo os passos abaixo:

- Como em AS3 nao permite classes internas, logo em AS3 vc tem q ter DUAS
classes (arquivos .as) separados.
- Na classes "Embeddable" vc precisa mapear usando metadata
[RemoteClass(alias="classe.Mae$Filha")]
- Na classe "Mae" (a q contém o atributo "embutido") basta declarar o
atributo com tipo correto, naturalmente.

PS: Ressalto q os termos "mae" e "filha" nesse caso nao tem nada a haver com
herança, é q não consegui pensar em outro nome para representar isso, mas a
"Mae" seria a classe "principal" e "Filha" uma classe "interna", capicci?

*Perceberam o $ (cifrão) ali no nome no meio do [RemoteClass]?*
Isso é pq o javac ao compilar uma classe "interna", irá gerar um arquivo
.class com o nomeDaClassePrincipal*$*NomeDaClasseFilha. Para terem certeza
disso, vcs podem conferir na pasta /bin dos seus projetos (ou em
Web-INF/classes no caso de projetos web).

Entao, agora vem a pegadinha do malandro: como o BlazeDS sabe que um tipo
específico de classe é uma classe interna?
A resposta é simples: Qnd vc manda um objeto para o servidor, ele vai como
um RemotingMessage onde contém várias informações importantes para o
BlazeDS, e uma delas é o metadataInformation (ou coisa assim, nao lembro de
cabeça agora) mas é um atributo que contem a string "alias" declarado no
metadata [RemoteClass]. Quando o BlazeDS recebe um
"pacote.classes.Mae$Filha" ele irá conseguir (via Reflection/ClassLoader)
instanciar um objeto do tipo declarado, mesmo sendo uma classe "interna'. A
*única* obrigatoriedade requerida pelo BlazeDS é q a classe interna precisa
ser *public*.

Enfim... no meu artigo eu falava sobre serialização de "Chaves Compostas
(PK) com JPA/Hibernate usando Flex"... seria bom ressuscitar esse artigo, já
até tinha me rendido um emprego na época :)


Enfim.. acho q vai ser isso.. dá um feedback pra gente @RafaelViana.


[]s









Em 13 de setembro de 2010 20:13, Rodrigo da Rosa Elesbão <
[email protected]> escreveu:

> E voce repetiu isso no flex? Ou seja. Criou as classes representando os
> tipos no flex para os vos? faz assim pra ficar mais facil de te ajudar. Joga
> o objeto que retorna pro flex pra gente dar uma olhada.
>
> Em 13/09/2010 19:27, "Fredy Gadotti" <[email protected]>escreveu:
>
>
> Puts, bem legal isso ai =]
> Não conhecia.
>
> Bom, não posso te ajudar, ai vai ter que perguntar para alguém que manje de
> JPA mesmo e trabalhe com Flex!
>
>
> 2010/9/13 RafaelViana <[email protected]>
>
>
> >
> > SimSim :D
> >
> > O problema é que assim: Se eu tivesse essa abordagem:
> >
> > public class Empresa {
> ...
>
> --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, env...
>
>  --
> 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
>



-- 
Mario Junior
http://blog.mariojunior.com/
@mariojunior

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