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
