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