SlideShare uma empresa Scribd logo
1 de 29
COME INCORPORARE UN
INTERPRETE GROOVY IN UN
    APPLICATIVO JAVA
    paolo.predonzani@manydesigns.com
Integrazione Java-Groovy


    Compilazione              Embedding
                       (caricamento a run-time)


    BSF e JSR 223          Embedding nativo




GroovyShell   GroovyClassLoader    GroovyScriptEngine
COMPILAZIONE
   MyClass.groovy                 MyClass.class

     Maven                           Ant




Joint compilation: Java referenzia Groovy e viceversa
BEAN SCRIPTING
      FRAMEWORK E JSR 223




http://commons.apache.org/bsf/
http://groovy.codehaus.org/Bean+Scripting+Framework
http://groovy.codehaus.org/JSR+223+Scripting+with+Groovy
EMBEDDING NATIVO
                                 GroovyScript
                                    Engine

                                    Script +
                  GroovyClass
                                  classpath +
                    Loader
                                   reload +
                  Introduce il   gestione delle
GroovyShell       concetto di     dipendenze
                    classpath
Semplici script
   isolati
DIETRO LE QUINTE...
GroovyShell                 GroovyScriptEngine


                      ScriptClassLoader

                                            gestione
                                          dipendenze


              GroovyClassLoader
GROOVYSHELL

GroovyShell
              .evaluate(String)                              Object


              .run(File, String[])                           Object

                                  Script
              .parse(File)
                                           .run()

                                           .invokeMethod()   Object
BINDING
GROOVYCLASSLOADER

GroovyClass
  Loader    .addClassPath(“/home/groovy”)


            .loadClass(“com.manydesigns.Pippo”)             Class


            .parseClass(“/home/groovy/com/manydesigns/Pippo.groovy”)


                                                            Class
GROOVYSCRIPTENGINE

GroovyScript
   Engine    GroovyScriptEngine(String[] roots)


            .loadScriptByName(String)                      Class


            .run(String, Binding)                          Object

                                        Script
            .createScript(String)                 .run()
SCRIPT == CLASSE
                                  Script


                         run()

def f() {}               main()

println “Hello world!”   f()
E’ COMODO GESTIRE
SCRIPT E CLASSI SEPARATAMENTE


                       }   Classpath, package, classi,
                           riuso, ingegneria


                       }   Script, file, utilizzo “spot”,
                           hacking


Groovy è groovy perché supporta entrambe le visioni!
GROOVY IN PORTOFINO 4
           Classpath per classi
           groovy comuni




           Groovy actions
Groovy actions:
  La struttura delle directory
  ricalca quella degli URL
  Un action.groovy per directory
  Non è richiesto package
  Si possono spostare/rinominare
  gli URL spostando/rinominando
  le directory
  Nessuno può dipendere da una
  action
  Non è richiesto refactoring
  Editabili via web o da IDE

  Ogni action.groovy è un mondo
  a sé. Lo trattiamo come script.
Groovy classpath:
  Un vero classpath con package
  e classi
  Contiene bean, classi di base
  per action, classi di utilità
  utilizzabili dalle action
  File tipicamente editati da IDE
  Refactoring

  Classpath groovy, simile ad un
  classpath Java ma editabile
  dinamicamente
CLASS LOADING

   ClassLoader        Carica solo classi Java

           parent
        classloader
GroovyClassLoader     Carica classi Java e Groovy
Questo è il problema maggiore dell’embedding.
  Se Groovy fosse compilato, Java e Groovy
     vivrebbero nello stesso class loader.
CLASS LOADING: OGNL

OGNL: %{@org.example.MyGroovyClass@myMethod()}


   ... non funziona perché OGNL usa il classloader Java
            e non riesce a risolvere classi Groovy
CLASS LOADING: HIBERNATE
Da Groovy funziona:




Da Java funziona solo se si recupera Book dal
GroovyClassLoader
PRESTAZIONI:
CACHING E RELOADING

 Approccio dei test:
 1.“riscaldare i motori”
 2.misurare la prima esecuzione
 3.misurare la seconda esecuzione
 4.touch dello script
 5.misurare la terza esecuzione
PRESTAZIONI:
                CONCLUSIONI
                               Caching   Reloading

GroovyShell.evaluate(String)     No         --

   GroovyShell.run(File)         Sì        No

    GroovyClassLoader            Sì        No

    GroovyScriptEngine           Sì         Sì
RELOADING DIPENDENZE
       A
                   A dipende da B
                   B viene modificato
                   B viene ricaricato
       B
                   Anche A dovrebbe essere ricaricato


In teoria, ma fino a Groovy 1.8.8/2.0.4 c’era un bug:
http://jira.codehaus.org/browse/GROOVY-4975
RIFERIMENTI
http://groovy.codehaus.org/Embedding+Groovy

http://groovy.codehaus.org/The+groovyc+Ant+Task

http://docs.codehaus.org/display/GMAVEN/Home

http://groovy.codehaus.org/api/groovy/lang/GroovyShell.html

http://groovy.codehaus.org/api/groovy/lang/
GroovyClassLoader.html

http://groovy.codehaus.org/api/groovy/util/
GroovyScriptEngine.html
GRAZIE!
paolo.predonzani@manydesigns.com

  http://www.manydesigns.com/

Mais conteúdo relacionado

Destaque

2016-09 article Global Security Magazine par Mathieu Rigotto
2016-09 article Global Security Magazine par Mathieu Rigotto2016-09 article Global Security Magazine par Mathieu Rigotto
2016-09 article Global Security Magazine par Mathieu RigottoIMS NETWORKS
 
18. toma de muestras orina 24 horas
18. toma de muestras  orina 24 horas18. toma de muestras  orina 24 horas
18. toma de muestras orina 24 horascaedhmh
 
How to put 100k lines of code into the (Google) cloud: storms and rainbows
How to put 100k lines of code into the (Google) cloud: storms and rainbowsHow to put 100k lines of code into the (Google) cloud: storms and rainbows
How to put 100k lines of code into the (Google) cloud: storms and rainbowsPaolo Predonzani
 
Drug induced sexual dysfuynction
Drug induced sexual dysfuynctionDrug induced sexual dysfuynction
Drug induced sexual dysfuynctionUdayan Majumder
 
MVA Presentation 4
MVA Presentation 4MVA Presentation 4
MVA Presentation 4Bryan Chung
 
A c program of Phonebook application
A c program of Phonebook applicationA c program of Phonebook application
A c program of Phonebook applicationsvrohith 9
 
Sviluppare applicazioni android
Sviluppare applicazioni androidSviluppare applicazioni android
Sviluppare applicazioni androidPaolo Montalto
 
Etude Opinionway PriceMinister - Revente des cadeaux de Noel
Etude Opinionway PriceMinister - Revente des cadeaux de NoelEtude Opinionway PriceMinister - Revente des cadeaux de Noel
Etude Opinionway PriceMinister - Revente des cadeaux de NoelPriceMinister
 
Contacts management system
Contacts management systemContacts management system
Contacts management systemshraddhaMaral
 
AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013
AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013
AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013Carlo Bonamico
 

Destaque (15)

2016-09 article Global Security Magazine par Mathieu Rigotto
2016-09 article Global Security Magazine par Mathieu Rigotto2016-09 article Global Security Magazine par Mathieu Rigotto
2016-09 article Global Security Magazine par Mathieu Rigotto
 
Grade 10 techniques
Grade 10 techniquesGrade 10 techniques
Grade 10 techniques
 
18. toma de muestras orina 24 horas
18. toma de muestras  orina 24 horas18. toma de muestras  orina 24 horas
18. toma de muestras orina 24 horas
 
How to put 100k lines of code into the (Google) cloud: storms and rainbows
How to put 100k lines of code into the (Google) cloud: storms and rainbowsHow to put 100k lines of code into the (Google) cloud: storms and rainbows
How to put 100k lines of code into the (Google) cloud: storms and rainbows
 
JMeter
JMeterJMeter
JMeter
 
Drug induced sexual dysfuynction
Drug induced sexual dysfuynctionDrug induced sexual dysfuynction
Drug induced sexual dysfuynction
 
EIP with Apache Camel
EIP with Apache CamelEIP with Apache Camel
EIP with Apache Camel
 
MVA Presentation 4
MVA Presentation 4MVA Presentation 4
MVA Presentation 4
 
A c program of Phonebook application
A c program of Phonebook applicationA c program of Phonebook application
A c program of Phonebook application
 
Sviluppare applicazioni android
Sviluppare applicazioni androidSviluppare applicazioni android
Sviluppare applicazioni android
 
Etude Opinionway PriceMinister - Revente des cadeaux de Noel
Etude Opinionway PriceMinister - Revente des cadeaux de NoelEtude Opinionway PriceMinister - Revente des cadeaux de Noel
Etude Opinionway PriceMinister - Revente des cadeaux de Noel
 
Contacts management system
Contacts management systemContacts management system
Contacts management system
 
Ego dr. vaca diez
Ego dr. vaca diezEgo dr. vaca diez
Ego dr. vaca diez
 
Instrumental Sanitario
Instrumental SanitarioInstrumental Sanitario
Instrumental Sanitario
 
AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013
AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013
AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013
 

Semelhante a Come Incorporare un Interprete Groovy in un Applicativo Java

Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsAlberto Brandolini
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicinodavide ficano
 
Distribuire una libreria Java per usarla come dipendenza gradle
Distribuire una libreria Java per usarla come dipendenza gradleDistribuire una libreria Java per usarla come dipendenza gradle
Distribuire una libreria Java per usarla come dipendenza gradlePaolo Montalto
 
Introduzione a WebGL
Introduzione a WebGLIntroduzione a WebGL
Introduzione a WebGLnigerpunk
 
Techbar nodejs+mongodb+mongoose
Techbar nodejs+mongodb+mongooseTechbar nodejs+mongodb+mongoose
Techbar nodejs+mongodb+mongooseMassimo Biagioli
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceGiuseppe Toto
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzionegiacomos
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e PostgresqlLucio Grenzi
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacyTommaso Torti
 
Java SE 5. Capitolo 01: Base
 Java SE 5. Capitolo 01: Base Java SE 5. Capitolo 01: Base
Java SE 5. Capitolo 01: Basebobpuley
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automationAntonio Liccardi
 
JAVASCRIPT TASK AUTOMATION
JAVASCRIPT TASK AUTOMATIONJAVASCRIPT TASK AUTOMATION
JAVASCRIPT TASK AUTOMATIONDotNetCampus
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automationDotNetCampus
 
RESTful APIs (ITA) - /w WebMachine
RESTful APIs (ITA) - /w WebMachineRESTful APIs (ITA) - /w WebMachine
RESTful APIs (ITA) - /w WebMachineGiancarlo Valente
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8DrupalDay
 

Semelhante a Come Incorporare un Interprete Groovy in un Applicativo Java (20)

Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con Grails
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Distribuire una libreria Java per usarla come dipendenza gradle
Distribuire una libreria Java per usarla come dipendenza gradleDistribuire una libreria Java per usarla come dipendenza gradle
Distribuire una libreria Java per usarla come dipendenza gradle
 
Introduzione a WebGL
Introduzione a WebGLIntroduzione a WebGL
Introduzione a WebGL
 
Techbar nodejs+mongodb+mongoose
Techbar nodejs+mongodb+mongooseTechbar nodejs+mongodb+mongoose
Techbar nodejs+mongodb+mongoose
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzione
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e Postgresql
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
Java SE 5. Capitolo 01: Base
 Java SE 5. Capitolo 01: Base Java SE 5. Capitolo 01: Base
Java SE 5. Capitolo 01: Base
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automation
 
JAVASCRIPT TASK AUTOMATION
JAVASCRIPT TASK AUTOMATIONJAVASCRIPT TASK AUTOMATION
JAVASCRIPT TASK AUTOMATION
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automation
 
Jug 30 10 04 Jdo
Jug 30 10 04 JdoJug 30 10 04 Jdo
Jug 30 10 04 Jdo
 
RESTful APIs (ITA) - /w WebMachine
RESTful APIs (ITA) - /w WebMachineRESTful APIs (ITA) - /w WebMachine
RESTful APIs (ITA) - /w WebMachine
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
 

Mais de Paolo Predonzani

Wiki-like collaborative development for seamless customer involvement
Wiki-like collaborative development for seamless customer involvementWiki-like collaborative development for seamless customer involvement
Wiki-like collaborative development for seamless customer involvementPaolo Predonzani
 
Portofino 4: Creare Webapp da Database Esistenti in 30 Secondi
Portofino 4: Creare Webapp da Database Esistenti in 30 SecondiPortofino 4: Creare Webapp da Database Esistenti in 30 Secondi
Portofino 4: Creare Webapp da Database Esistenti in 30 SecondiPaolo Predonzani
 
Embedding Groovy in a Java Application
Embedding Groovy in a Java ApplicationEmbedding Groovy in a Java Application
Embedding Groovy in a Java ApplicationPaolo Predonzani
 
Come Incorporare un Interprete Groovy in Java
Come Incorporare un Interprete Groovy in JavaCome Incorporare un Interprete Groovy in Java
Come Incorporare un Interprete Groovy in JavaPaolo Predonzani
 
70k linee di codice, tangle architetturali e le sfide del refactoring
70k linee di codice, tangle architetturali e le sfide del refactoring70k linee di codice, tangle architetturali e le sfide del refactoring
70k linee di codice, tangle architetturali e le sfide del refactoringPaolo Predonzani
 
Model Driven Engineering - ManyDesigns Portofino
Model Driven Engineering - ManyDesigns PortofinoModel Driven Engineering - ManyDesigns Portofino
Model Driven Engineering - ManyDesigns PortofinoPaolo Predonzani
 

Mais de Paolo Predonzani (6)

Wiki-like collaborative development for seamless customer involvement
Wiki-like collaborative development for seamless customer involvementWiki-like collaborative development for seamless customer involvement
Wiki-like collaborative development for seamless customer involvement
 
Portofino 4: Creare Webapp da Database Esistenti in 30 Secondi
Portofino 4: Creare Webapp da Database Esistenti in 30 SecondiPortofino 4: Creare Webapp da Database Esistenti in 30 Secondi
Portofino 4: Creare Webapp da Database Esistenti in 30 Secondi
 
Embedding Groovy in a Java Application
Embedding Groovy in a Java ApplicationEmbedding Groovy in a Java Application
Embedding Groovy in a Java Application
 
Come Incorporare un Interprete Groovy in Java
Come Incorporare un Interprete Groovy in JavaCome Incorporare un Interprete Groovy in Java
Come Incorporare un Interprete Groovy in Java
 
70k linee di codice, tangle architetturali e le sfide del refactoring
70k linee di codice, tangle architetturali e le sfide del refactoring70k linee di codice, tangle architetturali e le sfide del refactoring
70k linee di codice, tangle architetturali e le sfide del refactoring
 
Model Driven Engineering - ManyDesigns Portofino
Model Driven Engineering - ManyDesigns PortofinoModel Driven Engineering - ManyDesigns Portofino
Model Driven Engineering - ManyDesigns Portofino
 

Último

Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 

Último (9)

Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 

Come Incorporare un Interprete Groovy in un Applicativo Java