Vc tb está aplicando o ApplicationDomain.currentDomain nas sub-aplications q
vc carrega dinamicamente? Tive problemas com isso há um tempão atrás, até eu
descobrir q toda sub-application tb precisava ter seu domain setado.

Meu problema é tempo, senao poderiamos juntos tentar fazer um projetinho a
parte (como um POC mesmo) onde simularíamos esse ambiente, e depois
disponibilizar pra galera, poois muita gente ainda tem duvidas sobre
sub-applications... sem contar esses "probleminhas" q a gente topa e q são
pouco documentados.


[]'s






Em 16 de fevereiro de 2011 11:31, Arthur Rocha <[email protected]>escreveu:

> Ja li o pdf Loading Sub-Applications da Adobe, mas este esta muito
> incompleto. Uma classe bootStrap é uma classe que inicializa um conjunto de
> classes e compartilha estas entre a aplicação principal e suas
> sub-aplicações, assim você consegue compartilhar objetos dessa classe entre
> suas aplicações de versões diferentes, ex. aplicação principal compilada em
> flex 3.4 e sub-aplicações em 3.5 ou flex 4. Na página 45 do pdf que
> mencionou existe essa explicação e um exemplo de classe BootStrap, o por que
> ela extende de Sprite não sei explicar, somente sei que um UIComponent
> (Application por exemplo) extende de Sprite.
>
> Alguém possui um exemplo funcional Java/Flex(com sub-aplicação) utilizando
> chamadas a métodos java via RemoteObject?
>
> Obrigado pela atenção.
>
> *Arthur Rocha <[email protected]>*
> Projetista de Software
> Passo Fundo - RS - Brasil
> +55(54)2104-2888
>
> Celular: (54) 9618.2996
> G. Talk: [email protected]
>
>
> Em 15 de fevereiro de 2011 20:12, Mário Júnior <[email protected]>escreveu:
>
>> Ta certo.. é ApplicationDomain mesmo.. sorry!
>>
>> Modulos com compilacoes diferentes nunca fiz... sempre q trabalhei com
>> Modulos eram todos compilados com o mesmo SDK.
>> Mas nunca tive problemas em chamar o back-end com eles... estranho.
>>
>> Já com compilacao diferente, só trabalhei uma vez com Sub-Applications e
>> tb nao tive problemas.
>>
>> Dá uma olhada nakele PDF da Adobe  "Loading Sub Applications", talvez
>> tenha algo q te ajude lá.
>>
>>
>> Agora uma pergunta: Pra q serve essa classe PortalBootStrapLoader?? Pq vc
>> precisa de um Sprite para "encapsular" os modulos?
>> At;e achei a idéia interessante, mas nao vi a necessidade de implementar
>> isso ainda.
>>
>>
>> []'s
>>
>>
>>
>>
>>
>>
>>
>> Em 15 de fevereiro de 2011 17:59, Arthur Rocha 
>> <[email protected]>escreveu:
>>
>> Não existe a propriedade currentDomain em Application.application,
>>> desta forma seria"ApplicationDomain.currentDomain", porém se coloco
>>> este parâmetro a configuração do loaderContext entra no contexto "Same
>>> Sandbox Child Domain (SSCD)" e desta maneira o Flex chama a sub-
>>> aplicação supondo que a(s) sub-aplicação está usando a mesma versão do
>>> compilador e componentes, o que não é meu caso, preciso trabalhar com
>>> multi-version. Então como diz na documentação "o Flex pode trabalhar
>>> de maneira inesperada", no meu caso quando coloquei a conguração SSCD
>>> (usando new ApplicationDomain(ApplicationDomain.currentDomain)) a
>>> aplicação chamou como sub-aplicação ela mesma =S. Ficando por exemplo
>>> minha App1 dentro da App1, e a URL estava correta chamando a App2.
>>>
>>> Obrigado pela atenção
>>>
>>> On Feb 15, 3:34 pm, Mário Júnior <[email protected]> wrote:
>>> > Acho q vc precisa passar o domain da application parent para o seu
>>> modulo...
>>> >
>>> > ... new ApplicationDomain(null) ..
>>> >
>>> >  new ApplicationDomain(Application.applicaiton.currentDomain)
>>> >
>>> > Faz o teste e dá um feedback.
>>> >
>>> > []'s
>>> >
>>> > Em 15 de fevereiro de 2011 15:48, Arthur Rocha <[email protected]
>>> >escreveu:
>>> >
>>> >
>>> >
>>> > > Boa tarde pessoal,
>>> > > tenho uma aplicação onde utilizo Java, Flex, BlazeDs, Spring,
>>> > > Hibernate.
>>> > > Hoje na parte flex trabalho bastante com módulos, pois não conhecia a
>>> > > opção de se trabalhar com sub-aplicações.
>>> > > Vamos então ao problema:
>>> > > Estou lendo o livro "Enterprise Development with Flex" e no capítulo
>>> 7
>>> > > são descritas diferentes formas de se trabalhar com BootStrap
>>> (classes
>>> > > incializadas antes do contexto da aplicação e então compartilhadas
>>> > > entre a aplicação principal e sub-aplicações), porém como a maioria
>>> > > das coisas, não funciona "bonitamente" como dito no livro. Estou
>>> dando
>>> > > um load em minha sub-aplicação no contexto Same Sandbox Different
>>> > > Domain (SSDD) com o seguinte código:
>>> >
>>> > > private function setLoaderContext():void
>>> > > {
>>> > >    swfLoader.loaderContext = new LoaderContext(false,
>>> > >                                    new ApplicationDomain(null),
>>> > > SecurityDomain.currentDomain);
>>> > > }
>>> > > ]]>
>>> > >        </mx:Script>
>>> > > <mx:SWFLoader
>>> > >                id="swfLoader"
>>> > >                initialize="{setLoaderContext()}"
>>> > >                loadForCompatibility="true"
>>> > >                trustContent="true"
>>> > >                width="100%"
>>> > >                height="100%"
>>> > >                />
>>> >
>>> > > A aplicação carrega corretamente, porem quando vou fazer uma chamada
>>> a
>>> > > um serviço java com RemoteObject os dados (operation, destination)
>>> > > estão "null". Estes dados só chegam null para o Blaze quando carrego
>>> > > este swf como sub-aplicação, se eu chama-lo normalmente pelo browser
>>> > > funciona corretamente.
>>> > > Creio que esse erro esteja sendo ocasionado por alguma má
>>> > > implementação na minha classe BootStrap (PortalBootstrapLoader
>>> > > abaixo).
>>> > > Chamo minha aplicação principal pela seguinte URL:
>>> >
>>> > >
>>> http://localhost:8080/aplicacao/PortalBootstrapLoader.html?app=/aplic...
>>> > > e minhas sub-aplicações são carregadas como o seguinte exemplo:
>>> > > swfLoader.source = "
>>> http://localhost:8080/aplicacao/subApplication/app/
>>> > > index.swf";
>>> >
>>> > > Utilizo a versão 3.5 do compilador Flex.
>>> >
>>> > > Classes BootStrap:
>>> >
>>> > > package {
>>> > >   import flash.display.Loader;
>>> > >   import flash.display.Sprite;
>>> > >   import flash.display.StageAlign;
>>> > >   import flash.display.StageScaleMode;
>>> > >   import flash.events.Event;
>>> > >   import flash.net.URLRequest;
>>> > >   import flash.system.ApplicationDomain;
>>> > >   import flash.system.LoaderContext;
>>> > >   import flash.system.SecurityDomain;
>>> >
>>> > >   import mx.messaging.messages.AcknowledgeMessage;
>>> > > AcknowledgeMessage;
>>> > >   import mx.messaging.messages.AcknowledgeMessageExt;
>>> > > AcknowledgeMessageExt;
>>> > >   import mx.messaging.messages.AsyncMessage; AsyncMessage;
>>> > >   import mx.messaging.messages.AsyncMessageExt; AsyncMessageExt;
>>> > >   import mx.messaging.messages.CommandMessage; CommandMessage;
>>> > >   import mx.messaging.messages.CommandMessageExt; CommandMessageExt;
>>> > >   import mx.messaging.messages.ErrorMessage; ErrorMessage;
>>> > >   import mx.messaging.messages.HTTPRequestMessage;
>>> > > HTTPRequestMessage;
>>> > >   import mx.messaging.messages.MessagePerformanceInfo;
>>> > > MessagePerformanceInfo;
>>> > >   import mx.messaging.messages.RemotingMessage; RemotingMessage;
>>> > >   import mx.messaging.messages.SOAPMessage; SOAPMessage;
>>> > >   import mx.messaging.messages.IMessage;IMessage;
>>> > >   import mx.messaging.config.ConfigMap; ConfigMap;
>>> > >   import mx.messaging.channels.HTTPChannel; HTTPChannel;
>>> > >   import mx.core.mx_internal;
>>> >
>>> > >   import utils.RequiredClasses; RequiredClasses;
>>> >
>>> > >   public class PortalBootstrapLoader extends Sprite {
>>> >
>>> > >   public function PortalBootstrapLoader() {
>>> > >      super();
>>> > >      var required:RequiredClasses;
>>> > >    if
>>> > >
>>> (ApplicationDomain.currentDomain.hasDefinition("mx.core::UIComponent"))
>>> > >       throw new Error("UIComponent should not be in the bootstrap
>>> > > loader.");
>>> > >   /*  if
>>> > > (ApplicationDomain.currentDomain.hasDefinition("mx.core::Singleton"))
>>> > >       throw new Error("Singleton should not be in the bootstrap
>>> > > loader."); */
>>> > >    if (stage) {
>>> > >         stage.scaleMode = StageScaleMode.NO_SCALE;
>>> > >         stage.align = StageAlign.TOP_LEFT;
>>> > >    } else
>>> > >         isStageRoot = false;
>>> > >      root.loaderInfo.addEventListener(Event.INIT, onInit);
>>> > >   }
>>> > >   /**
>>> > >   * The Loader that loads the main application's SWF file.
>>> > >   */
>>> > >   private var loader:Loader;
>>> > >   /**
>>> > >   * Whether the bootstrap loader is at the stage root or not,
>>> > >   * it is the stage root only if it was the root
>>> > >   * of the first SWF file that was loaded by Flash Player.
>>> > >   * Otherwise, it could be a top-level application but not stage root
>>> > >   * if it was loaded by some other non-Flex shell or is sandboxed.
>>> > >   */
>>> > >   private var isStageRoot:Boolean = true;
>>> > >   /**
>>> > >   * Called when the bootstrap loader's SWF file has been loaded.
>>> > >   * Starts loading the application SWF specified by the
>>> > > applicationURL
>>> > >   * property.
>>> > >   */
>>> > >   private function onInit(event:Event):void {
>>> > >      loader = new Loader();
>>> > >        var loaderContext:LoaderContext  = new LoaderContext(
>>> > >         false,
>>> > >         new ApplicationDomain(ApplicationDomain.currentDomain),
>>> > >         SecurityDomain.currentDomain
>>> > >      );
>>> > >      addChild(loader);
>>> > >      loader.load(new URLRequest(applicationUrl), loaderContext );
>>> > >      loader.addEventListener(
>>> > >         "mx.managers.SystemManager.isBootstrapRoot",
>>> > >         bootstrapRootHandler
>>> > >      );
>>> > >      loader.addEventListener(
>>> > >         "mx.managers.SystemManager.isStageRoot",
>>> > >         stageRootHandler
>>> > >      );
>>> > >      loader.addEventListener(Event.ADDED, resizeHandler );
>>> > >      stage.addEventListener(Event.RESIZE, resizeHandler);
>>> > >   }
>>> > >   private function get applicationUrl():String{
>>> > >      var qs:QueryString = new QueryString();
>>> > >      //return qs.root + qs.parameters.app;
>>> > >        return "http://localhost:8080/aplicacao/index.swf";;
>>> > >   }
>>> > >   private function bootstrapRootHandler(event:Event):void {
>>> > >      event.preventDefault();
>>> > >   }
>>> > >   private function stageRootHandler(event:Event):void {
>>> > >      if (!isStageRoot)
>>> > >         event.preventDefault();
>>> > >   }
>>> > >   private function resizeHandler(event:Event=null):void {
>>> > >      if ( loader.content ){
>>> > >         Object(loader.content).setActualSize(stage.stageWidth,
>>> > > stage.stageHeight);
>>> > >      }
>>> > >   }
>>> > >  }
>>> > > }
>>> >
>>> > > Classe utilitária:
>>> >
>>> > > package utils
>>> > > {
>>> >
>>> > >        import flash.display.Loader;
>>> > >    import flash.display.Sprite;
>>> > >    import flash.display.StageAlign;
>>> > >    import flash.display.StageScaleMode;
>>> > >    import flash.events.Event;
>>> > >    import flash.net.URLRequest;
>>> > >    import flash.system.ApplicationDomain;
>>> > >    import flash.system.LoaderContext;
>>> > >    import flash.system.SecurityDomain;
>>> >
>>> > >    import mx.messaging.messages.AcknowledgeMessage;
>>> > > AcknowledgeMessage;
>>> > >    import mx.messaging.messages.AcknowledgeMessageExt;
>>> > > AcknowledgeMessageExt;
>>> > >    import mx.messaging.messages.AsyncMessage; AsyncMessage;
>>> > >    import mx.messaging.messages.AsyncMessageExt; AsyncMessageExt;
>>> > >    import mx.messaging.messages.CommandMessage; CommandMessage;
>>> > >    import mx.messaging.messages.CommandMessageExt; CommandMessageExt;
>>> > >    import mx.messaging.messages.ErrorMessage; ErrorMessage;
>>> > >    import mx.messaging.messages.HTTPRequestMessage;
>>> > > HTTPRequestMessage;
>>> > >    import mx.messaging.messages.MessagePerformanceInfo;
>>> > > MessagePerformanceInfo;
>>> > >    import mx.messaging.messages.RemotingMessage; RemotingMessage;
>>> > >    import mx.messaging.messages.SOAPMessage; SOAPMessage;
>>> > >    import mx.messaging.messages.IMessage;IMessage;
>>> > >    import mx.messaging.channels.HTTPChannel; HTTPChannel;
>>> > >    import mx.core.mx_internal;
>>> > >    import mx.messaging.config.ConfigMap; ConfigMap;
>>> > >    import mx.messaging.channels.AMFChannel; AMFChannel;
>>> > >    import mx.messaging.channels.StreamingAMFChannel;
>>> > > StreamingAMFChannel;
>>> > >    import mx.messaging.channels.StreamingConnectionHandler;
>>> > > StreamingConnectionHandler;
>>> > >    import mx.rpc.AbstractService; AbstractService;
>>> > >    import flash.utils.Proxy; Proxy;
>>> > >    import mx.messaging.messages.AbstractMessage; AbstractMessage;
>>> >
>>> > >        public class RequiredClasses
>>> > >        {
>>> > >                public function RequiredClasses()
>>> > >                {
>>> > >                        var acknowledgeMessage:AcknowledgeMessage;
>>> > >                        var
>>> acknowledgeMessageExt:AcknowledgeMessageExt;
>>> > >                        var asyncMessage:AsyncMessage;
>>> > >                        var asyncMessageExt:AsyncMessageExt;
>>> > >                        var commandMessage:CommandMessage;
>>> > >                        var commandMessageExt:CommandMessageExt;
>>> > >                        var errorMessage:ErrorMessage;
>>> > >                        var hTTPRequestMessage:HTTPRequestMessage;
>>> > >                        var
>>> messagePerformanceInfo:MessagePerformanceInfo;
>>> > >                        var remotingMessage:RemotingMessage;
>>> > >                        var sOAPMessage:SOAPMessage;
>>> > >                        var iMessage:IMessage;
>>> > >                        var configMap:ConfigMap;
>>> > >                }
>>> >
>>> > >        }
>>> > > }
>>> >
>>> > > --
>>> > > 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 emhttp://
>>> groups.google.com/group/flexdev
>>> >
>>> > --
>>> > Mario Juniorhttp://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
>>>
>>
>>
>>
>> --
>> 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
>>
>
>  --
> 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