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 <arthur.ro...@mv.com.br>*
Projetista de Software
Passo Fundo - RS - Brasil
+55(54)2104-2888

Celular: (54) 9618.2996
G. Talk: arthur....@gmail.com


Em 15 de fevereiro de 2011 20:12, Mário Júnior <juninho...@gmail.com>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 <arthur....@gmail.com>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 <juninho...@gmail.com> 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 <arthur....@gmail.com
>> >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
>> flexdev@googlegroups.com
>> > > Para sair da lista, envie um email em branco para
>> > > flexdev-unsubscr...@googlegroups.com
>> > > 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 flexdev@googlegroups.com
>> Para sair da lista, envie um email em branco para
>> flexdev-unsubscr...@googlegroups.com
>> 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 flexdev@googlegroups.com
> Para sair da lista, envie um email em branco para
> flexdev-unsubscr...@googlegroups.com
> 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 flexdev@googlegroups.com
Para sair da lista, envie um email em branco para 
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev

Responder a