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=/aplicacao/index.swf
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 em http://groups.google.com/group/flexdev

Responder a