SlideShare a Scribd company logo
JAVASCRIPT AND ADF
Lucas Jellema
AMIS ADF SIG – July 2017
AGENDA
• What can using JavaScript add to the out of the box ADF 12c framework?
• Introducing JavaScript
• How do we plug our JavaScript into ADF Faces
• Tooling, Debugging, logging, production preparation
• Pure client side – richer and leaner
• Integrating rich client 3rd party components
• Client to Server communications – in addition to full page request and
declarative partial page rendering and navigation
• Server to Client communication
• Trigger JavaScript after PPR, Pure Push
WHY CUSTOM JAVASCRIPT IN ADF?
• Improve user experience
• Faster & leaner
• Richer
• (pro) Active
• Exploit HTML5 & 3rd party rich client components
• Productivity & maintenance
• Some things are much harder or even impossible on the server
• Some things
• Reduce load on server or network
INTRODUCTION JAVASCRIPT
• History
• Standardization
• Functions
• Function as parameter
• Callback
• Closure
• Variables
• Untypes/dynamically typed
• Scope
• Object vs. JSON
JAVASCRIPT IN BROWSER
• Facilities
• DOM manipulation
• HTTP calls
• Subscribe to SSE and WebSocket
• HTML5 APIs (persistence, web worker, service worker, upload file, ..)
• Driven by events
• Browser (load page)
• User activity
• Time
• jQuery
EVENTS AROUND INPUT ELEMENT
• Events happen on a component as a result of users action
• And indirectly on parent and all ancestor components (bubble up)
• Events can be handled by (JavaScript) event handlers
• That respond to a specific event
• That may cancel further bubbling of an event
• That have access to the event object including a reference to the
component that first triggered the event and the current component it has
bubbled up to
• That may be dynamically attached to components
• Events can be triggered programmatically
• Emulate a user action
EVENTS FOR AN INPUT ELEMENT
The Value
focus
keydown keyup change
blur
keypress
click dblclick contextmenu
input
invalid
select
mousedown mousemove
mouseout
mouseover
mouseup
wheel
copy
cut
paste
mouseleavemouseenter
auxclick
FINDING OUT ABOUT EVENTS
• Open page in Chrome browser
• Rightclick on element
• Select Inspect from Context Menu
• Open the Console and type: monitorEvents($0)
• The console will now show an event trace of events
• Alternatively: use debugger to listen for selected events
RESPOND TO EVENTS:
JAVASCRIPT EVENT LISTENERS
• A JavaScript callback function can be associated with a specific
event on an HTML DOM element
• To get notified by the browser
when the event occurs
• To act on the event – prepare for,
respond to manipulate, suppress, log, …
EVENT LISTENERS CAN BE ADDED
PROGRAMMATICALLY
• Hooking into the
‘document has loaded’ event
• Programmatically add event listeners
for DOM elements
• Note: also works on HTML documents
rendered by ADF Faces
TRACKING EVENTS TO LEARN ABOUT WHICH AND WHEN
JAVASCRIPT IN ADF FACES 12C
• Out of the box
• Rich components
• Client side behavior for converters, validators
• Lazy loading
• Partial page refresh
• Rich Client API
• https://docs.oracle.com/middleware/1221/adf/api-reference-javascript-
faces/toc.htm
• Declarative hooks
• Client Listeners
INJECT JS INTO ADF
• Snippet in Client Listener
• Snippet in af:resource tag
• Local file loaded in af:resource tag
• Verbatim – file loaded from local web server or remote server
• JS written in ADF server
• through Extended RenderKit Service
• through servlet filter directly on HTTP response
EXAMPLE:
FORCE VALUE IN INPUT TEXT TO UPPERCASE
• Server side valueChangeListener
• CSS style
• onChange
• onBlur?
• Or: onKeyUp
CLIENT LISTENER
• “Keyboard and mouse events wrap native DOM events using the
AdfUIInputEvent subclass of the AdfBaseEvent class, which provides
access to the original DOM event and also offers a range of
convenience functions for retrieval of key codes, mouse coordinates,
and so on. The AdfBaseEvent class also accounts for browser
differences in how these events are implemented. Consequently, you
must avoid invoking the getNativeEvent() method on the directly, and
instead use the AdfUIInputEvent API.”
JAVASCRIPT DEVELOPMENT
TOOLS, DEBUGGING, LOGGING
• Browser Console
• Browser Developer Tools
• See JavaScript!
• See network traffic
• Debugging
• Logging
• ADF Logger
• Assertions
PURE CLIENT – RICHER UX
• Force correct input (uppercase, number, postal code)
• Instant validation and conversion
• Add message on component (cookbook)
• Smart Data Entry
• Intra page navigation – vertical scrolling (scroll component into view), arrow based
navigation
• Focus on relevant component
• Show/Hide and Enable/Disable components; prepare LOVs/Dropdown
• Copy & Derive values
• Use rich popups for data entry (without server interaction)
• Suppress standard browser context menu
• Use of Function Keys and Shortcuts
ON PAGE LOAD/ON PPR
• <af:document>
• <af:clientListener method="init" type="load"/>
• Partial Page Refresh
• Add to ERKS
• Property change listener (map from bean timestamp, add as partial target)
FIND COMPONENTS
• Event source
• Relative
• Absolute
• “trick” using dummy css class
• Warning: compression/obfuscation
• Using clientAttribute, UI Component, Bean
• Duncan Mills’ method
Page
Taskflow
Fragment
Taskflow
Fragment
Taskflow
Fragment
Page
Taskflow
Fragment
Taskflow
Fragment
Taskflow
Fragment
Client Side Event Bus
2. (when button is pressed )
Publish an instance of the ‘color
selection event’ – with the color in
the payload
JavaScript function
1. Subscribe to the ‘color selection
event’ – register JavaScript function
as callback consumer
3. Invoke callback function with
the payload of the published
instance of the event
4. Process payload of event and
manipulate select one radio; also
queue custom event for
serverListener
Server
MenuBean
handleColorSelection(ClientEvent) {
retrieve new color
set bean color proprty
add selectOneRadio as partial target
componentReference to selectOneRadio
serverListener
6. Partial Refresh of
SelectOneRadio
(governed from server)
5. Push custom event
with color payload to
server
INTEGRATE 3RD PARTY COMPONENTS
• HTML5 Components and APIs
• Drag & Drop, SVG, Canvas, Media, GeoLocation
• Persistence, WebWorker, Service Worker
• Use jQuery/Dojo/… in ADF Faces
• Google Maps
• D3
• Client Side Event Bus
• Generate JSON into client from ADF Data Binding
• For LOVs/dropdown, smart conversion in rich text, fuel 3rd part
components
Client
Server
(middle tier)
Database
JavaScript Components
ComponentsBeans & Objects
activeOutputText
Active Data
Model
activeOutputText
push
serverListener
Bean
Load JSON, CSS,
Image, XML, JSRequest
data or
Push
message
push (DB QRCN)
Object
clientListener
component
serverListener
partial
page
refresh
partialSubmit
autoSubmit
JavaScript Function
Queue Custom
Event
component
component
manipulate
poll
setPropertyListener
user
or
programmatic
action
add JS to
execute
(ERKS) add
components
as partial target
ERKS
‘ppr script’
actionListener,
valueChangeListener,
…Listener
component
component
Full page
reload
CLIENT TO SERVER COMMUNICATIONS
• PPR – declarative
• setPropertyListener
• Through JavaScript: queue action on button with partialSubmit
• Target tag – specify which components to submit and to refresh (cookbook)
• Server Listener
• Plain old Ajax
• ITank Help button
• Function Key triggers server side operation
• Create record, delete record, validate/calculate something
• Extend client side event bus
• Have taskflow respond server side to other taskflow
• Property Listener? (used in ADS Nudge)
• Partial Navigation (cookbook)
PARTIAL PAGE REFRESH
• Several aspects to PPR
• Only update selected areas in a page
• Update areas that have “expressed their interest” (partialTriggers) in certain
“change agents” (updated fields, clicked upon buttons and links, …)
• Allow activation through an AJAX background call (rather than a full page
post)
• Programmatically add candidate UI components to be refreshed
• Using method addPartialTarget(UIComponent) on AdfFacesContext
• Auto PPR through Change Event Policy property on ADF BC based
data bindings
• That make UI components associated with a changed ADF BC bindings
refresh
26
DEMO
• autoSubmit is similar to publish
• partialTriggers is similar
to subscribe
27
EXPLICIT, PROGRAMMATIC PPR
28
USE SETPROPERTYLISTENER
TO PUSH DATA TO THE SERVER
• The setPropertyListener will pass from value to the to target
when type event occurs on parent
• A very simple way to inform the
server about an event and the data
associated with the event
• Supported types: action, focus,
poll, query, rangeChange, selection, sort, rowDisclosure, valueChange and many more
<af:image id="removeFromSetImage“
source="/images/removeFromSet.png“
shortDesc="Remove from Shopping Basket"/>
<af:setPropertyListener from="#{item}“
to="#{shoppingBasket.itemToRemove}"
type="action"/>
</af:commandLink>
AUTO-PPR FOR IMMEDIATE REFRESH OF DATA
BOUND COMPONENTS
• To have ADF automatically refresh data bound components when underlying
value binding has changed its value
• Set changeEventPolicy=ppr on iterator
• Refresh as piggy back on any request cycle
• No partialTriggers attribute required!
CUSTOM SMART AUTO PPR
31
http://www.adfplus.com/2013/05/automatic-partial-page-rendering-across.html
IMPLICIT SUBSCRIBE AND PUBLISH FROM A
REGULAR MANAGED BEAN
• Subscribe to auto ppr through a call to getLastName() and getFullName()
• Get PPR-ed whenever the setLastName() has been invoked
32
(IMPLICIT) SUBSCRIPTION TO BE NOTIFIED
33
PersonBean
AutoPPRSupport
fullname
get
rememberConsumer
notifyConsumer
lastname
set
fullname
::ph1
::it3
FLOW FROM (IMPLICIT) SUBSCRIPTION TO
NOTIFICATION
34
PersonBean
AutoPPRSupport
fullname
get
rememberConsumer
notifyConsumer
lastname
set
fullname
fullname
::ph1
::it3
PPR:
::ph1
::it3
UNDERLYING MAGIC…
• Reusing the logic behind the auto-ppr for ADF BC bindings
35
CLIENT TO SERVER
• Block user input
• customEvent.preventUserInput(); customEvent.queue(isPartial)
• To let the framework know that no response is expected, you use the
AdfBaseEvent.noResponseExpected() method.
SERVER TO CLIENT
• ERKS
• Set focus - https://blogs.oracle.com/jdevotnharvest/how-to-
programmatically-set-focus-on-an-input-component
• Lazy loading
• Poll
• True Push
• ADS, SSE, WebSocket
• Blog: technology.amis.nl
• Email: lucas.jellema@amis.nl
• : lucasjellema
• : lucas-jellema
• : www.amis.nl, info@amis.nl
+31 306016000
Edisonbaan 15,
Nieuwegein

More Related Content

What's hot

Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021
Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021
Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021
StreamNative
 
Sagas Middleware Architecture
Sagas Middleware ArchitectureSagas Middleware Architecture
Sagas Middleware Architecture
Mateusz Bosek
 
Mastering MongoDB Atlas: Essentials of Diagnostics and Debugging in the Cloud...
Mastering MongoDB Atlas: Essentials of Diagnostics and Debugging in the Cloud...Mastering MongoDB Atlas: Essentials of Diagnostics and Debugging in the Cloud...
Mastering MongoDB Atlas: Essentials of Diagnostics and Debugging in the Cloud...
Mydbops
 
kubernetes : From beginner to Advanced
kubernetes : From beginner to Advancedkubernetes : From beginner to Advanced
kubernetes : From beginner to Advanced
Inho Kang
 
Introducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorIntroducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes Operator
Flink Forward
 
Luigi presentation OA Summit
Luigi presentation OA SummitLuigi presentation OA Summit
Luigi presentation OA Summit
Open Analytics
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok
 
Aynchronous Processing in Kamailio Configuration File
Aynchronous Processing in Kamailio Configuration FileAynchronous Processing in Kamailio Configuration File
Aynchronous Processing in Kamailio Configuration File
Daniel-Constantin Mierla
 
Function Mesh for Apache Pulsar, the Way for Simple Streaming Solutions
Function Mesh for Apache Pulsar, the Way for Simple Streaming SolutionsFunction Mesh for Apache Pulsar, the Way for Simple Streaming Solutions
Function Mesh for Apache Pulsar, the Way for Simple Streaming Solutions
StreamNative
 
Machine learning cheat sheet
Machine learning cheat sheetMachine learning cheat sheet
Machine learning cheat sheet
Hany Sewilam Abdel Hamid
 
Kafka to the Maxka - (Kafka Performance Tuning)
Kafka to the Maxka - (Kafka Performance Tuning)Kafka to the Maxka - (Kafka Performance Tuning)
Kafka to the Maxka - (Kafka Performance Tuning)
DataWorks Summit
 
Prototype programming in JavaScript
Prototype programming in JavaScriptPrototype programming in JavaScript
Prototype programming in JavaScript
Timur Shemsedinov
 
Handling Schema Changes Using pt-online-schema change.
Handling Schema Changes Using pt-online-schema change.Handling Schema Changes Using pt-online-schema change.
Handling Schema Changes Using pt-online-schema change.
Mydbops
 
BGP Traffic Engineering with SDN Controller
BGP Traffic Engineering with SDN ControllerBGP Traffic Engineering with SDN Controller
BGP Traffic Engineering with SDN Controller
APNIC
 
A topology of memory leaks on the JVM
A topology of memory leaks on the JVMA topology of memory leaks on the JVM
A topology of memory leaks on the JVM
Rafael Winterhalter
 
Apache Ambari: Past, Present, Future
Apache Ambari: Past, Present, FutureApache Ambari: Past, Present, Future
Apache Ambari: Past, Present, Future
Hortonworks
 
VictoriaLogs: Open Source Log Management System - Preview
VictoriaLogs: Open Source Log Management System - PreviewVictoriaLogs: Open Source Log Management System - Preview
VictoriaLogs: Open Source Log Management System - Preview
VictoriaMetrics
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache Kafka
Jiangjie Qin
 
One sink to rule them all: Introducing the new Async Sink
One sink to rule them all: Introducing the new Async SinkOne sink to rule them all: Introducing the new Async Sink
One sink to rule them all: Introducing the new Async Sink
Flink Forward
 

What's hot (20)

Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021
Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021
Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021
 
Pg pool cluster postgresql
Pg pool cluster postgresqlPg pool cluster postgresql
Pg pool cluster postgresql
 
Sagas Middleware Architecture
Sagas Middleware ArchitectureSagas Middleware Architecture
Sagas Middleware Architecture
 
Mastering MongoDB Atlas: Essentials of Diagnostics and Debugging in the Cloud...
Mastering MongoDB Atlas: Essentials of Diagnostics and Debugging in the Cloud...Mastering MongoDB Atlas: Essentials of Diagnostics and Debugging in the Cloud...
Mastering MongoDB Atlas: Essentials of Diagnostics and Debugging in the Cloud...
 
kubernetes : From beginner to Advanced
kubernetes : From beginner to Advancedkubernetes : From beginner to Advanced
kubernetes : From beginner to Advanced
 
Introducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorIntroducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes Operator
 
Luigi presentation OA Summit
Luigi presentation OA SummitLuigi presentation OA Summit
Luigi presentation OA Summit
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
 
Aynchronous Processing in Kamailio Configuration File
Aynchronous Processing in Kamailio Configuration FileAynchronous Processing in Kamailio Configuration File
Aynchronous Processing in Kamailio Configuration File
 
Function Mesh for Apache Pulsar, the Way for Simple Streaming Solutions
Function Mesh for Apache Pulsar, the Way for Simple Streaming SolutionsFunction Mesh for Apache Pulsar, the Way for Simple Streaming Solutions
Function Mesh for Apache Pulsar, the Way for Simple Streaming Solutions
 
Machine learning cheat sheet
Machine learning cheat sheetMachine learning cheat sheet
Machine learning cheat sheet
 
Kafka to the Maxka - (Kafka Performance Tuning)
Kafka to the Maxka - (Kafka Performance Tuning)Kafka to the Maxka - (Kafka Performance Tuning)
Kafka to the Maxka - (Kafka Performance Tuning)
 
Prototype programming in JavaScript
Prototype programming in JavaScriptPrototype programming in JavaScript
Prototype programming in JavaScript
 
Handling Schema Changes Using pt-online-schema change.
Handling Schema Changes Using pt-online-schema change.Handling Schema Changes Using pt-online-schema change.
Handling Schema Changes Using pt-online-schema change.
 
BGP Traffic Engineering with SDN Controller
BGP Traffic Engineering with SDN ControllerBGP Traffic Engineering with SDN Controller
BGP Traffic Engineering with SDN Controller
 
A topology of memory leaks on the JVM
A topology of memory leaks on the JVMA topology of memory leaks on the JVM
A topology of memory leaks on the JVM
 
Apache Ambari: Past, Present, Future
Apache Ambari: Past, Present, FutureApache Ambari: Past, Present, Future
Apache Ambari: Past, Present, Future
 
VictoriaLogs: Open Source Log Management System - Preview
VictoriaLogs: Open Source Log Management System - PreviewVictoriaLogs: Open Source Log Management System - Preview
VictoriaLogs: Open Source Log Management System - Preview
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache Kafka
 
One sink to rule them all: Introducing the new Async Sink
One sink to rule them all: Introducing the new Async SinkOne sink to rule them all: Introducing the new Async Sink
One sink to rule them all: Introducing the new Async Sink
 

Similar to ADF and JavaScript - AMIS SIG, July 2017

That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)
That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)
That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)
Lucas Jellema
 
Actors or Not: Async Event Architectures
Actors or Not: Async Event ArchitecturesActors or Not: Async Event Architectures
Actors or Not: Async Event Architectures
Yaroslav Tkachenko
 
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
Amazon Web Services Korea
 
amis-adf-enterprise-mobility
amis-adf-enterprise-mobilityamis-adf-enterprise-mobility
amis-adf-enterprise-mobility
Luc Bors
 
An Introduction to webOS
An Introduction to webOSAn Introduction to webOS
An Introduction to webOSKevin Decker
 
Salesforce Winter 23 Release Webinar Slide Deck
Salesforce Winter 23 Release Webinar Slide DeckSalesforce Winter 23 Release Webinar Slide Deck
Salesforce Winter 23 Release Webinar Slide Deck
brightgenss
 
Event-Based API Patterns and Practices
Event-Based API Patterns and PracticesEvent-Based API Patterns and Practices
Event-Based API Patterns and Practices
LaunchAny
 
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
MongoDB
 
Aerobatic Introduction
Aerobatic IntroductionAerobatic Introduction
Aerobatic Introduction
David Von Lehman
 
Building API in the cloud using Azure Functions
Building API in the cloud using Azure FunctionsBuilding API in the cloud using Azure Functions
Building API in the cloud using Azure Functions
Aleksandar Bozinovski
 
ADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
ADF Mobile: 10 Things you don't get from the developers guide - Luc BorsADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
ADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
Getting value from IoT, Integration and Data Analytics
 
ADF Mobile: 10 Things you don't get from the developers guide
ADF Mobile: 10 Things you don't get from the developers guideADF Mobile: 10 Things you don't get from the developers guide
ADF Mobile: 10 Things you don't get from the developers guide
Luc Bors
 
How LEGO.com Accelerates With Serverless
How LEGO.com Accelerates With ServerlessHow LEGO.com Accelerates With Serverless
How LEGO.com Accelerates With Serverless
SheenBrisals
 
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...
Amazon Web Services
 
Working with data using Azure Functions.pdf
Working with data using Azure Functions.pdfWorking with data using Azure Functions.pdf
Working with data using Azure Functions.pdf
Stephanie Locke
 
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...
Sencha
 
Samza Demo @scale 2017
Samza Demo @scale 2017Samza Demo @scale 2017
Samza Demo @scale 2017
Xinyu Liu
 
Intro To webOS
Intro To webOSIntro To webOS
Intro To webOS
fpatton
 
Connecting Xamarin Apps with IBM Worklight in Bluemix
Connecting Xamarin Apps with IBM Worklight in BluemixConnecting Xamarin Apps with IBM Worklight in Bluemix
Connecting Xamarin Apps with IBM Worklight in Bluemix
IBM
 
SPUnite17 Timer Jobs Event Handlers
SPUnite17 Timer Jobs Event HandlersSPUnite17 Timer Jobs Event Handlers
SPUnite17 Timer Jobs Event Handlers
NCCOMMS
 

Similar to ADF and JavaScript - AMIS SIG, July 2017 (20)

That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)
That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)
That's Rich! Putting a smile on ADF Faces (ODTUG Kaleidoscope 2009)
 
Actors or Not: Async Event Architectures
Actors or Not: Async Event ArchitecturesActors or Not: Async Event Architectures
Actors or Not: Async Event Architectures
 
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
 
amis-adf-enterprise-mobility
amis-adf-enterprise-mobilityamis-adf-enterprise-mobility
amis-adf-enterprise-mobility
 
An Introduction to webOS
An Introduction to webOSAn Introduction to webOS
An Introduction to webOS
 
Salesforce Winter 23 Release Webinar Slide Deck
Salesforce Winter 23 Release Webinar Slide DeckSalesforce Winter 23 Release Webinar Slide Deck
Salesforce Winter 23 Release Webinar Slide Deck
 
Event-Based API Patterns and Practices
Event-Based API Patterns and PracticesEvent-Based API Patterns and Practices
Event-Based API Patterns and Practices
 
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
 
Aerobatic Introduction
Aerobatic IntroductionAerobatic Introduction
Aerobatic Introduction
 
Building API in the cloud using Azure Functions
Building API in the cloud using Azure FunctionsBuilding API in the cloud using Azure Functions
Building API in the cloud using Azure Functions
 
ADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
ADF Mobile: 10 Things you don't get from the developers guide - Luc BorsADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
ADF Mobile: 10 Things you don't get from the developers guide - Luc Bors
 
ADF Mobile: 10 Things you don't get from the developers guide
ADF Mobile: 10 Things you don't get from the developers guideADF Mobile: 10 Things you don't get from the developers guide
ADF Mobile: 10 Things you don't get from the developers guide
 
How LEGO.com Accelerates With Serverless
How LEGO.com Accelerates With ServerlessHow LEGO.com Accelerates With Serverless
How LEGO.com Accelerates With Serverless
 
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...
SRV418 Deep Dive on Accelerating Content, APIs, and Applications with Amazon ...
 
Working with data using Azure Functions.pdf
Working with data using Azure Functions.pdfWorking with data using Azure Functions.pdf
Working with data using Azure Functions.pdf
 
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...
SenchaCon 2016: A Look Ahead: Survey Next-Gen Modern Browser APIs - Shikhir S...
 
Samza Demo @scale 2017
Samza Demo @scale 2017Samza Demo @scale 2017
Samza Demo @scale 2017
 
Intro To webOS
Intro To webOSIntro To webOS
Intro To webOS
 
Connecting Xamarin Apps with IBM Worklight in Bluemix
Connecting Xamarin Apps with IBM Worklight in BluemixConnecting Xamarin Apps with IBM Worklight in Bluemix
Connecting Xamarin Apps with IBM Worklight in Bluemix
 
SPUnite17 Timer Jobs Event Handlers
SPUnite17 Timer Jobs Event HandlersSPUnite17 Timer Jobs Event Handlers
SPUnite17 Timer Jobs Event Handlers
 

More from Lucas Jellema

Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...
Lucas Jellema
 
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Lucas Jellema
 
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lucas Jellema
 
Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...
Lucas Jellema
 
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
Lucas Jellema
 
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
Lucas Jellema
 
Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!
Lucas Jellema
 
IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)
Lucas Jellema
 
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Lucas Jellema
 
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Lucas Jellema
 
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Lucas Jellema
 
Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...
Lucas Jellema
 
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
Lucas Jellema
 
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Lucas Jellema
 
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
Lucas Jellema
 
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
Lucas Jellema
 
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Lucas Jellema
 
Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)
Lucas Jellema
 
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Lucas Jellema
 
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Lucas Jellema
 

More from Lucas Jellema (20)

Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...
 
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
 
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
 
Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...
 
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
 
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
 
Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!
 
IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)
 
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
 
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
 
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
 
Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...
 
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
 
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
 
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
 
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
 
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
 
Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)
 
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
 
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
 

Recently uploaded

Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
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
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
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
 
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
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
Google
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
vrstrong314
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
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
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
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
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 

Recently uploaded (20)

Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
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...
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
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
 
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
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
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
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.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
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 

ADF and JavaScript - AMIS SIG, July 2017

  • 1. JAVASCRIPT AND ADF Lucas Jellema AMIS ADF SIG – July 2017
  • 2. AGENDA • What can using JavaScript add to the out of the box ADF 12c framework? • Introducing JavaScript • How do we plug our JavaScript into ADF Faces • Tooling, Debugging, logging, production preparation • Pure client side – richer and leaner • Integrating rich client 3rd party components • Client to Server communications – in addition to full page request and declarative partial page rendering and navigation • Server to Client communication • Trigger JavaScript after PPR, Pure Push
  • 3. WHY CUSTOM JAVASCRIPT IN ADF? • Improve user experience • Faster & leaner • Richer • (pro) Active • Exploit HTML5 & 3rd party rich client components • Productivity & maintenance • Some things are much harder or even impossible on the server • Some things • Reduce load on server or network
  • 4. INTRODUCTION JAVASCRIPT • History • Standardization • Functions • Function as parameter • Callback • Closure • Variables • Untypes/dynamically typed • Scope • Object vs. JSON
  • 5. JAVASCRIPT IN BROWSER • Facilities • DOM manipulation • HTTP calls • Subscribe to SSE and WebSocket • HTML5 APIs (persistence, web worker, service worker, upload file, ..) • Driven by events • Browser (load page) • User activity • Time • jQuery
  • 6. EVENTS AROUND INPUT ELEMENT • Events happen on a component as a result of users action • And indirectly on parent and all ancestor components (bubble up) • Events can be handled by (JavaScript) event handlers • That respond to a specific event • That may cancel further bubbling of an event • That have access to the event object including a reference to the component that first triggered the event and the current component it has bubbled up to • That may be dynamically attached to components • Events can be triggered programmatically • Emulate a user action
  • 7. EVENTS FOR AN INPUT ELEMENT The Value focus keydown keyup change blur keypress click dblclick contextmenu input invalid select mousedown mousemove mouseout mouseover mouseup wheel copy cut paste mouseleavemouseenter auxclick
  • 8. FINDING OUT ABOUT EVENTS • Open page in Chrome browser • Rightclick on element • Select Inspect from Context Menu • Open the Console and type: monitorEvents($0) • The console will now show an event trace of events • Alternatively: use debugger to listen for selected events
  • 9. RESPOND TO EVENTS: JAVASCRIPT EVENT LISTENERS • A JavaScript callback function can be associated with a specific event on an HTML DOM element • To get notified by the browser when the event occurs • To act on the event – prepare for, respond to manipulate, suppress, log, …
  • 10. EVENT LISTENERS CAN BE ADDED PROGRAMMATICALLY • Hooking into the ‘document has loaded’ event • Programmatically add event listeners for DOM elements • Note: also works on HTML documents rendered by ADF Faces
  • 11. TRACKING EVENTS TO LEARN ABOUT WHICH AND WHEN
  • 12. JAVASCRIPT IN ADF FACES 12C • Out of the box • Rich components • Client side behavior for converters, validators • Lazy loading • Partial page refresh • Rich Client API • https://docs.oracle.com/middleware/1221/adf/api-reference-javascript- faces/toc.htm • Declarative hooks • Client Listeners
  • 13. INJECT JS INTO ADF • Snippet in Client Listener • Snippet in af:resource tag • Local file loaded in af:resource tag • Verbatim – file loaded from local web server or remote server • JS written in ADF server • through Extended RenderKit Service • through servlet filter directly on HTTP response
  • 14. EXAMPLE: FORCE VALUE IN INPUT TEXT TO UPPERCASE • Server side valueChangeListener • CSS style • onChange • onBlur? • Or: onKeyUp
  • 15. CLIENT LISTENER • “Keyboard and mouse events wrap native DOM events using the AdfUIInputEvent subclass of the AdfBaseEvent class, which provides access to the original DOM event and also offers a range of convenience functions for retrieval of key codes, mouse coordinates, and so on. The AdfBaseEvent class also accounts for browser differences in how these events are implemented. Consequently, you must avoid invoking the getNativeEvent() method on the directly, and instead use the AdfUIInputEvent API.”
  • 16. JAVASCRIPT DEVELOPMENT TOOLS, DEBUGGING, LOGGING • Browser Console • Browser Developer Tools • See JavaScript! • See network traffic • Debugging • Logging • ADF Logger • Assertions
  • 17. PURE CLIENT – RICHER UX • Force correct input (uppercase, number, postal code) • Instant validation and conversion • Add message on component (cookbook) • Smart Data Entry • Intra page navigation – vertical scrolling (scroll component into view), arrow based navigation • Focus on relevant component • Show/Hide and Enable/Disable components; prepare LOVs/Dropdown • Copy & Derive values • Use rich popups for data entry (without server interaction) • Suppress standard browser context menu • Use of Function Keys and Shortcuts
  • 18. ON PAGE LOAD/ON PPR • <af:document> • <af:clientListener method="init" type="load"/> • Partial Page Refresh • Add to ERKS • Property change listener (map from bean timestamp, add as partial target)
  • 19. FIND COMPONENTS • Event source • Relative • Absolute • “trick” using dummy css class • Warning: compression/obfuscation • Using clientAttribute, UI Component, Bean • Duncan Mills’ method
  • 21. Page Taskflow Fragment Taskflow Fragment Taskflow Fragment Client Side Event Bus 2. (when button is pressed ) Publish an instance of the ‘color selection event’ – with the color in the payload JavaScript function 1. Subscribe to the ‘color selection event’ – register JavaScript function as callback consumer 3. Invoke callback function with the payload of the published instance of the event 4. Process payload of event and manipulate select one radio; also queue custom event for serverListener Server MenuBean handleColorSelection(ClientEvent) { retrieve new color set bean color proprty add selectOneRadio as partial target componentReference to selectOneRadio serverListener 6. Partial Refresh of SelectOneRadio (governed from server) 5. Push custom event with color payload to server
  • 22.
  • 23. INTEGRATE 3RD PARTY COMPONENTS • HTML5 Components and APIs • Drag & Drop, SVG, Canvas, Media, GeoLocation • Persistence, WebWorker, Service Worker • Use jQuery/Dojo/… in ADF Faces • Google Maps • D3 • Client Side Event Bus • Generate JSON into client from ADF Data Binding • For LOVs/dropdown, smart conversion in rich text, fuel 3rd part components
  • 24. Client Server (middle tier) Database JavaScript Components ComponentsBeans & Objects activeOutputText Active Data Model activeOutputText push serverListener Bean Load JSON, CSS, Image, XML, JSRequest data or Push message push (DB QRCN) Object clientListener component serverListener partial page refresh partialSubmit autoSubmit JavaScript Function Queue Custom Event component component manipulate poll setPropertyListener user or programmatic action add JS to execute (ERKS) add components as partial target ERKS ‘ppr script’ actionListener, valueChangeListener, …Listener component component Full page reload
  • 25. CLIENT TO SERVER COMMUNICATIONS • PPR – declarative • setPropertyListener • Through JavaScript: queue action on button with partialSubmit • Target tag – specify which components to submit and to refresh (cookbook) • Server Listener • Plain old Ajax • ITank Help button • Function Key triggers server side operation • Create record, delete record, validate/calculate something • Extend client side event bus • Have taskflow respond server side to other taskflow • Property Listener? (used in ADS Nudge) • Partial Navigation (cookbook)
  • 26. PARTIAL PAGE REFRESH • Several aspects to PPR • Only update selected areas in a page • Update areas that have “expressed their interest” (partialTriggers) in certain “change agents” (updated fields, clicked upon buttons and links, …) • Allow activation through an AJAX background call (rather than a full page post) • Programmatically add candidate UI components to be refreshed • Using method addPartialTarget(UIComponent) on AdfFacesContext • Auto PPR through Change Event Policy property on ADF BC based data bindings • That make UI components associated with a changed ADF BC bindings refresh 26
  • 27. DEMO • autoSubmit is similar to publish • partialTriggers is similar to subscribe 27
  • 29. USE SETPROPERTYLISTENER TO PUSH DATA TO THE SERVER • The setPropertyListener will pass from value to the to target when type event occurs on parent • A very simple way to inform the server about an event and the data associated with the event • Supported types: action, focus, poll, query, rangeChange, selection, sort, rowDisclosure, valueChange and many more <af:image id="removeFromSetImage“ source="/images/removeFromSet.png“ shortDesc="Remove from Shopping Basket"/> <af:setPropertyListener from="#{item}“ to="#{shoppingBasket.itemToRemove}" type="action"/> </af:commandLink>
  • 30. AUTO-PPR FOR IMMEDIATE REFRESH OF DATA BOUND COMPONENTS • To have ADF automatically refresh data bound components when underlying value binding has changed its value • Set changeEventPolicy=ppr on iterator • Refresh as piggy back on any request cycle • No partialTriggers attribute required!
  • 31. CUSTOM SMART AUTO PPR 31 http://www.adfplus.com/2013/05/automatic-partial-page-rendering-across.html
  • 32. IMPLICIT SUBSCRIBE AND PUBLISH FROM A REGULAR MANAGED BEAN • Subscribe to auto ppr through a call to getLastName() and getFullName() • Get PPR-ed whenever the setLastName() has been invoked 32
  • 33. (IMPLICIT) SUBSCRIPTION TO BE NOTIFIED 33 PersonBean AutoPPRSupport fullname get rememberConsumer notifyConsumer lastname set fullname ::ph1 ::it3
  • 34. FLOW FROM (IMPLICIT) SUBSCRIPTION TO NOTIFICATION 34 PersonBean AutoPPRSupport fullname get rememberConsumer notifyConsumer lastname set fullname fullname ::ph1 ::it3 PPR: ::ph1 ::it3
  • 35. UNDERLYING MAGIC… • Reusing the logic behind the auto-ppr for ADF BC bindings 35
  • 36. CLIENT TO SERVER • Block user input • customEvent.preventUserInput(); customEvent.queue(isPartial) • To let the framework know that no response is expected, you use the AdfBaseEvent.noResponseExpected() method.
  • 37. SERVER TO CLIENT • ERKS • Set focus - https://blogs.oracle.com/jdevotnharvest/how-to- programmatically-set-focus-on-an-input-component • Lazy loading • Poll • True Push • ADS, SSE, WebSocket
  • 38. • Blog: technology.amis.nl • Email: lucas.jellema@amis.nl • : lucasjellema • : lucas-jellema • : www.amis.nl, info@amis.nl +31 306016000 Edisonbaan 15, Nieuwegein

Editor's Notes

  1. Read files - https://www.html5rocks.com/en/tutorials/file/dndfiles/
  2. https://www.slideshare.net/scribbblings/the-fine-art-of-javascript-event-handling On the Fly Tracer $.getScript('http://yphoenix.github.io/ jsEventTracer/Demo/jsEventTracer.js'); // OR (function(u) {var s=document.createElement("script");s.setAttribute(" type","text/ javascript");s.setAttribute("src",u);document.getElement sByTagName("head")[0].appendChild(s);})('http:// yphoenix.github.io/jsEventTracer/Demo/ jsEventTracer.js');
  3. https://www.w3schools.com/tags/ref_eventattributes.asp Live demo: http://yphoenix.github.io/jsEventTracer/Demo/Demo.html
  4. http://download.oracle.com/otndocs/OTNVDD-REA/ppt/OTNVDD-Skinning&JavaScript.pdf https://docs.oracle.com/middleware/1221/adf/develop-faces/GUID-CABBFBE1-6D7B-4818-A666-3F6A241A1471.htm#ADFUI361 http://www.oracle.com/technetwork/developer-tools/jdev/1-2011-javascript-302460.pdf
  5. Check https://docs.oracle.com/middleware/1221/adf/api-reference-javascript-faces/toc.htm https://docs.oracle.com/middleware/1221/adf/api-reference-javascript-faces/oracle/adf/view/js/component/rich/input/AdfRichInputText.html
  6. https://docs.oracle.com/middleware/1212/adf/ADFUI/af_event.htm#ADFUI12242
  7. %
  8. http://www.adfplus.com/2013/05/automatic-partial-page-rendering-across.html
  9. https://docs.oracle.com/middleware/1221/adf/develop-faces/GUID-CABBFBE1-6D7B-4818-A666-3F6A241A1471.htm#ADFUI361 6.3.4 How to Block UI Input During Event Execution
  10. https://blogs.oracle.com/jdevotnharvest/how-to-programmatically-set-focus-on-an-input-component