Apache Groovy is a powerful, optionally typed and dynamic language, with static-typing and static compilation capabilities, for the Java platform aimed at improving developer productivity thanks to a concise, familiar and easy to learn syntax. It integrates smoothly with any Java program, and immediately delivers to your application powerful features, including scripting capabilities, Domain-Specific Language authoring, runtime and compile-time meta-programming and functional programming.
In this presentation, we'll see how Groovy simplifies the life of Java Developers. Basically, this talk would be for beginners where I would introduce powerful Groovy concepts like - Groovy Collections, Closure, Traits etc.
Presentazione introduttiva su Groovy e Grails tratta dal materiale della serie di eventi Into The Groovy del JUG Milano tenuta allo Spring Meeting del 26/06/2010 a Cagliari organizzato da JUG Sardegna http://www.jugsardegna.org/vqwiki/jsp/Wiki?26giugno2010
Apache Groovy is a powerful, optionally typed and dynamic language, with static-typing and static compilation capabilities, for the Java platform aimed at improving developer productivity thanks to a concise, familiar and easy to learn syntax. It integrates smoothly with any Java program, and immediately delivers to your application powerful features, including scripting capabilities, Domain-Specific Language authoring, runtime and compile-time meta-programming and functional programming.
In this presentation, we'll see how Groovy simplifies the life of Java Developers. Basically, this talk would be for beginners where I would introduce powerful Groovy concepts like - Groovy Collections, Closure, Traits etc.
Presentazione introduttiva su Groovy e Grails tratta dal materiale della serie di eventi Into The Groovy del JUG Milano tenuta allo Spring Meeting del 26/06/2010 a Cagliari organizzato da JUG Sardegna http://www.jugsardegna.org/vqwiki/jsp/Wiki?26giugno2010
Distribuire una libreria Java per usarla come dipendenza gradlePaolo Montalto
L'utilizzo di dipendenze software è una tecnica entrata già da tempo nella pratica quotidiana di ciascun buon programmatore. I suoi vantaggi sono indubbi ma non tutti sanno come funzionano le dipendenze e come sia possibile rendere disponibile pubblicamente la propria libreria.
In questo talk cerco di spiegare per quale motivo è importante utilizzare dipendenze software, come funzionano, perché può essere utile pubblicare le proprie librerie e come è possibile farlo, mostrando un caso reale basato su Gradle.
Livin' with Docker - dallo sviluppo alla produzionegiacomos
Presentiamo un caso di studio di un progetto web nato e cresciuto con Docker al centro della scena. Vedremo le soluzioni scelte durante tutto il percorso, partendo da docker-compose in locale, per arrivare a CoreOS e systemd in produzione, passando per la fase di continuous integration/build e il deploy.
Talk DockerOps 13-02-2016, Ferrara
Sessione per NetCampus 2015. La diffusione sempre più ampia di applicazioni sviluppate interamente in HTML5 e JS richiede l'adozione di processi di automazione per la fase di build, testing e rilascio. In questa sessione vedremo quali sono i principali strumenti a nostra disposizione per semplificare queste fasi dello sviluppo.
La diffusione sempre più ampia di applicazioni sviluppate interamente in HTML5 e JS richiede l'adozione di processi di automazione per la fase di build, testing e rilascio. In questa sessione vedremo quali sono i principali strumenti a nostra disposizione per semplificare queste fasi dello sviluppo.
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8Wellnet srl
Spesso durante lo sviluppo e la manutenzione di un progetto siamo costretti a svolgere attività ripetitive o noiose (dall’esecuzione di un task alla replicazione e aggiornamento del sistema). Per risolvere alcuni di questi problemi proveremo ad usare Zaratan, un comodo strumento basato su Docker per installare tutte le componenti necessarie al funzionamento di Drupal, e Robo, un task runner scritto in PHP in grado di eseguire sia comandi Drush che azioni sul filesystem, sul database, ecc...
[drupalday2017] - DevOps: strumenti di automazione per Drupal8DrupalDay
Spesso durante lo sviluppo e la manutenzione di un progetto siamo costretti a svolgere attività ripetitive o noiose (dall’esecuzione di un task alla replicazione e aggiornamento del sistema). Per risolvere alcuni di questi problemi proveremo ad usare Zaratan, un comodo strumento basato su Docker per installare tutte le componenti necessarie al funzionamento di Drupal, e Robo, un task runner scritto in PHP in grado di eseguire sia comandi Drush che azioni sul filesystem, sul database, ecc...
di Luca Cracco
Javascript avanzato: sfruttare al massimo il webRoberto Messora
Javascript è uno dei linguaggi più sottovalutati e più incompresi dell'intero panorama dei linguaggi di programmazione, eppure è anche uno dei più utilizzati.
Da una parte le molteplici e differenti declinazioni degli strumenti di navigazione web, dall'altra l'infelice scelta storica di usare il termine "script", hanno contribuito alla creazione del mito di un linguaggio poco rigoroso, al servizio di ogni sorta di trucco o pezza di codice.
La verità invece racconta di un linguaggio dinamico ad oggetti a tutti gli effetti, con caratteristiche molto interessanti, seppur con qualche difetto, ma soprattutto un linguaggio che, sull'onda di HTML5, rivestirà se possibile ancora più importanza nell'immediato futuro.
In questa sessione verranno presentati aspetti poco conosciuti, ma molto importanti, di Javascript (scoping, hoisting, closures, ecc.), verranno presentati alcuni design patterns che permettono di strutturare in maniera intelligente le nostre librerie applicative in funzione della manutenibilità e delle performance, senza tralasciare, ove possibile, uno sguardo ad alcuni framework come jQuery o KnockoutJS.
Building Large Java Codebase with Bazel - CodeOneNatan Silnitsky
Continuous integration of a large interconnected Java codebase can be very challenging.
The traditional solution is to break the code up to small cohesive repositories and define semantically versioned modules in each one (e.g. using Maven or Gradle) in such a manner that won't break APIs. This leads to technical debt and stagnation.
Bazel allows to discard versions aside and to work purely with source code dependencies, whether in the local repository or an external one. It can handle very large Java codebases using aggressive caching and a high degree of parallelism.
How to put 100k lines of code into the (Google) cloud: storms and rainbowsPaolo Predonzani
Many examples of cloud-based applications start from scratch... but is it possible to deploy an existing, complex application on the cloud in a reasonable time?
We present our experience in porting the Portofino open-source enterprise platform to Google App Engine, discussing difficulties and advantages.
More Related Content
Similar to Come Incorporare un Interprete Groovy in Java
Distribuire una libreria Java per usarla come dipendenza gradlePaolo Montalto
L'utilizzo di dipendenze software è una tecnica entrata già da tempo nella pratica quotidiana di ciascun buon programmatore. I suoi vantaggi sono indubbi ma non tutti sanno come funzionano le dipendenze e come sia possibile rendere disponibile pubblicamente la propria libreria.
In questo talk cerco di spiegare per quale motivo è importante utilizzare dipendenze software, come funzionano, perché può essere utile pubblicare le proprie librerie e come è possibile farlo, mostrando un caso reale basato su Gradle.
Livin' with Docker - dallo sviluppo alla produzionegiacomos
Presentiamo un caso di studio di un progetto web nato e cresciuto con Docker al centro della scena. Vedremo le soluzioni scelte durante tutto il percorso, partendo da docker-compose in locale, per arrivare a CoreOS e systemd in produzione, passando per la fase di continuous integration/build e il deploy.
Talk DockerOps 13-02-2016, Ferrara
Sessione per NetCampus 2015. La diffusione sempre più ampia di applicazioni sviluppate interamente in HTML5 e JS richiede l'adozione di processi di automazione per la fase di build, testing e rilascio. In questa sessione vedremo quali sono i principali strumenti a nostra disposizione per semplificare queste fasi dello sviluppo.
La diffusione sempre più ampia di applicazioni sviluppate interamente in HTML5 e JS richiede l'adozione di processi di automazione per la fase di build, testing e rilascio. In questa sessione vedremo quali sono i principali strumenti a nostra disposizione per semplificare queste fasi dello sviluppo.
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8Wellnet srl
Spesso durante lo sviluppo e la manutenzione di un progetto siamo costretti a svolgere attività ripetitive o noiose (dall’esecuzione di un task alla replicazione e aggiornamento del sistema). Per risolvere alcuni di questi problemi proveremo ad usare Zaratan, un comodo strumento basato su Docker per installare tutte le componenti necessarie al funzionamento di Drupal, e Robo, un task runner scritto in PHP in grado di eseguire sia comandi Drush che azioni sul filesystem, sul database, ecc...
[drupalday2017] - DevOps: strumenti di automazione per Drupal8DrupalDay
Spesso durante lo sviluppo e la manutenzione di un progetto siamo costretti a svolgere attività ripetitive o noiose (dall’esecuzione di un task alla replicazione e aggiornamento del sistema). Per risolvere alcuni di questi problemi proveremo ad usare Zaratan, un comodo strumento basato su Docker per installare tutte le componenti necessarie al funzionamento di Drupal, e Robo, un task runner scritto in PHP in grado di eseguire sia comandi Drush che azioni sul filesystem, sul database, ecc...
di Luca Cracco
Javascript avanzato: sfruttare al massimo il webRoberto Messora
Javascript è uno dei linguaggi più sottovalutati e più incompresi dell'intero panorama dei linguaggi di programmazione, eppure è anche uno dei più utilizzati.
Da una parte le molteplici e differenti declinazioni degli strumenti di navigazione web, dall'altra l'infelice scelta storica di usare il termine "script", hanno contribuito alla creazione del mito di un linguaggio poco rigoroso, al servizio di ogni sorta di trucco o pezza di codice.
La verità invece racconta di un linguaggio dinamico ad oggetti a tutti gli effetti, con caratteristiche molto interessanti, seppur con qualche difetto, ma soprattutto un linguaggio che, sull'onda di HTML5, rivestirà se possibile ancora più importanza nell'immediato futuro.
In questa sessione verranno presentati aspetti poco conosciuti, ma molto importanti, di Javascript (scoping, hoisting, closures, ecc.), verranno presentati alcuni design patterns che permettono di strutturare in maniera intelligente le nostre librerie applicative in funzione della manutenibilità e delle performance, senza tralasciare, ove possibile, uno sguardo ad alcuni framework come jQuery o KnockoutJS.
Building Large Java Codebase with Bazel - CodeOneNatan Silnitsky
Continuous integration of a large interconnected Java codebase can be very challenging.
The traditional solution is to break the code up to small cohesive repositories and define semantically versioned modules in each one (e.g. using Maven or Gradle) in such a manner that won't break APIs. This leads to technical debt and stagnation.
Bazel allows to discard versions aside and to work purely with source code dependencies, whether in the local repository or an external one. It can handle very large Java codebases using aggressive caching and a high degree of parallelism.
Similar to Come Incorporare un Interprete Groovy in Java (20)
How to put 100k lines of code into the (Google) cloud: storms and rainbowsPaolo Predonzani
Many examples of cloud-based applications start from scratch... but is it possible to deploy an existing, complex application on the cloud in a reasonable time?
We present our experience in porting the Portofino open-source enterprise platform to Google App Engine, discussing difficulties and advantages.
10. GROOVYCLASSLOADER
GroovyClass
Loader .addClassPath(“/home/groovy”)
.loadClass(“com.manydesigns.Pippo”) Class
.parseClass(“/home/groovy/com/manydesigns/Pippo.groovy”)
Class
17. 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.
18. 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
19. CLASS LOADING
ClassLoader Carica solo classi Java
parent
classloader
GroovyClassLoader Carica classi Java e Groovy
20. Questo è il problema maggiore dell’embedding.
Se Groovy fosse compilato, Java e Groovy
vivrebbero nello stesso class loader.
21. CLASS LOADING: OGNL
OGNL: %{@org.example.MyGroovyClass@myMethod()}
... non funziona perché OGNL usa il classloader Java
e non riesce a risolvere classi Groovy
22. CLASS LOADING: HIBERNATE
Da Groovy funziona:
Da Java funziona solo se si recupera Book dal
GroovyClassLoader
23. 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
24.
25. PRESTAZIONI:
CONCLUSIONI
Caching Reloading
GroovyShell.evaluate(String) No --
GroovyShell.run(File) Sì No
GroovyClassLoader Sì No
GroovyScriptEngine Sì Sì
26. 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