SlideShare ist ein Scribd-Unternehmen logo
1 von 63
©2013AmadeusITGroupSA©2012AmadeusITGroupSA
Polyglot alchemy: JSR 223 in action
Fabrice Matrat
Marc Campora
©2013AmadeusITGroupSA
 Marc Campora
 Sr Manager
 Java Middleware
 mcampora@amadeus.com
 @mcampora
©2013AmadeusITGroupSA
 Fabrice Matrat
 System Architect
 Technical Evangelist
 fmatrat@amadeus.com
 @fabricematrat
©2013AmadeusITGroupSA
Context & Pb
Statement
Key design
decisions
Looking forward &
Conclusion
©2013AmadeusITGroupSA
Context & Pb
Statement
Key design
decisions
Looking forward &
Conclusion
©2013AmadeusITGroupSA
Amadeus
 Leading provider of IT solutions for the travel
industry
 Connect Providers (ex. airlines) and Resellers (ex. TAs)
 Provide IT solutions (ex. check-in or inventory system)
©2013AmadeusITGroupSA
System Constraints
3.7M
Bookings/day
1.6B
Transactions/day
100+
IT changes/day
<0.5s
Response time
99.99%
Availability
600k
Terminals
©2013AmadeusITGroupSA
Our products
 Inventory
 Departure
control
 Self Booking
Tools
 Point-of-sale
 e-Commerce
 Mobile
companions
©2013AmadeusITGroupSA
Technical platform
 A clear technical strategy
 RIA even for the mobile
 Community products
 SaaS, multi-tenants
infrastructure
Web-based
Common
hardware
Common code
Java, JEE,
JavaScript
©2013AmadeusITGroupSA
Problem statement
 Community versus specific
©2013AmadeusITGroupSA
From SaaS to PaaS
Application logic
Middleware & Framework
Application UI
©2013AmadeusITGroupSA
From SaaS to PaaS
Application logic
Middleware & Framework
Script execution
environment
A
P
I
Application UI
Custom logic
Custom UI
Custom UI
©2013AmadeusITGroupSA
Features and ambition
Dev. Env.
•Distributed version control
•Self service loads and fallbacks
•Access control and traceability
•Life cycle management
UI
•Custom dialogs
•UI extensions
API
•Call reservation systems
•Call any external Web services
•Store and retrieve custom data
•Send emails
•…
Runtime
•Hotswap
•Sandboxing
•Isolation
•Usage monitoring
©2013AmadeusITGroupSA
Context & Pb
Statement
Key design
decisions
Looking forward &
Conclusion
©2013AmadeusITGroupSA
JSR 223 Sandbox Integration
©2013AmadeusITGroupSA
Scripting on JVM
Application logic
Middleware & Framework
Script execution
environment
A
P
I
Application UI
Script
Script
Script
©2013AmadeusITGroupSA
Scripting for Amadeus PaaS
PaaS
JVM
Performance
Memory
WS
Templating
Strong
Community
Dev.
Productivity
©2013AmadeusITGroupSA
Language Choice (2010)
Language
•Java 1.6
•Groovy 1.6
•Jython 2.5
•JRuby 1.4
•Rhino 1.7
Methodology
•Popularity
•Documentation
•Depth-first search
•Fibonacci
•Templating
•WebService
©2013AmadeusITGroupSA
Groovy
Java
Rhino
Groovy
JRuby
Jython
0
50
100
150
200
250
300
350
400
450
500
0 200 400 600 800 1000 1200 1400
Memory
Time
©2013AmadeusITGroupSA
Embed Groovy
Binding binding = new Binding();
binding.setVariable("foo", new Integer(2));
GroovyShell shell = new GroovyShell(binding);
shell.evaluate("println 'Hello World!'; x = 123; return foo * 10");
©2013AmadeusITGroupSA
Embed Groovy
ClassLoader parent = getClass().getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
File script = new File("HelloWorld.groovy")
Class<GroovyObject> groovyClass = loader.parseClass(script);
GroovyObject groovyObject = groovyClass.newInstance();
groovyObject.invokeMethod("run", new Object[0]);
©2013AmadeusITGroupSA
Embed Groovy
String[] roots = new String[] { "/my/groovy/script/path" };
GroovyScriptEngine gse = new GroovyScriptEngine(roots);
Binding binding = new Binding();
binding.setVariable("input", "world");
gse.run("hello.groovy", binding);
System.out.println(binding.getVariable("output"));
©2013AmadeusITGroupSA
Groovy
Plug to Amadeus PaaS
What about JavaScript ?
©2013AmadeusITGroupSA
JSR 223
Standard to embed scripting in JVM
Independent from language
Part of JDK 6+
One entry point: javax.script
©2013AmadeusITGroupSA
Groovy vs. JSR 223
Binding binding = new Binding();
binding.setVariable("foo", new Integer(2));
GroovyShell shell = new GroovyShell(binding);
shell.evaluate("println 'Hello World!'; x = 123; return foo * 10");
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine= mgr.getEngineByName("groovy");
Bindigs bindings = engine.createBindings();
bindings.put("foo", new Integer(2));
engine.eval("println 'Hello World!'; x = 123; return foo *
10", bindings);
©2013AmadeusITGroupSA
JSR 223 in and out
In Out
©2013AmadeusITGroupSA
In Out
©2013AmadeusITGroupSA
Multiple script technology
Freemarker
Groovy
ScriptEngineManager mgr =
new ScriptEngineManager();
ScriptEngine engine =
mgr.getEngineByName( "groovy");
engine.eval("println 'Hello World!'");
ScriptEngineManager mgr =
new ScriptEngineManager();
ScriptEngine engine =
mgr.getEngineByName( "freemarker");
engine.eval("Hello ${who}!");
©2013AmadeusITGroupSA
Common API
Interface Description
ScriptEngine Main wrapper
ScriptEngineFactory Factory for ScriptEngine
Compilable
ScriptEngine which contains methods
to compile script
Invocable
ScriptEngine whose methods allow
scripts to be executed.
Bindings
A mapping of key/value pairs, all of
whose keys are Strings.
ScriptContext Context
Classes Description
ScriptEngineManager
Discovery and instantiation
mechanism for ScriptEngine
AbstractScriptEngine Super Class
CompiledScript Store results of compilations.
SimpleBindings HashMap bindings
SimpleScriptContext Simple ScriptContext.
©2013AmadeusITGroupSA
In Out
©2013AmadeusITGroupSA
Availability
 800 languages on JVM
 Around 60 are maintained
 20 have JSR 223 Implementation
Language Availability
Groovy Yes
Scala Yes
Jython Yes
JRuby Yes
Clojure Yes
Ceylon No
Golo No
… ..
©2013AmadeusITGroupSA
Performance
 Compilation Result
 JSR 223 No Access
 Storage
Script
Compilation
Result
Script
Script
Script
©2013AmadeusITGroupSA
 Cache
Performance
Byte
Code
Custom
classloader
Cache
©2013AmadeusITGroupSA
Hot swapping Groovy
 Run 2 versions of the same script
Passport.groovy
got changed
Passport.class
new code
1110000011
new hash
new code
1110000011
new hash
Custom classloader
©2013AmadeusITGroupSA
JSR 223 Sandbox Integration
©2013AmadeusITGroupSA
 Script in JVM sharing platform and resources
Sandbox
©2013AmadeusITGroupSA
 Bad things can happen
 Consume resources (CPU, disk, threads)
 Java and Amadeus API is available
Sandbox
java.lang.System.exit(1)
©2013AmadeusITGroupSA
Access control
Compile Runtime
©2013AmadeusITGroupSA
Compile : How ?
 Check every node in AST @ compile time
org.codehaus.groovy.control.customizers.CompilationCustomizer
org.codehaus.groovy.ast.GroovyCodeVisitor
©2013AmadeusITGroupSA
Compile : Design
 Deny/Allow/Deny
 Blacklist Everything
 Whitelist
 Blacklist
Methods granularity in whitelisted classes
java.lang.System
java.lang.System.exit
java.lang.System.currentTimeMillis
©2013AmadeusITGroupSA
Compile : Implementation
class SecureCodeCustomizer extends CompilationCustomizer {
public SecureCodeCustomizer() {
super(CompilePhase.CANONICALIZATION);
}
public void call(…) {
final ModuleNode ast = source.getAST();
ast.getStatementBlock().visit(new SecureCodeVisitor());
…
}
}
class SecureCodeVisitor implements GroovyCodeVisitor {
public void visitMethodCallExpression(MethodCallExpression call) {
checkMethodAuthorized(call);
…
}
public void visitStaticMethodCallExpression (…) {…}
public void visitClassExpression (…) {…}
…
}
©2013AmadeusITGroupSA
Access control
Compile Runtime
©2013AmadeusITGroupSA
Runtime
 Java Security
 leverage the JVM's Security Managers
 Wrap Primitive/Method
 Add Wrapping
((Object)"ls").execute()
def obj = ((Object)"ls")
// Throw an exception if necessary
authorizeStatement(obj, "execute")
obj.execute();
©2013AmadeusITGroupSA
Resource Sharing
Stability Isolation
©2013AmadeusITGroupSA
Sandbox code (for stability)
 Timeout enforcement
 Protection against infinite loops and other patterns
 Injected @ compile time via AST transformation
@groovy.transform.TimedInterrupt(
value = 10L,
unit = TimeUnit.SECONDS
)
def config = new CompilerConfiguration()
def customizer = new ASTTransformationCustomizer(
[value:10L, unit:TimeUnit.SECONDS],
TimedInterrupt)
config.addCompilationCustomizers(customizer)
©2013AmadeusITGroupSA
We are not alone
 Oracle Application Developer Framework
 https://github.com/sjurgemeyer/GR8ConfUS2013/tree/
master/JimDriscoll
 Jenkins
 http://kohsuke.org/2012/04/27/groovy-
secureastcustomizer-is-harmful/
 Call to the community for improvement !
©2013AmadeusITGroupSA
Resource Sharing
Stability Isolation
©2013AmadeusITGroupSA
Remoting
 AST can optimize the Contextual information sent
to the Execution Farm.
Application
farm
Scripting
farm(s)
REST/Json
with application
context
©2013AmadeusITGroupSA
Remoting
 Isolation
 SandBox Failure
 Memory or IO contentions
 No Resources Impact on Main application Farm
 Customers or staging isolation
 On demand provisioning
 Fine grain usage reports
 Billing Model
©2013AmadeusITGroupSA
JSR 223 Sandbox Integration
©2013AmadeusITGroupSA
Developer experience
Production
Preview
©2013AmadeusITGroupSA
Groovy productivity
 Java
 XML appears as objects
 TripPlan<extends XMLNode> tp = TripPlanFactory.tripplan
tp.AIR.ITINERARIES.each {itinerary ->
Logger.info itinerary.text()
}
 Untyped language
 Actually you have the choice
 def unknown = "we’re @ J1 2013"
 String message = "we’re @ J1 2013"
©2013AmadeusITGroupSA
A practical case study…
©2013AmadeusITGroupSA
A practical case study…
©2013AmadeusITGroupSA
A practical case study…
UI
Hook
Action
Server
Placeholder import amadeus.pnr.tripplan
// get PNR in-memory representation (a.k.a. TripPlan)
def tripplan = TripPlan.getTripPlan()
// defining a list of eligible countries
def COUNTRY_LIST=["US", "PR", "AS", "VI", "MP", "GU"]
// defining a list of eligible carriers
def CARRIER_LIST=["UA","AA"]
// business condition if one goes to or comes from US,
// or if carrier is UA or AA
def eligibleTrip =
!tripplan.AIR.LIST_ITINERARY.LIST_SEGMENT.findAll {
((it.E_LOCATION.COUNTRY_CODE in COUNTRY_LIST) ||
(it.B_LOCATION.COUNTRY_CODE in COUNTRY_LIST)) ||
(it.AIRLINE.CODE in CARRIER_LIST)
}.isEmpty()
// if trip eligible, trigger the UI enrichment
bean.with {
if (eligibleTrip) {
// the id of the product UI placeholder in which to display.
placeholder = "customTSAPlaceholder"
// the script to be called during the next step to
// process the user inputs.
actionId = "CustomTSAProcess"
}
}
{Template}
{macro init()}
<div style="padding-left: 20px;">
{@aria:TextField { label: 'Maiden name', labelWidth: 210,
block: true, bind: to("pspt") } /}
{@aria:TextField { label: 'Redress number', block: true,
labelWidth: 210, bind: to("redn") } /}
{@aria:TextField { label: 'Known traveler id', block: true,
labelWidth: 210, bind: to("knwt") } /}
</div>
{/macro}
{/Template}
©2013AmadeusITGroupSA
A practical case study…
©2013AmadeusITGroupSA
Context & Pb
Statement
Key design
decisions
Looking forward &
Conclusion
©2013AmadeusITGroupSA
Remaining challenges
 A productive development environment
©2013AmadeusITGroupSA
Remaining challenges
 A productive development environment
 Success leads to Elasticity
©2013AmadeusITGroupSA
Remaining challenges
 A productive development environment
 Success leads to Elasticity
 Add new languages to enlarge the user base
©2013AmadeusITGroupSA
Take home messages
 Groovy is great to customize applications
 The JVM and JSR223 give you access to other
languages
 Sandboxing and isolation are a must
 Unfortunately sandboxing and isolation are
specific to the language
©2013AmadeusITGroupSA
Some more…
Special thanks to the team!
UI produced using AriaTemplates ™ (github.com/ariatemplates)
To know more about Amadeus: http://www.amadeus.com
JavaOne
 Polyglot Enterprise Development on the JVM [CON2382]
Mark Little – VP Red Hat Inc
 The JVM Is Over: The Polyglot Virtual Machine Is Here [CON5344]
Marcus Lagergren - Runtime Futurist, Oracle
 Liftoff with Groovy 2.1 [CON2591]
Guillaume Laforge - Pivotal
 Embedded DSL: Groovy and Scala Fair Duel [TUT4524]
Corinne Krych - RedHat and Pascal Cohen - Amadeus
©2013AmadeusITGroupSA
Q&A

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (8)

Dibujos a mano alzada
Dibujos a mano alzadaDibujos a mano alzada
Dibujos a mano alzada
 
Apogee
ApogeeApogee
Apogee
 
Digital marketingstrategy
Digital marketingstrategyDigital marketingstrategy
Digital marketingstrategy
 
Pi Pallet Investment Opportunity
Pi Pallet Investment OpportunityPi Pallet Investment Opportunity
Pi Pallet Investment Opportunity
 
Pago de tributos
Pago de tributosPago de tributos
Pago de tributos
 
The very hungry caterpillar power point.pptx
The very hungry caterpillar power point.pptxThe very hungry caterpillar power point.pptx
The very hungry caterpillar power point.pptx
 
Ogle
OgleOgle
Ogle
 
Social inclusion in Nepal
Social inclusion in Nepal Social inclusion in Nepal
Social inclusion in Nepal
 

Ähnlich wie Polyglot Alchemy : JSR 223 In Action

Spring one 2012 Groovy as a weapon of maas PaaSification
Spring one 2012 Groovy as a weapon of maas PaaSificationSpring one 2012 Groovy as a weapon of maas PaaSification
Spring one 2012 Groovy as a weapon of maas PaaSificationNenad Bogojevic
 
2013 05-multicloud-paas-interop-scenarios-fia-dublin
2013 05-multicloud-paas-interop-scenarios-fia-dublin2013 05-multicloud-paas-interop-scenarios-fia-dublin
2013 05-multicloud-paas-interop-scenarios-fia-dublinAlex Heneveld
 
Groovy on Grails by Ziya Askerov
Groovy on Grails by Ziya AskerovGroovy on Grails by Ziya Askerov
Groovy on Grails by Ziya AskerovVuqar Suleymanov
 
Get Back in Control of Your SQL with jOOQ at #Java2Days
Get Back in Control of Your SQL with jOOQ at #Java2DaysGet Back in Control of Your SQL with jOOQ at #Java2Days
Get Back in Control of Your SQL with jOOQ at #Java2DaysLukas Eder
 
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGeneBang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGeneDroidConTLV
 
Native Java with GraalVM
Native Java with GraalVMNative Java with GraalVM
Native Java with GraalVMSylvain Wallez
 
Google Developer Fest 2010
Google Developer Fest 2010Google Developer Fest 2010
Google Developer Fest 2010Chris Ramsdale
 
Microsoft, java and you!
Microsoft, java and you!Microsoft, java and you!
Microsoft, java and you!George Adams
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalDroidcon Berlin
 
Magic with groovy & grails
Magic with groovy & grailsMagic with groovy & grails
Magic with groovy & grailsGeorge Platon
 
Introduction to Grunt.js on Taiwan JavaScript Conference
Introduction to Grunt.js on Taiwan JavaScript ConferenceIntroduction to Grunt.js on Taiwan JavaScript Conference
Introduction to Grunt.js on Taiwan JavaScript ConferenceBo-Yi Wu
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務Mu Chun Wang
 
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...DicodingEvent
 
JavaFX / JacpFX interaction with JSR356 WebSockets
JavaFX / JacpFX interaction with JSR356 WebSocketsJavaFX / JacpFX interaction with JSR356 WebSockets
JavaFX / JacpFX interaction with JSR356 WebSocketsAndy Moncsek
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Chris Ramsdale
 

Ähnlich wie Polyglot Alchemy : JSR 223 In Action (20)

Spring one 2012 Groovy as a weapon of maas PaaSification
Spring one 2012 Groovy as a weapon of maas PaaSificationSpring one 2012 Groovy as a weapon of maas PaaSification
Spring one 2012 Groovy as a weapon of maas PaaSification
 
2013 05-multicloud-paas-interop-scenarios-fia-dublin
2013 05-multicloud-paas-interop-scenarios-fia-dublin2013 05-multicloud-paas-interop-scenarios-fia-dublin
2013 05-multicloud-paas-interop-scenarios-fia-dublin
 
Grails
GrailsGrails
Grails
 
Grails
GrailsGrails
Grails
 
Groovy on Grails by Ziya Askerov
Groovy on Grails by Ziya AskerovGroovy on Grails by Ziya Askerov
Groovy on Grails by Ziya Askerov
 
Get Back in Control of your SQL
Get Back in Control of your SQLGet Back in Control of your SQL
Get Back in Control of your SQL
 
Get Back in Control of Your SQL with jOOQ at #Java2Days
Get Back in Control of Your SQL with jOOQ at #Java2DaysGet Back in Control of Your SQL with jOOQ at #Java2Days
Get Back in Control of Your SQL with jOOQ at #Java2Days
 
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGeneBang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
 
Native Java with GraalVM
Native Java with GraalVMNative Java with GraalVM
Native Java with GraalVM
 
Google Developer Fest 2010
Google Developer Fest 2010Google Developer Fest 2010
Google Developer Fest 2010
 
Microsoft, java and you!
Microsoft, java and you!Microsoft, java and you!
Microsoft, java and you!
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-final
 
Magic with groovy & grails
Magic with groovy & grailsMagic with groovy & grails
Magic with groovy & grails
 
JBoss World 2010
JBoss World 2010JBoss World 2010
JBoss World 2010
 
Introduction to Grunt.js on Taiwan JavaScript Conference
Introduction to Grunt.js on Taiwan JavaScript ConferenceIntroduction to Grunt.js on Taiwan JavaScript Conference
Introduction to Grunt.js on Taiwan JavaScript Conference
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
 
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
 
JavaFX / JacpFX interaction with JSR356 WebSockets
JavaFX / JacpFX interaction with JSR356 WebSocketsJavaFX / JacpFX interaction with JSR356 WebSockets
JavaFX / JacpFX interaction with JSR356 WebSockets
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010
 
GROOVY ON GRAILS
GROOVY ON GRAILSGROOVY ON GRAILS
GROOVY ON GRAILS
 

Kürzlich hochgeladen

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 

Kürzlich hochgeladen (20)

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 

Polyglot Alchemy : JSR 223 In Action

Hinweis der Redaktion

  1. Amadeus provides transaction processing power and technology solutions to both travel providers (airlines, hotels, rail operators, cruise and ferry operators, car rental, tour operators) and travel agencies (online and offline). A worldwide network connecting travel providers and travel agencies through a highly effective processing platform for the distribution of travel products and services, and as a provider of a comprehensive portfolio of IT solutions which automate mission-critical business processes.
  2. We are concerned with two last
  3. Struggle to address differentiation and local requirementsWe are concerned with two last[A corporate booking tool deploy in Chile -&gt; Chilean railway]No time, always more pressing demands, leads to adoption issues or misfit with some markets
  4. Typical e-Commerce setup, web-server, app-server, database, EIS. Running on iPlanet, Weblogic, Windows, blue part: Linux, in-house
  5. We want to have option to change direction.
  6. Allows safe timed executions of scripts by adding elapsed time checks on loops (for, while, do), the first statement of closures, and the first statement of methods. This is especially useful when executing foreign scripts that you do not have control over. Inject this transformation into a script that you want to timeout after a specified amount of time. Allows &quot;interrupt-safe&quot; executions of scripts by adding Thread.currentThread().isInterrupted() checks on loops (for, while, do) and first statement of closures. By default, also adds an interrupt check statement on the beginning of method calls.
  7. Used annotations coming with groovy 1 to specify at compile time methods maximum execution time transformation add a statement checking the condition as the first statement of for/while/do loops (so one check at the beginning of each iteration) closure/method calls (so one check when entering a user defined method/closure) nothing stops a script doing long I/Os in a procedural script But we can inject this annotation automatically in compiler configuration so it applies to all scripts We even used the transformation // (we could maybe use transformations directly but annotations provide a nicer API than manipulating AST nodes)
  8. Simple Json over HTTP, no particular std
  9. Distributed CVSDevelop, test and debug locallyDeploy and activateIntegrate automatic provisioning in the deployment processReport on usage in a multi-tenant environmentMain candidate Javascript
  10. Distributed CVSDevelop, test and debug locallyDeploy and activateIntegrate automatic provisioning in the deployment processReport on usage in a multi-tenant environmentMain candidate Javascript
  11. Distributed CVSDevelop, test and debug locallyDeploy and activateIntegrate automatic provisioning in the deployment processReport on usage in a multi-tenant environmentMain candidate Javascript
  12. ThursdayTuesday