SlideShare a Scribd company logo
EMBEDDING GROOVY IN A
   JAVA APPLICATION
   paolo.predonzani@manydesigns.com
Java-Groovy integration


      Compiling                   Embedding
                             (loading at run-time)


   BSF and JSR 223            Native embedding




GroovyShell   GroovyClassLoader        GroovyScriptEngine
COMPILING
    MyClass.groovy                 MyClass.class

       Maven                           Ant




Joint compilation: Java references Groovy and vice versa
BEAN SCRIPTING
  FRAMEWORK AND JSR 223




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

                                    Scripts +
                  GroovyClass
                                   classpath +
                    Loader
                                    reload +
                  Introduces the   dependency
GroovyShell         concept of     management
                     classpath
Simple isolated
    scripts
BEHIND THE SCENES...
GroovyShell                 GroovyScriptEngine


                      ScriptClassLoader

                                          dependency
                                            mgmt.


              GroovyClassLoader
GROOVYSHELL

GroovyShell
              .evaluate(String)                              Object


              .run(File, String[])                           Object

                                  Script
              .parse(File)
                                           .run()

                                           .invokeMethod()   Object
Embedding Groovy in a Java Application
Embedding Groovy in a Java Application
BINDING
GROOVYCLASSLOADER

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


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


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


                                                            Class
Embedding Groovy in a Java Application
GROOVYSCRIPTENGINE

GroovyScript
   Engine    GroovyScriptEngine(String[] roots)


            .loadScriptByName(String)                      Class


            .run(String, Binding)                          Object

                                        Script
            .createScript(String)                 .run()
Embedding Groovy in a Java Application
SCRIPT == CLASS
                                  Script


                         run()

def f() {}               main()

println “Hello world!”   f()
IT MAKES SENSE TO DEAL WITH
SCRIPTS AND CLASSES SEPARATELY


                        }   Classpath, packages, classes,
                            reuse, engineering


                        }   Scripts, files, “spot” usage,
                            hacking


Groovy is groovy because it supports both perspectives!
GROOVY IN PORTOFINO 4
           Classpath for
           common groovy
           classes



           Groovy actions
Groovy actions:
  URL structure same as directory
  structure
  One action.groovy per directory
  Packages are not required
  URL’s can be moved/renamed
  by moving/renaming the
  directories
  Nobody can depend on an
  action
  No refactoring is required
  Editable from browser or IDE

  Each action.groovy is self-
  contained. We treat it as a script.
Groovy classpath:
  A real classpath with packages
  and classes
  Contains beans, base classes for
  actions, utility classes invokable
  by actions
  Typically edited from an IDE
  Refactoring

  Groovy classpath: similar to a
  Java classpath but dynamically
  reloadable
CLASS LOADING

   ClassLoader        Loads Java classes only

           parent
        classloader
GroovyClassLoader     Loads Java & Groovy classes
This is the main problem of embedding.
If Groovy was compiled, Java and Groovy
    would live in the same class loader
CLASS LOADING: OGNL

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


... does not work because OGNL uses the Java classloader
             and cannot resolve Groovy classes
CLASS LOADING: HIBERNATE
In Groovy this works:




From Java it works only if we retrieve Book from the
GroovyClassLoader
PERFORMANCE:
CACHING & RELOADING

  Test strategy:
  1. “engine warm up”
  2. measure the first run
  3. measure the second run
  4. “touch” the script
  5. measure the third run
Embedding Groovy in a Java Application
PERFORMANCE:
               CONCLUSIONS
                               Caching   Reloading

GroovyShell.evaluate(String)     No         --

   GroovyShell.run(File)         Yes       No

    GroovyClassLoader            Yes       No

    GroovyScriptEngine           Yes       Yes
DEPENDENCY RELOADING
       A
                    A depends on B
                    B is modified
                    B is reloaded
       B
                    Also A should be reloaded


In theory, but until Groovy 1.8.8/2.0.4 there was a bug:
http://jira.codehaus.org/browse/GROOVY-4975
REFERENCES
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
THANK YOU!
paolo.predonzani@manydesigns.com

  http://www.manydesigns.com/
Ad

More Related Content

What's hot (20)

Asynchronous JavaScript Programming with Callbacks & Promises
Asynchronous JavaScript Programming with Callbacks & PromisesAsynchronous JavaScript Programming with Callbacks & Promises
Asynchronous JavaScript Programming with Callbacks & Promises
Hùng Nguyễn Huy
 
Nodejs buffers
Nodejs buffersNodejs buffers
Nodejs buffers
monikadeshmane
 
L14 exception handling
L14 exception handlingL14 exception handling
L14 exception handling
teach4uin
 
Grafana Lokiの Docker Logging Driver入門 (Docker Meetup Tokyo #34, 2020/01/16)
Grafana Lokiの Docker Logging Driver入門 (Docker Meetup Tokyo #34, 2020/01/16)Grafana Lokiの Docker Logging Driver入門 (Docker Meetup Tokyo #34, 2020/01/16)
Grafana Lokiの Docker Logging Driver入門 (Docker Meetup Tokyo #34, 2020/01/16)
NTT DATA Technology & Innovation
 
Tutorial Git
Tutorial GitTutorial Git
Tutorial Git
UCLouvain ACM Student Chapter
 
ClojureではじめるSTM入門
ClojureではじめるSTM入門ClojureではじめるSTM入門
ClojureではじめるSTM入門
sohta
 
Angular and The Case for RxJS
Angular and The Case for RxJSAngular and The Case for RxJS
Angular and The Case for RxJS
Sandi Barr
 
Traversing Graph Databases with Gremlin
Traversing Graph Databases with GremlinTraversing Graph Databases with Gremlin
Traversing Graph Databases with Gremlin
Marko Rodriguez
 
OPcache の最適化器の今
OPcache の最適化器の今OPcache の最適化器の今
OPcache の最適化器の今
y-uti
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass Slides
Nir Kaufman
 
Redux training
Redux trainingRedux training
Redux training
dasersoft
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
ECAM Brussels Engineering School
 
Spring jdbc
Spring jdbcSpring jdbc
Spring jdbc
Harshit Choudhary
 
Node js Modules and Event Emitters
Node js Modules and Event EmittersNode js Modules and Event Emitters
Node js Modules and Event Emitters
TheCreativedev Blog
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
Yong Joon Moon
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
jacekbecela
 
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camel
ssogabe
 
Technologies sur angular.pptx
Technologies sur angular.pptxTechnologies sur angular.pptx
Technologies sur angular.pptx
IdrissaDembl
 
Asynchronous JavaScript Programming
Asynchronous JavaScript ProgrammingAsynchronous JavaScript Programming
Asynchronous JavaScript Programming
Haim Michael
 
Asynchronous JavaScript Programming with Callbacks & Promises
Asynchronous JavaScript Programming with Callbacks & PromisesAsynchronous JavaScript Programming with Callbacks & Promises
Asynchronous JavaScript Programming with Callbacks & Promises
Hùng Nguyễn Huy
 
L14 exception handling
L14 exception handlingL14 exception handling
L14 exception handling
teach4uin
 
Grafana Lokiの Docker Logging Driver入門 (Docker Meetup Tokyo #34, 2020/01/16)
Grafana Lokiの Docker Logging Driver入門 (Docker Meetup Tokyo #34, 2020/01/16)Grafana Lokiの Docker Logging Driver入門 (Docker Meetup Tokyo #34, 2020/01/16)
Grafana Lokiの Docker Logging Driver入門 (Docker Meetup Tokyo #34, 2020/01/16)
NTT DATA Technology & Innovation
 
ClojureではじめるSTM入門
ClojureではじめるSTM入門ClojureではじめるSTM入門
ClojureではじめるSTM入門
sohta
 
Angular and The Case for RxJS
Angular and The Case for RxJSAngular and The Case for RxJS
Angular and The Case for RxJS
Sandi Barr
 
Traversing Graph Databases with Gremlin
Traversing Graph Databases with GremlinTraversing Graph Databases with Gremlin
Traversing Graph Databases with Gremlin
Marko Rodriguez
 
OPcache の最適化器の今
OPcache の最適化器の今OPcache の最適化器の今
OPcache の最適化器の今
y-uti
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass Slides
Nir Kaufman
 
Redux training
Redux trainingRedux training
Redux training
dasersoft
 
Node js Modules and Event Emitters
Node js Modules and Event EmittersNode js Modules and Event Emitters
Node js Modules and Event Emitters
TheCreativedev Blog
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
Yong Joon Moon
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
jacekbecela
 
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camel
ssogabe
 
Technologies sur angular.pptx
Technologies sur angular.pptxTechnologies sur angular.pptx
Technologies sur angular.pptx
IdrissaDembl
 
Asynchronous JavaScript Programming
Asynchronous JavaScript ProgrammingAsynchronous JavaScript Programming
Asynchronous JavaScript Programming
Haim Michael
 

Similar to Embedding Groovy in a Java Application (20)

Groovy & Grails: Scripting for Modern Web Applications
Groovy & Grails: Scripting for Modern Web ApplicationsGroovy & Grails: Scripting for Modern Web Applications
Groovy & Grails: Scripting for Modern Web Applications
rohitnayak
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finesse
mzgubin
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finesse
mzgubin
 
Test Driven In Groovy
Test Driven In GroovyTest Driven In Groovy
Test Driven In Groovy
Christopher Bartling
 
Groovy - Grails as a modern scripting language for Web applications
Groovy - Grails as a modern scripting language for Web applicationsGroovy - Grails as a modern scripting language for Web applications
Groovy - Grails as a modern scripting language for Web applications
IndicThreads
 
Groovy Online 100
Groovy Online 100Groovy Online 100
Groovy Online 100
reynolds
 
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
Guillaume Laforge
 
What's New in Groovy 1.6?
What's New in Groovy 1.6?What's New in Groovy 1.6?
What's New in Groovy 1.6?
Guillaume Laforge
 
Grails Internals Ggug Dec 2009
Grails Internals Ggug Dec 2009Grails Internals Ggug Dec 2009
Grails Internals Ggug Dec 2009
Skills Matter
 
Android Bootstrap
Android BootstrapAndroid Bootstrap
Android Bootstrap
donnfelker
 
An Introduction to Gradle for Java Developers
An Introduction to Gradle for Java DevelopersAn Introduction to Gradle for Java Developers
An Introduction to Gradle for Java Developers
Kostas Saidis
 
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume LaforgeGroovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Guillaume Laforge
 
Startup groovysession1
Startup groovysession1Startup groovysession1
Startup groovysession1
kyon mm
 
Dsl로 만나는 groovy
Dsl로 만나는 groovyDsl로 만나는 groovy
Dsl로 만나는 groovy
Seeyoung Chang
 
Grooscript gr8conf 2015
Grooscript gr8conf 2015Grooscript gr8conf 2015
Grooscript gr8conf 2015
Jorge Franco Leza
 
Taming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and GebTaming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and Geb
C4Media
 
Grooscript gr8conf
Grooscript gr8confGrooscript gr8conf
Grooscript gr8conf
GR8Conf
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
Schalk Cronjé
 
Svcc Groovy Testing
Svcc Groovy TestingSvcc Groovy Testing
Svcc Groovy Testing
Andres Almiray
 
[email protected]@groovy metaprogrammning
cdac@parag.gajbhiye@groovy metaprogrammningcdac@parag.gajbhiye@groovy metaprogrammning
[email protected]@groovy metaprogrammning
Parag Gajbhiye
 
Groovy & Grails: Scripting for Modern Web Applications
Groovy & Grails: Scripting for Modern Web ApplicationsGroovy & Grails: Scripting for Modern Web Applications
Groovy & Grails: Scripting for Modern Web Applications
rohitnayak
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finesse
mzgubin
 
Groovy Finesse
Groovy FinesseGroovy Finesse
Groovy Finesse
mzgubin
 
Groovy - Grails as a modern scripting language for Web applications
Groovy - Grails as a modern scripting language for Web applicationsGroovy - Grails as a modern scripting language for Web applications
Groovy - Grails as a modern scripting language for Web applications
IndicThreads
 
Groovy Online 100
Groovy Online 100Groovy Online 100
Groovy Online 100
reynolds
 
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
Guillaume Laforge
 
Grails Internals Ggug Dec 2009
Grails Internals Ggug Dec 2009Grails Internals Ggug Dec 2009
Grails Internals Ggug Dec 2009
Skills Matter
 
Android Bootstrap
Android BootstrapAndroid Bootstrap
Android Bootstrap
donnfelker
 
An Introduction to Gradle for Java Developers
An Introduction to Gradle for Java DevelopersAn Introduction to Gradle for Java Developers
An Introduction to Gradle for Java Developers
Kostas Saidis
 
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume LaforgeGroovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Groovy and Grails in Action - Devoxx 2008 - University - Guillaume Laforge
Guillaume Laforge
 
Startup groovysession1
Startup groovysession1Startup groovysession1
Startup groovysession1
kyon mm
 
Dsl로 만나는 groovy
Dsl로 만나는 groovyDsl로 만나는 groovy
Dsl로 만나는 groovy
Seeyoung Chang
 
Taming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and GebTaming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and Geb
C4Media
 
Grooscript gr8conf
Grooscript gr8confGrooscript gr8conf
Grooscript gr8conf
GR8Conf
 
Ad

More from Paolo Predonzani (8)

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
Paolo Predonzani
 
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
Paolo 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 Secondi
Paolo Predonzani
 
Come Incorporare un Interprete Groovy in un Applicativo Java
Come Incorporare un Interprete Groovy in un Applicativo JavaCome Incorporare un Interprete Groovy in un Applicativo Java
Come Incorporare un Interprete Groovy in un Applicativo Java
Paolo 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 Java
Paolo 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 refactoring
Paolo Predonzani
 
Model Driven Engineering - ManyDesigns Portofino
Model Driven Engineering - ManyDesigns PortofinoModel Driven Engineering - ManyDesigns Portofino
Model Driven Engineering - ManyDesigns Portofino
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 involvement
Paolo Predonzani
 
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
Paolo 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 Secondi
Paolo Predonzani
 
Come Incorporare un Interprete Groovy in un Applicativo Java
Come Incorporare un Interprete Groovy in un Applicativo JavaCome Incorporare un Interprete Groovy in un Applicativo Java
Come Incorporare un Interprete Groovy in un Applicativo Java
Paolo 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 Java
Paolo 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 refactoring
Paolo Predonzani
 
Model Driven Engineering - ManyDesigns Portofino
Model Driven Engineering - ManyDesigns PortofinoModel Driven Engineering - ManyDesigns Portofino
Model Driven Engineering - ManyDesigns Portofino
Paolo Predonzani
 
Ad

Recently uploaded (20)

Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Raffi Khatchadourian
 
UiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer OpportunitiesUiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer Opportunities
DianaGray10
 
Viam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdfViam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdf
camilalamoratta
 
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent LasterAI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
All Things Open
 
Bepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firmBepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firm
Benard76
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
BookNet Canada
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
How to Install & Activate ListGrabber - eGrabber
How to Install & Activate ListGrabber - eGrabberHow to Install & Activate ListGrabber - eGrabber
How to Install & Activate ListGrabber - eGrabber
eGrabber
 
Build 3D Animated Safety Induction - Tech EHS
Build 3D Animated Safety Induction - Tech EHSBuild 3D Animated Safety Induction - Tech EHS
Build 3D Animated Safety Induction - Tech EHS
TECH EHS Solution
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
MINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PRMINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PR
MIND CTI
 
AI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of DocumentsAI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of Documents
UiPathCommunity
 
TrsLabs - Leverage the Power of UPI Payments
TrsLabs - Leverage the Power of UPI PaymentsTrsLabs - Leverage the Power of UPI Payments
TrsLabs - Leverage the Power of UPI Payments
Trs Labs
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
Q1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor PresentationQ1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor Presentation
Dropbox
 
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdfAre Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Telecoms Supermarket
 
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Raffi Khatchadourian
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Raffi Khatchadourian
 
UiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer OpportunitiesUiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer Opportunities
DianaGray10
 
Viam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdfViam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdf
camilalamoratta
 
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent LasterAI 3-in-1: Agents, RAG, and Local Models - Brent Laster
AI 3-in-1: Agents, RAG, and Local Models - Brent Laster
All Things Open
 
Bepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firmBepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firm
Benard76
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
BookNet Canada
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
How to Install & Activate ListGrabber - eGrabber
How to Install & Activate ListGrabber - eGrabberHow to Install & Activate ListGrabber - eGrabber
How to Install & Activate ListGrabber - eGrabber
eGrabber
 
Build 3D Animated Safety Induction - Tech EHS
Build 3D Animated Safety Induction - Tech EHSBuild 3D Animated Safety Induction - Tech EHS
Build 3D Animated Safety Induction - Tech EHS
TECH EHS Solution
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
MINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PRMINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PR
MIND CTI
 
AI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of DocumentsAI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of Documents
UiPathCommunity
 
TrsLabs - Leverage the Power of UPI Payments
TrsLabs - Leverage the Power of UPI PaymentsTrsLabs - Leverage the Power of UPI Payments
TrsLabs - Leverage the Power of UPI Payments
Trs Labs
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
Q1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor PresentationQ1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor Presentation
Dropbox
 
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdfAre Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Telecoms Supermarket
 
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Raffi Khatchadourian
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 

Embedding Groovy in a Java Application