SlideShare a Scribd company logo
POLYGOT JAVA EE ON
THE GRAALVM
Ryan Cuprak
What is GraalVM?
• OpenJDK distribution from Oracle
• Java 8 update 212
• Oracle technologies not included (Java Webstart etc.)
• Community & Enterprise Editions
• Enables polygot development:
• JavaScript, Python, R, Ruby, C, C++
• Can generate native, statically linked executables
OpenJDK Distributions
Confused about distributions?
OpenJDK Distributions
GraalVM vs. other OpenJDK distributions:
• Additional languages (JavaScript, R, Python, Ruby etc.)
• Different JIT compiler (better performance)
• Can generate native images
• Isolates – multiple VM instances in process
Why GraalVM?
• Interop with other languages painful/high impact:
• JNI
• Process API painful
• Nashorn can’t keep up…
• Java can’t compete in serverless
• Startup time to long
• Image size too big
GraalVM native-image
Generates statically
linked native executable
GraalVM Overview
Source: https://www.graalvm.org/docs/
GraalVM Components
GraalVM Compiler Just-in-Time (JIT) compiler
implemented in Java (like C2 in
hotspot)
GraalVM Native Image Ahead-of-time compilation technology
that produces executable binaries of
class files.
Truffle Framework Framework for implementing
languages on top of GraalVM
Instrumentation Support Language-agnostic debugger, profiler,
heap viewer tool chain
GraalVM Pieces
• Substrate VM – Ahead-of-Time Compiler, turns a regular
Java application into a binary file
• https://github.com/oracle/graal/blob/master/substratevm/README.
md
• Sulong – high-performance LLVM bitcode interpreter built
on the GraalVM.
• https://github.com/oracle/graal/tree/master/sulong
GraalVM Pieces
• Java Hotspot VM + GraalVM compiler
• Node.js runtime + GraalVM JavaScript interpreterRuntimes
• GraalVM compiler
• JavaScript interpreter
• LLVM bytecode interpreter
• GraalVM Polygot API
Libraries
• JavaScript REPL
• LLVM bitcode interpreter
• GraalVM Updater
Utilities
GraalVM
Available Libraries
0 100000 200000 300000 400000 500000 600000 700000 800000
Java
Ruby
R
Python
Node
Non-Java
• Java packages 30%
• C/C++ Libraries not included!
Top Libraries
Why Polygot?
- Use best tool for the job -
GraalVM FAQ
• Can’t Java already run JavaScript, Python, Ruby via
Nashorn/Rhino, Jython, and Ruby?
• Was Nashorn killed because of GraalVM?
• Native libraries, what’s wrong with JNI?
• Is native-client related to jlink?
Yes – but with lots of limitations…
Very challenging…
- No -
- No -
GraalVM FAQ…
• With GraalVM can I leverage native libraries etc.?
• Does it require a commercial license for production?
• What platforms are supported?
• Do existing Java/Jakarta EE containers run on GraalVM?
- Yes -
- No -
- Mac / Linux -
- Yes -
GraalVM Possibilities
Invoke
Invoke
Invoke
Invoke
Invoke
Invoke
GraalVM Possibilities…
Invoke Invoke
Invoke Invoke
Invoke Invoke
GraalVM + Jakarta EE
• Polygot expands JEE ecosystem possibilities
• Unifies enterprise architecture
• No separate processes for python/Javascript
• Use same libraries server-side/client-side
• Example: Run same UI validation logic on server as client.
• No clunky language interop packages
• Improves performance (R/Ruby/Java)
• Simplifies runtime architecture and coordination
JEE + GraalVM
Wrap
Invoke
Installation https://www.graalvm.org/downloads/
Docker
containers
available.
docker pull
oracle/graalvm-ce:19.0.2
Installation
• tar xfz graalvm-ce.tar.gz
• MacOS X
• mv graalvm-ce-19.0.2 /Library/Java/JavaVirtualMachines/
• Jenv (http://www.jenv.be)
• jenv add <installation director>
• jenv global 1.8.0.212 (can be confusing with Oracle’s OpenJDK)
• Add GRAAL_HOME environment variable (convenience)
export GRAAL_HOME= /Library/Java/JavaVirtualMachines/graalvm-ce-
19.0.2/Contents/home
If graalvm directory own by root complicates installing
additional languages/packages.
Maven Toolchain
~/.m2/toolchains.xml
Installation Check
JDK Differences
Removed Added
javafxpackager gu
javapackager hsdb
jmc js
lli
node
npm
polygot
Additional Languages
• Install optional languages:
• gu install R
• gu install python
• gu install ruby
• gu install native-image
• New additions to bin
R Rscript Bundle Bundler Gem
graalpython irb native-image native-image-configure rake
rdoc rebuild-images ri ruby truffleruby
Debugging
Project Setup - Maven
References
~/.m2/toolchains.xml
Maven Coordinates
Hello World Example
GraalVM API Package
Polygot (org.graalvm.polyglot)
Proxy (org.graalvm.polyglot.proxy)
IO (org.graalvm.polyglot.io)
Key Polygot Package Classes
• Context – context for guest language(s), evaluates code
• Engine – execution engine, enables inspection
• Source – source code unit to be evaluated
• Value – polygot value accessed via language agnostic
operations.
Interoperability
R
• eval.polyglot('languageId', 'code’)
• eval.polyglot(path = '/path/to/file.extension’)
• export('polyglot-value-name', rObject)
• import('exported-polyglot-value-name’)
Ruby/Python
• Polygot.eval(‘languageId’,’code’)
JavaScript
• Polygot.export/import/eval
Interoperability – Data Types
• JavaScript
var BigInteger = Java.type('java.math.BigInteger’);
• R
imageClass <- java.type('java.awt.image.BufferedImage’)
• Ruby
BigDecimal = Java.type('java.math.BigDecimal’)
• Python
import java
BigDecimal = java.type('java.math.BigDecimal')
C/C++ Interoperability
clang -g -O1 -c -emit-llvm -
I$GRAALVM_HOME/jre/languages/llvm/include hello.c
Use #include<polygot.h>
Nashorn Interoperability
https://github.com/graalvm/graaljs/blob/master/docs/user/
JavaInterop.md
Jakarta EE/GraalVM Hello World
• Jakara EE application running on Payara Micro
• Payara Micro, JEE container in a jar file (70 megs)
• Function implemented in each language that:
• Accepts a parameter
• Returns a message
• Use Warm-up bean to service requests fast
• Languages:
• R, JavaScript, Python, Ruby, C
Jakarta EE/GraalVM Hello World Demo
Express + Jakarta EE
Wrap
• Express web framework for Node.js
• Easy-to-use framework for developing web apps
• Start application in Node, then launch the application container
(Payara Micro)
• Express then calls into Payara Micro to invoke EJBs
Express + Jakarta EE
https://expressjs.com
Express + Jakarta EE
Express + Jakarta EE
Jakarta EE + Python
• Use a CDI interceptor to catch runaway scripts
• Seamlessly pass JPA entities to Python to manipulate
Future Opportunities!
• Jakarta EE no longer limited to Java?
• Non-Java bindings for other languages
• C++ EJB Singleton?
• Dependency Injection for non-Java objects
• Isolates instead of classloaders
• GraalVM isolates – multiple independent VM instances in JVM
• Improves security
• Limits impact crashes
• Reactive support?
• Many possibilities…
Challenges & Limitations
• Window distribution incomplete
• Building & packaging
• Java cannot launch Node.js
• R & Python support is experimental
• Python C API is incomplete
• Practically no packages are supported
• graalpython -m ginstall install numpy
Challenges & Limitations…
• Rudimentary Documentation
• On-going changes to GraalVM
• Run headless (NodeJS invoking Java)
• Lots of trial and error…
Best Practices
• Warm-up contexts to improve performance
@Startup @Singleton
• Limit access of untrusted scripts
• Monitor and kills runaway scripts
GraalVM EE Starter
Resources
• Gitter Community
https://gitter.im/graalvm/home
• Medium GraalVM Blog
https://medium.com/graalvm
• Wrapping SQLite
https://habr.com/ru/post/358700/
Q&A
Twitter: @ctjava
Email: rcuprak@gmail.com / r5k@3ds.com
Blog: cuprak.info
Linkedin: www.linkedin.com/in/rcuprak
Slides: www.slideshare.net/rcuprak/presentations

More Related Content

What's hot

How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...
How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...
How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...
Lucas Jellema
 
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
昌桓 李
 
HBase at LINE
HBase at LINEHBase at LINE
HBase at LINE
Shun Nakamura
 
Spring Native and Spring AOT
Spring Native and Spring AOTSpring Native and Spring AOT
Spring Native and Spring AOT
VMware Tanzu
 
Spring boot
Spring bootSpring boot
Spring boot
sdeeg
 
HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU
HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOUHOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU
HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU
Lucas Jellema
 
使ってみよう!JDK Flight Recorder
使ってみよう!JDK Flight Recorder使ってみよう!JDK Flight Recorder
使ってみよう!JDK Flight Recorder
Yoshiro Tokumasu
 
MySQL InnoDB Cluster - Advanced Configuration & Operations
MySQL InnoDB Cluster - Advanced Configuration & OperationsMySQL InnoDB Cluster - Advanced Configuration & Operations
MySQL InnoDB Cluster - Advanced Configuration & Operations
Frederic Descamps
 
Quarkus tips, tricks, and techniques
Quarkus tips, tricks, and techniquesQuarkus tips, tricks, and techniques
Quarkus tips, tricks, and techniques
Red Hat Developers
 
Spring boot
Spring bootSpring boot
Spring boot
Gyanendra Yadav
 
Build Low-Latency Applications in Rust on ScyllaDB
Build Low-Latency Applications in Rust on ScyllaDBBuild Low-Latency Applications in Rust on ScyllaDB
Build Low-Latency Applications in Rust on ScyllaDB
ScyllaDB
 
Gradle
GradleGradle
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
Jean-François Gagné
 
Oracle WebLogic Server Basic Concepts
Oracle WebLogic Server Basic ConceptsOracle WebLogic Server Basic Concepts
Oracle WebLogic Server Basic ConceptsJames Bayer
 
GraalVM
GraalVMGraalVM
Transaction Management on Cassandra
Transaction Management on CassandraTransaction Management on Cassandra
Transaction Management on Cassandra
Scalar, Inc.
 
HA環境構築のベスト・プラクティス
HA環境構築のベスト・プラクティスHA環境構築のベスト・プラクティス
HA環境構築のベスト・プラクティス
EnterpriseDB
 
Running MariaDB in multiple data centers
Running MariaDB in multiple data centersRunning MariaDB in multiple data centers
Running MariaDB in multiple data centers
MariaDB plc
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
Santosh Kumar Kar
 
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
IBM Analytics Japan
 

What's hot (20)

How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...
How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...
How and Why GraalVM is quickly becoming relevant for developers (ACEs@home - ...
 
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
 
HBase at LINE
HBase at LINEHBase at LINE
HBase at LINE
 
Spring Native and Spring AOT
Spring Native and Spring AOTSpring Native and Spring AOT
Spring Native and Spring AOT
 
Spring boot
Spring bootSpring boot
Spring boot
 
HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU
HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOUHOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU
HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU
 
使ってみよう!JDK Flight Recorder
使ってみよう!JDK Flight Recorder使ってみよう!JDK Flight Recorder
使ってみよう!JDK Flight Recorder
 
MySQL InnoDB Cluster - Advanced Configuration & Operations
MySQL InnoDB Cluster - Advanced Configuration & OperationsMySQL InnoDB Cluster - Advanced Configuration & Operations
MySQL InnoDB Cluster - Advanced Configuration & Operations
 
Quarkus tips, tricks, and techniques
Quarkus tips, tricks, and techniquesQuarkus tips, tricks, and techniques
Quarkus tips, tricks, and techniques
 
Spring boot
Spring bootSpring boot
Spring boot
 
Build Low-Latency Applications in Rust on ScyllaDB
Build Low-Latency Applications in Rust on ScyllaDBBuild Low-Latency Applications in Rust on ScyllaDB
Build Low-Latency Applications in Rust on ScyllaDB
 
Gradle
GradleGradle
Gradle
 
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
 
Oracle WebLogic Server Basic Concepts
Oracle WebLogic Server Basic ConceptsOracle WebLogic Server Basic Concepts
Oracle WebLogic Server Basic Concepts
 
GraalVM
GraalVMGraalVM
GraalVM
 
Transaction Management on Cassandra
Transaction Management on CassandraTransaction Management on Cassandra
Transaction Management on Cassandra
 
HA環境構築のベスト・プラクティス
HA環境構築のベスト・プラクティスHA環境構築のベスト・プラクティス
HA環境構築のベスト・プラクティス
 
Running MariaDB in multiple data centers
Running MariaDB in multiple data centersRunning MariaDB in multiple data centers
Running MariaDB in multiple data centers
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
 
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
 

Similar to Polygot Java EE on the GraalVM

Peru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVMPeru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVM
Domingo Suarez Torres
 
GraalVM
GraalVMGraalVM
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx PluginGr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx PluginYasuharu Nakano
 
GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28
Jorge Hidalgo
 
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
David Voyles
 
Introduction to Micronaut - JBCNConf 2019
Introduction to Micronaut - JBCNConf 2019Introduction to Micronaut - JBCNConf 2019
Introduction to Micronaut - JBCNConf 2019
graemerocher
 
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVM
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVMHOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVM
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVM
Owais Zahid
 
GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22
Jorge Hidalgo
 
A tour of Java and the JVM
A tour of Java and the JVMA tour of Java and the JVM
A tour of Java and the JVM
Alex Birch
 
Tips For Maintaining OSS Projects
Tips For Maintaining OSS ProjectsTips For Maintaining OSS Projects
Tips For Maintaining OSS Projects
Taro L. Saito
 
GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18
Jorge Hidalgo
 
Simple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvmSimple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvm
Jamie Coleman
 
Simple tweaks to get the most out of your JVM
Simple tweaks to get the most out of your JVMSimple tweaks to get the most out of your JVM
Simple tweaks to get the most out of your JVM
Jamie Coleman
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
Guillaume Laforge
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
VMware Tanzu
 
Introduction to JAVA
Introduction to JAVAIntroduction to JAVA
Introduction to JAVA
Md. Tanvir Hossain
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
C4Media
 
Jruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-javaJruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-javaKeith Bennett
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal Java
Philippe Riand
 
Gwt overview & getting started
Gwt overview & getting startedGwt overview & getting started
Gwt overview & getting startedBinh Bui
 

Similar to Polygot Java EE on the GraalVM (20)

Peru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVMPeru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVM
 
GraalVM
GraalVMGraalVM
GraalVM
 
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx PluginGr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
 
GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28
 
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
 
Introduction to Micronaut - JBCNConf 2019
Introduction to Micronaut - JBCNConf 2019Introduction to Micronaut - JBCNConf 2019
Introduction to Micronaut - JBCNConf 2019
 
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVM
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVMHOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVM
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVM
 
GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22
 
A tour of Java and the JVM
A tour of Java and the JVMA tour of Java and the JVM
A tour of Java and the JVM
 
Tips For Maintaining OSS Projects
Tips For Maintaining OSS ProjectsTips For Maintaining OSS Projects
Tips For Maintaining OSS Projects
 
GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18
 
Simple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvmSimple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvm
 
Simple tweaks to get the most out of your JVM
Simple tweaks to get the most out of your JVMSimple tweaks to get the most out of your JVM
Simple tweaks to get the most out of your JVM
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
 
Introduction to JAVA
Introduction to JAVAIntroduction to JAVA
Introduction to JAVA
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Jruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-javaJruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-java
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal Java
 
Gwt overview & getting started
Gwt overview & getting startedGwt overview & getting started
Gwt overview & getting started
 

More from Ryan Cuprak

Jakarta EE Test Strategies (2022)
Jakarta EE Test Strategies (2022)Jakarta EE Test Strategies (2022)
Jakarta EE Test Strategies (2022)
Ryan Cuprak
 
DIY Home Weather Station (Devoxx Poland 2023)
DIY Home Weather Station (Devoxx Poland 2023)DIY Home Weather Station (Devoxx Poland 2023)
DIY Home Weather Station (Devoxx Poland 2023)
Ryan Cuprak
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)
Ryan Cuprak
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)
Ryan Cuprak
 
Node.js Development with Apache NetBeans
Node.js Development with Apache NetBeansNode.js Development with Apache NetBeans
Node.js Development with Apache NetBeans
Ryan Cuprak
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
Ryan Cuprak
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
Ryan Cuprak
 
Java EE 8
Java EE 8Java EE 8
Java EE 8
Ryan Cuprak
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
Ryan Cuprak
 
Containerless in the Cloud with AWS Lambda
Containerless in the Cloud with AWS LambdaContainerless in the Cloud with AWS Lambda
Containerless in the Cloud with AWS Lambda
Ryan Cuprak
 
Java EE 8 Update
Java EE 8 UpdateJava EE 8 Update
Java EE 8 Update
Ryan Cuprak
 
Batching and Java EE (jdk.io)
Batching and Java EE (jdk.io)Batching and Java EE (jdk.io)
Batching and Java EE (jdk.io)
Ryan Cuprak
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]
Ryan Cuprak
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]
Ryan Cuprak
 
Jms deep dive [con4864]
Jms deep dive [con4864]Jms deep dive [con4864]
Jms deep dive [con4864]
Ryan Cuprak
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]
Ryan Cuprak
 
Developing in the Cloud
Developing in the CloudDeveloping in the Cloud
Developing in the Cloud
Ryan Cuprak
 
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Ryan Cuprak
 
Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Ryan Cuprak
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014
Ryan Cuprak
 

More from Ryan Cuprak (20)

Jakarta EE Test Strategies (2022)
Jakarta EE Test Strategies (2022)Jakarta EE Test Strategies (2022)
Jakarta EE Test Strategies (2022)
 
DIY Home Weather Station (Devoxx Poland 2023)
DIY Home Weather Station (Devoxx Poland 2023)DIY Home Weather Station (Devoxx Poland 2023)
DIY Home Weather Station (Devoxx Poland 2023)
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)
 
Node.js Development with Apache NetBeans
Node.js Development with Apache NetBeansNode.js Development with Apache NetBeans
Node.js Development with Apache NetBeans
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
 
Java EE 8
Java EE 8Java EE 8
Java EE 8
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
 
Containerless in the Cloud with AWS Lambda
Containerless in the Cloud with AWS LambdaContainerless in the Cloud with AWS Lambda
Containerless in the Cloud with AWS Lambda
 
Java EE 8 Update
Java EE 8 UpdateJava EE 8 Update
Java EE 8 Update
 
Batching and Java EE (jdk.io)
Batching and Java EE (jdk.io)Batching and Java EE (jdk.io)
Batching and Java EE (jdk.io)
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]
 
Jms deep dive [con4864]
Jms deep dive [con4864]Jms deep dive [con4864]
Jms deep dive [con4864]
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]
 
Developing in the Cloud
Developing in the CloudDeveloping in the Cloud
Developing in the Cloud
 
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
 
Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014
 

Recently uploaded

AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 

Recently uploaded (20)

AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 

Polygot Java EE on the GraalVM

  • 1. POLYGOT JAVA EE ON THE GRAALVM Ryan Cuprak
  • 2. What is GraalVM? • OpenJDK distribution from Oracle • Java 8 update 212 • Oracle technologies not included (Java Webstart etc.) • Community & Enterprise Editions • Enables polygot development: • JavaScript, Python, R, Ruby, C, C++ • Can generate native, statically linked executables
  • 4. OpenJDK Distributions GraalVM vs. other OpenJDK distributions: • Additional languages (JavaScript, R, Python, Ruby etc.) • Different JIT compiler (better performance) • Can generate native images • Isolates – multiple VM instances in process
  • 5. Why GraalVM? • Interop with other languages painful/high impact: • JNI • Process API painful • Nashorn can’t keep up… • Java can’t compete in serverless • Startup time to long • Image size too big GraalVM native-image Generates statically linked native executable
  • 7. GraalVM Components GraalVM Compiler Just-in-Time (JIT) compiler implemented in Java (like C2 in hotspot) GraalVM Native Image Ahead-of-time compilation technology that produces executable binaries of class files. Truffle Framework Framework for implementing languages on top of GraalVM Instrumentation Support Language-agnostic debugger, profiler, heap viewer tool chain
  • 8. GraalVM Pieces • Substrate VM – Ahead-of-Time Compiler, turns a regular Java application into a binary file • https://github.com/oracle/graal/blob/master/substratevm/README. md • Sulong – high-performance LLVM bitcode interpreter built on the GraalVM. • https://github.com/oracle/graal/tree/master/sulong
  • 9. GraalVM Pieces • Java Hotspot VM + GraalVM compiler • Node.js runtime + GraalVM JavaScript interpreterRuntimes • GraalVM compiler • JavaScript interpreter • LLVM bytecode interpreter • GraalVM Polygot API Libraries • JavaScript REPL • LLVM bitcode interpreter • GraalVM Updater Utilities
  • 11. Available Libraries 0 100000 200000 300000 400000 500000 600000 700000 800000 Java Ruby R Python Node Non-Java • Java packages 30% • C/C++ Libraries not included!
  • 13. Why Polygot? - Use best tool for the job -
  • 14. GraalVM FAQ • Can’t Java already run JavaScript, Python, Ruby via Nashorn/Rhino, Jython, and Ruby? • Was Nashorn killed because of GraalVM? • Native libraries, what’s wrong with JNI? • Is native-client related to jlink? Yes – but with lots of limitations… Very challenging… - No - - No -
  • 15. GraalVM FAQ… • With GraalVM can I leverage native libraries etc.? • Does it require a commercial license for production? • What platforms are supported? • Do existing Java/Jakarta EE containers run on GraalVM? - Yes - - No - - Mac / Linux - - Yes -
  • 18. GraalVM + Jakarta EE • Polygot expands JEE ecosystem possibilities • Unifies enterprise architecture • No separate processes for python/Javascript • Use same libraries server-side/client-side • Example: Run same UI validation logic on server as client. • No clunky language interop packages • Improves performance (R/Ruby/Java) • Simplifies runtime architecture and coordination
  • 21. Installation • tar xfz graalvm-ce.tar.gz • MacOS X • mv graalvm-ce-19.0.2 /Library/Java/JavaVirtualMachines/ • Jenv (http://www.jenv.be) • jenv add <installation director> • jenv global 1.8.0.212 (can be confusing with Oracle’s OpenJDK) • Add GRAAL_HOME environment variable (convenience) export GRAAL_HOME= /Library/Java/JavaVirtualMachines/graalvm-ce- 19.0.2/Contents/home If graalvm directory own by root complicates installing additional languages/packages.
  • 24. JDK Differences Removed Added javafxpackager gu javapackager hsdb jmc js lli node npm polygot
  • 25. Additional Languages • Install optional languages: • gu install R • gu install python • gu install ruby • gu install native-image • New additions to bin R Rscript Bundle Bundler Gem graalpython irb native-image native-image-configure rake rdoc rebuild-images ri ruby truffleruby
  • 27. Project Setup - Maven References ~/.m2/toolchains.xml
  • 30. GraalVM API Package Polygot (org.graalvm.polyglot) Proxy (org.graalvm.polyglot.proxy) IO (org.graalvm.polyglot.io)
  • 31. Key Polygot Package Classes • Context – context for guest language(s), evaluates code • Engine – execution engine, enables inspection • Source – source code unit to be evaluated • Value – polygot value accessed via language agnostic operations.
  • 32. Interoperability R • eval.polyglot('languageId', 'code’) • eval.polyglot(path = '/path/to/file.extension’) • export('polyglot-value-name', rObject) • import('exported-polyglot-value-name’) Ruby/Python • Polygot.eval(‘languageId’,’code’) JavaScript • Polygot.export/import/eval
  • 33. Interoperability – Data Types • JavaScript var BigInteger = Java.type('java.math.BigInteger’); • R imageClass <- java.type('java.awt.image.BufferedImage’) • Ruby BigDecimal = Java.type('java.math.BigDecimal’) • Python import java BigDecimal = java.type('java.math.BigDecimal')
  • 34. C/C++ Interoperability clang -g -O1 -c -emit-llvm - I$GRAALVM_HOME/jre/languages/llvm/include hello.c Use #include<polygot.h>
  • 36. Jakarta EE/GraalVM Hello World • Jakara EE application running on Payara Micro • Payara Micro, JEE container in a jar file (70 megs) • Function implemented in each language that: • Accepts a parameter • Returns a message • Use Warm-up bean to service requests fast • Languages: • R, JavaScript, Python, Ruby, C
  • 38. Express + Jakarta EE Wrap • Express web framework for Node.js • Easy-to-use framework for developing web apps • Start application in Node, then launch the application container (Payara Micro) • Express then calls into Payara Micro to invoke EJBs
  • 39. Express + Jakarta EE https://expressjs.com
  • 42. Jakarta EE + Python • Use a CDI interceptor to catch runaway scripts • Seamlessly pass JPA entities to Python to manipulate
  • 43. Future Opportunities! • Jakarta EE no longer limited to Java? • Non-Java bindings for other languages • C++ EJB Singleton? • Dependency Injection for non-Java objects • Isolates instead of classloaders • GraalVM isolates – multiple independent VM instances in JVM • Improves security • Limits impact crashes • Reactive support? • Many possibilities…
  • 44. Challenges & Limitations • Window distribution incomplete • Building & packaging • Java cannot launch Node.js • R & Python support is experimental • Python C API is incomplete • Practically no packages are supported • graalpython -m ginstall install numpy
  • 45. Challenges & Limitations… • Rudimentary Documentation • On-going changes to GraalVM • Run headless (NodeJS invoking Java) • Lots of trial and error…
  • 46. Best Practices • Warm-up contexts to improve performance @Startup @Singleton • Limit access of untrusted scripts • Monitor and kills runaway scripts
  • 48. Resources • Gitter Community https://gitter.im/graalvm/home • Medium GraalVM Blog https://medium.com/graalvm • Wrapping SQLite https://habr.com/ru/post/358700/
  • 49. Q&A Twitter: @ctjava Email: rcuprak@gmail.com / r5k@3ds.com Blog: cuprak.info Linkedin: www.linkedin.com/in/rcuprak Slides: www.slideshare.net/rcuprak/presentations