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