Uso della classe ApplicationDomain

Lo scopo della classe ApplicationDomain è quello di consentire la memorizzazione di una tabella di definizioni di ActionScript 3.0. Tutto il codice presente in un file SWF viene definito come esistente all'interno di un dominio dell'applicazione. I domini delle applicazioni sono utilizzati per separare in partizioni le classi che si trovano nello stesso dominio di sicurezza. Consentono di avere più definizioni per la stessa classe e di riutilizzare le definizioni degli elementi principali da parte degli elementi secondari.

I domini delle applicazioni possono essere utilizzati quando si carica un file SWF esterno scritto in ActionScript 3.0 utilizzando l'API della classe Loader. Non è possibile utilizzare i domini delle applicazioni quando si carica un'immagine o un file SWF scritto in ActionScript 1.0 o ActionScript 2.0. Tutte le definizioni di ActionScript 3.0 contenute nella classe Loader vengono salvate nel dominio dell'applicazione. Quando si carica il file SWF, è possibile specificare che venga incluso nello stesso dominio dell'applicazione che contiene l'oggetto Loader impostando il parametro applicationDomain dell'oggetto LoaderContext su ApplicationDomain.currentDomain. L'inserimento del file SWF caricato nello stesso dominio dell'applicazione consente di accedere direttamente alle relative classi. Ciò può essere utile se si carica un file SWF che include contenuto multimediale incorporato a cui è possibile accedere tramite i nomi delle classi associate oppure se si desidera accedere ai metodi del file SWF caricato, come illustrato nell'esempio riportato di seguito:

package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.net.URLRequest;
    import flash.system.ApplicationDomain;
    import flash.system.LoaderContext;

    public class ApplicationDomainExample extends Sprite
    {
        private var ldr:Loader;
        public function ApplicationDomainExample()
        {
            ldr = new Loader();
            var req:URLRequest = new URLRequest("Greeter.swf");
            var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
            ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
            ldr.load(req, ldrContext);    
        }
        private function completeHandler(event:Event):void
        {
            ApplicationDomain.currentDomain.getDefinition("Greeter");
            var myGreeter:Greeter = Greeter(event.target.content);
            var message:String = myGreeter.welcome("Tommy");
            trace(message); // Hello, Tommy
        }
    }
}

Di seguito sono elencati altri aspetti da considerare quando si utilizzano i domini dell'applicazione:

Nel diagramma seguente è illustrata un'applicazione che carica il contenuto da diversi file SWF all'interno di un unico dominio, domain1.com. A seconda del contenuto caricato, possono essere utilizzati diversi domini dell'applicazione. Il testo seguente descrive la logica utilizzata per impostare il dominio dell'applicazione corretto per ogni file SWF incluso nell'applicazione.


Diagramma che illustra gli usi dei diversi domini applicazione per i file SWF caricati da un'applicazione. application1.swf carica module1.swf, ambedue nel dominio applicazione 1. Carica inoltre module2.swf nel dominio 3 e application2.swf nel dominio 2.

Il file dell'applicazione principale è application1.swf. Contiene gli oggetti Loader che caricano il contenuto da altri file SWF. In questo scenario, il dominio corrente è Dominio applicazione 1. Uso A, Uso B e Uso C illustrano le diverse tecniche per impostare il dominio dell'applicazione appropriato per ogni file SWF incluso in un'applicazione.

Uso A: separazione in partizioni del file SWF secondario creando un dominio di sistema secondario. Nel diagramma viene creato Dominio applicazione 2 come elemento secondario del dominio di sistema. Il file application2.swf viene caricato nel Dominio applicazione 2 e le relative definizioni di classe vengono in tal modo separate in partizioni dalle classi definite nel file application1.swf.

Questa tecnica può essere utilizzata, ad esempio, per fare in modo che un'applicazione datata carichi dinamicamente una versione più recente della stessa applicazione senza creare conflitti. Il conflitto non avviene perché nonostante vengano utilizzati gli stessi nomi di classe, questi sono separati in partizioni in domini dell'applicazione diversi.

Il codice riportato di seguito crea un dominio dell'applicazione secondario rispetto al dominio di sistema:

request.url = "application2.swf";
request.applicationDomain = new ApplicationDomain();

Uso B: aggiunta di nuove definizioni di classe alle definizioni di classe correnti. Il dominio dell'applicazione del file module1.swf è impostato sul dominio corrente (Dominio applicazione 1). Ciò consente di aggiungere le nuove definizioni di classe all'attuale set di definizioni di classe dell'applicazione. Questo approccio può essere utilizzato per una libreria condivisa in runtime dell'applicazione principale. Il file SWF caricato viene gestito come una libreria condivisa remota (RSL). Utilizzare questa tecnica per caricare le RSL mediante un precaricatore prima dell'avvio dell'applicazione.

Il codice riportato di seguito imposta un dominio dell'applicazione sul dominio corrente:

request.url = "module1.swf";
request.applicationDomain = ApplicationDomain.currentDomain;

Uso C: utilizzo delle definizioni di classe dell'elemento principale mediante la creazione di un nuovo dominio secondario del dominio corrente. Il dominio dell'applicazione del file module3.swf è un elemento secondario del dominio corrente e tale elemento secondario utilizza le versioni di tutte le classi dell'elemento principale. Questa tecnica può inoltre essere utilizzata, ad esempio, per caricare un modulo di un'applicazione RIA (Rich Internet Application) con più schermate come elemento secondario dell'applicazione principale, che utilizza i tipi dell'applicazione principale. Se è possibile garantire che tutte le classi siano sempre aggiornate ai fini della compatibilità con le versioni precedenti e che l'applicazione che effettua il caricamento sia sempre più recente degli elementi caricati, l'elemento secondario utilizzerà le versioni principali. La disponibilità di un nuovo dominio dell'applicazione consente inoltre di scaricare tutte le definizioni di classe per il processo di garbage collection, a condizione che sia possibile garantire che non si continuerà a utilizzare riferimenti al file SWF secondario.

Questa tecnica consente ai moduli caricati di condividere gli oggetti singleton del caricatore e i membri delle classi statici.

Il codice riportato di seguito crea un nuovo dominio secondario del dominio corrente:

request.url = "module3.swf";
request.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);

Flash CS3

 

Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti

Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/main/00000327.html