Generazione di codice dinamico per la realizzazione di catene di servizi componibili Matteo Fazi – matr. 0000260636.

Slides:



Advertisements
Presentazioni simili
IN QUESTA PRESENTAZIONE…
Advertisements

EJB Enterprise Java Beans B. Pernici. Approccio Java.
Ingegneria del software Modulo 3 -Tecniche dimplementazione Unità didattica 2 -EJB Ernesto Damiani Università degli Studi di Milano Lezione 3 – Ruoli nella.
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
Lunedì Pomeriggio della Qualità 21 marzo maggio luglio settembre novembre 2016.
Giuditta Cantoni, 4 E S.I.A I DATABASE. Definizione databese In informatica, il termine database, banca dati o base di dati (a volte abbreviato con il.
Generazione di codice dinamico per la realizzazione di catene di servizi componibili Progetto di Reti di Calcolatori LS A.A. 2007/08 Studente: Silvia Cereda.
Programmazione: Iterazione Esistono tre tipi di iterazione fondamentali e vedremo la corrispondenza dei relativi diagrammi a blocchi e la loro traduzione.
POLITECNICO DI MILANO FACOLTA’ DI INGEGNERIA SEDE DI CREMONA TESI DI DIPLOMA IN INGEGNERIA INFORMATICA RELATOREAUTORI Prof. Vittorio TrecordiDemicheli.
Progettare e programmare PROF.SENAREGA. Progettazione nella scuola  Processo mirato a definire e descrivere le finalità e le caratteristiche o modalità.
Gestione delle configurazioni Configuration management (CM) E` un processo che controlla le modifiche fatte a un sistema e gestisce le diverse versioni.
Studente Relatore Controrelatore Committente Sara Cervone
Facile da usare Un'interfaccia amministrativa completamente rinnovata, iniziare con Drupal è più facile!
La chimica della vita Ogni organismo vivente è una macchina sofisticata, risultato di un complesso insieme di reazioni chimiche. La costruzione e il funzionamento.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Sviluppo applicativo mobile per lettore barcode datalogic
Introduzione alla programmazione MIDI
Analisi e miglioramento del processo di manutenzione elicotteri
(Codice identificativo progetto: PON03PE_00159_1)
Comunicazione e Community Kion service Alessandro Furlati
Abstract relazione attività
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Real-time 3D skeletal animation and mesh skinning
EasyGraph Dynamic web-based dashboard
CRITTOGRAFIA Per crittografia si intende la protezione delle informazioni mediante l'utilizzo di codici e cifre. La crittografia è un componente fondamentale.
REX - Istruzioni tipo IKEA
Programmazione per la Musica | Adriano Baratè
PROGETTO DI RETI DI CALCOLATORI L-S
Commissione Calcolo e Reti
Pic16f84 Assembly I/O.
LE ARCHITETTURE NON VON NEUMANN
Analysis framework of distributed thread and malware data-sources
PROGETTO ATTI.CO.
Condividere dati di Excel tramite l'esportazione in un sito di SharePoint
Aurelio LEONE CTS OCP – Bologna 28/07/2016
Array di controlli.
Drupal tipi di contenuto
Regione Lombardia Data Base Topografico
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
INDICO Parte 1 01/07/2018 Francesco Serafini.
Informazioni generali sul progetto
Introduzione alle griglie computazionali
Sviluppo di server web e sistema di caching per contenuti dinamici
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Istruzioni per il nuovo sistema di acquisizione dati
SAS® OnDemand for Academics SAS Studio
analizzatore di protocollo
Sviluppo di un'applicazione web per l'utilizzo del framework SparkER
Corso di Ingegneria del Web A A Domenico Rosaci 1
istalliamo l’ambiente di sviluppo - ide
La fattura è composta da due parti: §L§L§L§L aaaa p p p p aaaa rrrr tttt eeee d d d d eeee ssss cccc rrrr iiii tttt tttt iiii vvvv aaaa §L§L§L§L aaaa.
OBJECT ORIENTED DATABASE
Programmare.
Blogging and Editorial Plan
STAT-RI WEB OPERATIVI.
Richiesta Accreditamento dei Soggetti Attuatori
Scheduling in Linux (Kernel 2.4 e 2.6)
© 2007 SEI-Società Editrice Internazionale, Apogeo
Esercitazione sulle modalità
Progetto “Comunic/Azione”
Relatore: Alessandro Corinti VM HORSE SERVICE di Viviana Moroni
UNIVERSITÀ DI MODENA E REGGIO EMILIA
Programmazione e Laboratorio di Programmazione
Strategie di progetto Si possono utilizzare le strategie tipiche dello sviluppo di un processo di ingegnerizzazione (es. ingegneria del software). Strategie.
Programmazione e Laboratorio di Programmazione
Usando strutture dati nella piattaforma Java Collections Framework
UML Diagramma statico di una classe
Portale Acquisti Alperia
Transcript della presentazione:

Generazione di codice dinamico per la realizzazione di catene di servizi componibili Matteo Fazi – matr. 0000260636

Obiettivi del progetto Composizione di servizi “off-the-shelf” Catene di servizi La composizione dei servizi deve avvenire “a caldo”: Sistema dinamico per la creazione di nuove catene Efficienza nella composizione Trasparenza nell'invocazione di catene mai richieste in precedenza Generazione di codice dinamico per la realizzazione di catene di servizi componibili.

Contesto applicativo L'ambito applicativo è Java EE 5 Il progetto sfrutta il supporto del Container JBoss I servizi sono i metodi invocabili su EJB Per ogni servizio (metodo) è disponibile: La signature del metodo La relativa interfaccia Java Il nome JNDI dell'EJB che implementa il metodo Indirizzo e porta del servizio JNDI Queste informazioni sono salvate in un oggetto denominato Brick Generazione di codice dinamico per la realizzazione di catene di servizi componibili.

Come creare dinamicamente le catene? Soluzione basata unicamente sul supporto alla reflection offerto da Java Pro: semplice realizzazione Contro: inefficiente Soluzione basata sulla creazione “a caldo” di codice sorgente della catena e successiva compilazione Contro: inefficiente; complessità realizzativa Soluzione basata sulla creazione diretta del bytecode della catena Pro: efficiente Contro: complessità realizzativa Framework ASM Generazione di codice dinamico per la realizzazione di catene di servizi componibili.

Processo di invocazione Quando viene richiesta l'invocazione di una catena: Se la catena è stata generata in precedenza: il bytecode viene caricato mediante il ClassLoader dell'applicazione Se la catena NON è stata generata in precedenza: Vengono recuperati i Brick relativi ai servizi Dai Brick viene generato il bytecode della catena Il bytecode viene salvato su supporto persistente La catena viene posta in esecuzione Generazione di codice dinamico per la realizzazione di catene di servizi componibili.

Architettura del sistema Executor: accetta le richieste di esecuzione delle catene Coordinator: coordina le attività di Executor e ASMBlackSmith ClassLoader: carica il bytecode relativo alle catene BrickManager: gestisce i Brick (registrazione/modifica/elimin azione) ASMBlackSmith: genera il bytecode relativo alle catene Generazione di codice dinamico per la realizzazione di catene di servizi componibili.

Struttura di una Catena Implementa il metodo execute Composta da due parti Parte “invariante”: comportamento indipendente dai servizi Parte “variabile”: dipende dai servizi Il sistema genera il bytecode relativo alla sola parte “variabile” Generazione di codice dinamico per la realizzazione di catene di servizi componibili.

Alcuni dettagli Le nuove catene sono anch'esse EJB La parte invariante è annotata con @Stateless, @Local, @Remote Al momento dell'invocazione il container deve disporre delle interfacce dei servizi Possibilità di fare il deploy delle catene in altri container Il sistema su richiesta genera un file .jar contenente le interfacce dei servizi, l'interfaccia IChain e la catena generata Il bytecode viene salvato su supporto persistente Generazione di codice dinamico per la realizzazione di catene di servizi componibili.

ClassLoader Per porre in esecuzione il bytecode delle catene è necessario crearne una nuova istanza A partire dal nome della catena viene recuperato il relativo bytecode Il bytecode è contenuto in oggetti di tipo Class Per ottenere una nuova istanza viene invocato Class.newInstance() Viene effettuato il cast a IChan Infine viene invocato il metodo execute() Class bytecode = _loader.loadClass(chainName); IChain chain = (IChain)bytecode.newInstance(); Generazione di codice dinamico per la realizzazione di catene di servizi componibili.

Alcuni problemi L'approccio appena descritto va contro la politica di gestione dei tipi di Java Due istanze della stessa classe caricate da due ClassLoader differenti sono considerate differenti Nel sistema è presente la stessa situazione Caricata dal ClassLoader cl1 org.package.FooBar foo = new org.package.FooBar(); org.pagacke.FooBar bar = (org.package.FooBar) foo; ClassCastException Caricata dal ClassLoader cl2 Caricata dal ClassLoader cl2 Caricata dal ClassLoader dell'applicazione Class bytecode = _loader.loadClass(chainName); IChain chain = (IChain)bytecode.newInstance(); Caricata dal ClassLoader del Container Generazione di codice dinamico per la realizzazione di catene di servizi componibili.

Soluzione Il ClassLoader dell'applicazione deve utilizzare (forzare) il ClassLoader del container per caricare le classi prodotte Rendere “momentaneamente” pubblico il metodo protected defineClass() attraverso la reflection Class cls = Class.forName( "java.lang.ClassLoader" ); method = cls.getDeclaredMethod( "defineClass", new Class[] {String.class, byte[].class, int.class, int.class} ); method.setAccessible( true ); Object[] args = new Object[] {name, clazzBytes, new Integer( 0 ), new Integer( clazzBytes.length )}; clazz = (Class) method.invoke( this.getParent(),args ); Generazione di codice dinamico per la realizzazione di catene di servizi componibili.

Soluzione La soluzione adottata è contro i principi base dei linguaggi ad oggetti Guadagno in termini di efficienza Le chiamate introspettive sono confinate alla prima richiesta di esecuzione di una catena Le successive esecuzioni della stessa catena recuperano il bytecode da una cache presente nel ClassLoader (no introspezione) Tale soluzione è consigliata anche dagli sviluppatori di ASM Generazione di codice dinamico per la realizzazione di catene di servizi componibili.

Conclusioni e sviluppi futuri Attenzione ai requisiti di trasparenza e di efficienza sia a regime sia in fase di creazione e caricamento delle catene Sviluppi futuri: Sicurezza Linguaggio di composizione Aumento del parallelismo nell'esecuzione delle varie fasi Generazione di codice dinamico per la realizzazione di catene di servizi componibili.