Problema con modulo en Flex

18 views
Skip to first unread message

Marian

unread,
Jul 8, 2009, 10:53:11 AM7/8/09
to Desarrollo de Componentes en Adobe Flex
Buenas!!
Estoy en un grupo de trabajo empezando a utilizar la tecnologia Flex.
Nos interesa trabajar con modulos porque necesitamos crear un ambiente
liviano, donde cada modulo tenga su comportamiento asociado.

Este mensaje de error nos esta complicando el uso de modulos en la
aplicacion.
Esta es la situacion:

Al cargar el módulo por primera vez e invocar un remoteObject que
devuelve un resultado todo funciona correctamente. El resultado es un
Objeto del Tipo “or.gov.agip.git.DatosIdentificatoriosCU”, que es una
clase propia con la annotation RemoteClass. Esta clase pertenece al
módulo que es cargado.

Al descargar el módulo y volverlo a cargar. La invocación al mismo
servicio tira un Error de Conversión Forzada (Lo que en java sería un
ClassCastException) diciendo que no puede convertir el objeto
or.gov.agip.git.DatosIdentificatoriosCU@3234 (o un número parecido) a
algo del tipo or.gov.agip.git.DatosIdentificatoriosCU

Alguien puede sugerirme alguna solucion para que pueda carrgar
nuevamente el modulo sin problemas?
Muchas gracias!
Mariana

Yacatematrix

unread,
Jul 8, 2009, 10:59:05 AM7/8/09
to desarrollo-de-compo...@googlegroups.com
mmm por lo que veo tienes que verificar que los tipos de datos que estas asociando sean iguales y que estes asignando  bien los valores a una propiedad y no al objeto =)

Saludos
_____________________________________________
Bytes By
Y@c@tem@trix

       Abre tus ojos, toma tu mente y llévala al límite...
_____________________________________________


2009/7/8 Marian <maria...@gmail.com>

Mariana Fernandez

unread,
Jul 8, 2009, 11:18:08 AM7/8/09
to desarrollo-de-compo...@googlegroups.com
Adjunto un print screen del error obtenido.

Muchas gracias!
Mariana

2009/7/8 Yacatematrix <yacate...@gmail.com>
Flex-Error1034.jpg

Rubén Alonso

unread,
Jul 8, 2009, 11:28:14 AM7/8/09
to desarrollo-de-compo...@googlegroups.com
Hola Mariana,
 
es posible que lo hayas revisado mil veces, pero ¿has observado que todos los get y los set tanto de la clase .as como de su homóloga .java tienen la misma nomenclatura? Es decir, en el .as sería "get datos" y en el .java "getDatos". ¿Has probado si depurando, la primera vez que te lo hace bien, realmente obtiene y convierte bien al tipo de objeto DatosIdentificatoriosCU?

Oscar Cortes

unread,
Jul 8, 2009, 12:54:54 PM7/8/09
to desarrollo-de-compo...@googlegroups.com
Mariana, 

Estas usando applicationDomain en tu ModuleLoader ? 

<mx:ModuleLoader id="ml" applicationDomain="{ApplicationDomain.currentDomain}" />

Saludos,
Oscar Cortes


2009/7/8 Rubén Alonso <ruben.alo...@gmail.com>

Ivan Alvarez

unread,
Jul 8, 2009, 1:02:20 PM7/8/09
to desarrollo-de-compo...@googlegroups.com
Que tal Oscar, 

Cúal es el objetivo de cargar los modulos en el  ApplicationDomain del shell?

Saludos!!

2009/7/8 Oscar Cortes <ocor...@gmail.com>

Mariana Fernandez

unread,
Jul 8, 2009, 1:05:56 PM7/8/09
to desarrollo-de-compo...@googlegroups.com

Gente,

La forma de cargar los módulos que estamos usando es con la siguiente línea ActionScript

ModuleManager.getModule(getURLModulo(urlModulo)).load();

 No se a que se refiere el ApplicationDomain, pero por las dudas aclaro que cada módulo vive en su propio contexto (son web app distintas)

Saludos,

Mariana


2009/7/8 Ivan Alvarez <ivan.alva...@gmail.com>

Oscar Cortes

unread,
Jul 8, 2009, 2:17:02 PM7/8/09
to desarrollo-de-compo...@googlegroups.com
Mariana, existe otro modulo que este llamando esta misma clase, o al menos con el mismo nombre/package?  La separacion que se necesita aqui ya sea usando applicationDomain o declarando la clase en conflicto en la aplicacion principal se necesita para elimiar ambiguedad entre clases con el mismo nombre. Similar al caso de package name en las clases. Dos clases pueden llamarse igual dentro de un mismo proyecto, pero lo que las distingue es el package name. 

En el caso de Modules es aun mas estricto, ya que en este caso, hasta el package name puede ser el mismo en diferentes Modules. Por eso la necesidad de indicar si se trata de la misma clase o no, usando el applicationDomain. Dado que los Modules funcionan en un esquema de Singletons, cuando uno se carga por primera vez en la aplicacion principal, esta guarda una referencia y se la asigna exclusivamente a ese modulo que la cargo por primera vez. Si otro modulo trata de cargar esta misma clase sin indicar a que dominio pertenece, Flex asume que se intenta usar una clase diferente, pero que ya existe en la clase principal. 

Para hacer la division o elimiar el conflicto se pueden usar dos tecnicas. 

1) Si la clase es la misma en todos los modulos a cargar. Se debe importar la clase en la aplicacion principal, la que carga los modulos, y se debe declarar una instancia. Despues de eso, todo modulo que se cargue, usara esa definicion. Si existe, uno que no sea el caso, se debe cargar con un applicationDomain nuevo.

import com.holaflex.ClaseA;

private var myClaseA:ClaseA = new ClaseA();


2. Cuando se sabe que el modulo a cargar, usa la misma clase de otros modulos que se cargan en la aplicacion principal, se puede indicar en el ModuleLoader con ModuleManager.applicationDomain =  ApplicationDomain.currentDomain.

La preferencia cae en la combinacion de Modules y su naturaleza. 

Saludos,
Oscar Cortes


2009/7/8 Mariana Fernandez <maria...@gmail.com>

Mariana Fernandez

unread,
Jul 8, 2009, 3:26:08 PM7/8/09
to desarrollo-de-compo...@googlegroups.com
Idolos!!!
La primera opcion no es viable por el tipo de arquitectura que estamos usando.
La segunda opcion es la que efectivamente resulto satisfactoria...

Que bueno es no volver a ver esa ventana con el error #1034!! :o)
Agradezco a todos por la buena onda y colaboracion.

Saludos cordiales,
Mariana
Reply all
Reply to author
Forward
0 new messages