oracle application container cloud back end integration using node final
TRANSCRIPT
OOW 2016: CON 1283
Maarten Smeets
Oracle Application Container Cloud Service Back-End Integration Using Node.js
Introduction
• About AMIS– Located in the Netherlands
• About me– Oracle Integration Consultant– Experience with Oracle SOA Suite since 2007– Well certified (SOA, BPM, Java, SQL,
PL/SQL among others)– Author of a lot of blog articles (
http://javaoraclesoa.blogspot.com)
@MaartenSmeetsNL
https://nl.linkedin.com/in/smeetsm
Agenda
Node.js introduction Backend integration Application Container Cloud What to use for your integration?
Introducing Node.js
Node.jsUsing threads is hard
• Concurrency control mechanisms (e.g. locking)
• Coordination over threads (IPC)
• Memory overhead
• Synchronization
• Programming thread safe code is not easy
What is Node.js
• Node.js uses a single thread!
• Node.js has been createdTo write high-performance servers fast
• Node.js is:– a set of bindings to V8 for non-browser work: sockets, files, etc.– only exposes non-blocking, asynchronous interfaces– only one thread, one call stack (like a browser)– low level features: half-closed TCP connections, TCP throttling, UDP– has killer HTTP support
Node.js architecture
node standard library
node bindings(socket, http, etc)
V8 thread pool(libeio)
event loop(libev)
C/C++JavaScript
Node.js why should you care?
Node.jsWhat do they use it for?
“On the server side, our entire mobile software stack is completely built in Node”
“We are moving every product & every site within PayPal to Node”
“We’ve been busy building our next-generation Netflix.com web application using Node”
“MuleSoft's Anypoint platform services are implemented in Node”
Node.jsIntegration. Overview
POST /myserviceReceive request
ServiceImplementation
Processing inputCreating outputMessage processing
Backend
Front-end connectivityRouting
Back-end connectivity
Flow control
Node.jsIntegration. Overview
Front-end connectivity• URL handling• HTTP connection handling
Back-end connectivity• Connect to other services• Drivers to access technology
diverse systems• Connection pooling
Drivers / modules such as• Oracle Database• Oracle NoSQL Database• Mongo Database• SOAP and JSON services
WhatFrameworks such as• Express• Hapi• Koa• Sails
• xml2js• node-soap
Message processing
Middleware• Routing• Mapping
Flow control • Async• Promises
How
Node.jsFrameworks
• Abstraction
• Generic functionality
• Facilitate development
• Drawbacks– Performance cost– Need framework knowledge– Only specific functionality
https://raygun.com/blog/2016/06/node-performance/
raw node koa express restify hapi0
2000
4000
6000
8000
10000
12000
14000
Framework
Req
uest
s pe
r sec
ond
Node.jsFrameworks: Express.js
• Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications.
• Express.js is used in many other popular frameworks like Sails, MEAN, LoopBack
• It is maintained by StrongLoop (IBM).Started in 2009. 191 contributers. 6,823,598 downloads last month *
* Contributers from github.com. Downloads from npmjs.com. Determined 28 aug 2016
Node.jsWithout framework
var http = require('http');
var server = http.createServer(function (req, res) { if (req.method === 'GET') {
res.end("Hello World"); }});
server.listen(3000);
Node.jsWith express.js
var express = require('express');var app = express(); app.get('/', function (req, res) { res.send('Hello World');}); app.listen(3000);
Quick and easy
Node.jsFrameworks: Other
• HapiA rich framework for building applications and services. Configuration is better than code. Business logic must be isolated from the transport layer.Started in 2011 146 contributers 234,103 downloads last month.
• KoaExpressive, light-weight HTTP framework for Node.js to make web applications and APIs more enjoyable to write. Started in 2013 89 contributers 132,790 downloads last month.
• SailsSails is the most popular MVC framework for Node.js. It is designed for building practical, production-ready Node.js apps. Build on top of express. Started in 2012 210 contributers 59,518 downloads last month.
Node.js Callback hell
Error handling in every callback handler
Nested callbacks
Node.js Callback hell
Error handling in every callback handler
Nested callbacks
Node.jsFlow control. Executing in series
• AsyncAsync is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript.
• PromisesA Promise object represents a value that may not be available yet, but will be resolved at some point in the future. It allows you to write asynchronous code in a more synchronous fashion.
• GeneratorsThe Generator object is returned by a generator function and it conforms to both the iterable protocol and the iterator protocol.
Node.js modulesConvert XML <> JSON
• xml2jsEver had the urge to parse XML? And wanted to access the data in some sane, easy way? Don't want to compile a C parser, for whatever reason? Then xml2js is what you're looking for!
• xml2js uses SAX (Simple API for XML)– Event driven asynchronous processing of XML– Memory friendly
Does not require creating a Document Object Model (DOM) of the XML document in memory
</> {}
Node.js modulesHow does JSONized SOAP look?
Mind the namespace prefixes!
Node.js modulesnode-soap
node-soap is a module that offers SOAP support
Node.js modulesnode-soap
Define the service logic
Load the WSDL
Create the server
Host the webservice
Node.js and back-end integration
Database integration with Node.js
Oracle NoSQL highlights
• Key value pair database
• Dynamic data model
• Transparent load balancing
• Highly scalable
• Options for transactional mechanisms
• Options for eventual consistency
• Built on BerkelyDB
NoSQL highlights
http://www.oracle.com/technetwork/database/nosqldb/overview/nosql-transactions-497227.html
Transactional mechanisms
Consistency models
Node.js and NoSQL
Node.js
Node.js and NoSQL
Application
Node.js
Application
RMI
RMIJSON
Thrift
nosqldb-oraclejs
JVM
NoSQL Java proxy
kvclient
WL/GlassFish/TomcatREST Data Services
(ORDS)
kvclient
Node.js and MongoDB
BSON
Node.js
Application
mongoose
Node.js and the Oracle Databasenode-oracledb
• Maintained by Oracle and actively being developed
• Requires Oracle database client software installedApplication Container Cloud already provides this
• Very rich in features and well documented!
https://github.com/oracle/node-oracledb
Node.js
Application
nosqldb-oraclejs
Node.js and the Oracle Databasenode-oracledb: Features
• Promises, Callbacks and Streams• SQL and PL/SQL execution• REF CURSORs• Large Objects: CLOBs and BLOBs• Oracle Database 12.1 JSON datatype• Query results as JavaScript objects or arrays• Smart mapping between JavaScript and Oracle types
with manual override available• Data binding using JavaScript objects or arrays• Transaction Management• Inbuilt Connection Pool with Queueing• Database Resident Connection Pooling (DRCP)• External Authentication• Row Prefetching• Statement Caching
• Client Result Caching• End-to-end Tracing, Mid-tier Authentication, and
Auditing• Oracle High Availability Features
– Fast Application Notification (FAN)– Runtime Load Balancing (RLB)– Transparent Application Failover (TAF)
Node.js and the Oracle Databasenode-oracledb: Features
• Promises, Callbacks and Streams• SQL and PL/SQL execution• REF CURSORs• Large Objects: CLOBs and BLOBs• Oracle Database 12.1 JSON datatype• Query results as JavaScript objects or arrays• Smart mapping between JavaScript and Oracle types
with manual override available• Data binding using JavaScript objects or arrays• Transaction Management• Inbuilt Connection Pool with Queueing• Database Resident Connection Pooling (DRCP)• External Authentication• Row Prefetching• Statement Caching
• Client Result Caching• End-to-end Tracing, Mid-tier Authentication, and
Auditing• Oracle High Availability Features
– Fast Application Notification (FAN)– Runtime Load Balancing (RLB)– Transparent Application Failover (TAF)
Node.js and the Oracle Databasenode-oracledb: Calling PL/SQL
Define bind variables IN
Define bind variables OUT
Call a PL/SQL function
Node.js and the Oracle Databasenode-oracledb: Connection pooling
Good sample: http://stackoverflow.com/questions/29846188/node-js-express-oracle-connection-pooling-ora-24418-cannot-open-further-sess
Create a connection pool
Grab a connection from the pool and use it
Close when done. Also in case of errors!
Inbuilt queueing
Node.js and the Oracle DatabaseUsing DRCP with node-oracledb
• Database Resident Connection Pooling (DRCP)
http://www.oracle.com/technetwork/articles/oracledrcp11g-1-133381.pdf
Node.js and the Oracle DatabaseUsing DRCP with node-oracledb
• On the client:– Set oracledb.ConnectionClass = ‘poolname’– Easy Connect syntax like myhost/sales:POOLED, or by using a tnsnames.ora alias for a connection that contains (SERVER=POOLED)– Set externalAuth to true in getConnection or createPool
• On the database– execute dbms_connection_pool.start_pool(“poolname”);
https://www.youtube.com/watch?v=3p6rutSLlkg
Simple to use
Node.js and the Oracle DatabasePerformance with node-oracledb
• Make sure you create a connection pool in the right scope to promote re-use
• Consider increasing the LibUV thread pool size. The default is 4. Can be set with environment variable: UV_THREADPOOL_SIZE
• Explicitly release connections to the pool
• Use a resultSet when the number of rows fetched is large
• Consider using DRCPRead: http://docs.oracle.com/database/121/ADFNS/adfns_perf_scale.htm#ADFNS228
Introducing Application Container Cloud
Node.jsWhat doesn’t it provide?
• High availability– Clustering capabilities– Load balancer– On demand scaling
• Management and monitoring
• Support
• Provisioning
• Deployment• Patching• Back-end drivers
99.999%
Node.jsWhat doesn’t it provide?
• High availability– Clustering capabilities– Load balancer– On demand scaling
• Management and monitoring
• Support
• Provisioning /Deployment
• Patching• Back-end drivers
99.999%
Application Container CloudEnterprise Grade Features for Node.js
Application Container Cloud ServiceArchitecture
Tenant1
Tenant2
(App 1) (App 2) (App 3)
Load Balancer Database Cloud
Java Cloud
Messaging Cloud
Storage Cloud
Developer Cloud
Customers
< / >
Developers
Application Container Cloud ServiceEnterprise grade features for Node.js
• On demand scale out/in. Adding/Removing instances
• On demand scale up/down. Adding/Removing memory per instance
• Automatic load balancer configuration
• One click patching
Application Container Cloud ServiceEnterprise grade features for Node.js
• Easy web interface fordeployments
• Also possible using the API and Developer Cloud Service
Easy!
Application Container Cloud ServiceEnterprise grade features for Node.js
• Easy web interface for managing configuration
• Including service bindingssuch as database connections
Application Container Cloud ServiceEnterprise grade features for Node.js
• Browse log files from the webinterface
Application Container Cloud ServiceEnterprise grade features for Node.js
https://docs.oracle.com/cloud/latest/apaas_gs/APCSR/
Application Container Cloud ServiceIntegration with Developer Cloud Service
pom.xmlmaven-assembly-pluginassembly.xml
YourApplication.zip
Node.js application
manifest.json
Application Container Cloud ServiceIntegration with Developer Cloud Service
Application Container Cloud ServiceIntegration with Developer Cloud Service
Application Container Cloud ServiceIntegration with Developer Cloud Service
• Build and deploy with Developer Cloud Service
Application Container Cloud ServiceIntegration with Developer Cloud Service
Application Container Cloud ServiceIntegration with Developer Cloud Service
Application Container Cloud ServiceIntegration with Developer Cloud Service
Application Container Cloud ServiceIntegration with Developer Cloud Service
Integration: SOA Suite or Node.js?
Node.js versus SOA Suite
Node.js versus SOA Suite
SOA Suite
Node.js architecture
node standard library
node bindings(socket, http, etc)
V8 thread pool(libeio)
event loop(libev)
C/C++JavaScript
Node.js
Integration with Node.js or SOA Suite
• Node.js assets– thin stateless services like microservices– tying simple things together with minimal effort– technology focus: JavaScript + REST/JSON– High performance
• Node.js challenges– no adapters, workflow, …– no wizard driven IDE– requires (a lot of) custom code– no high availability / management / monitoring options
Consider Application Container Cloud to provide those
Questions
@MaartenSmeetsNL
https://nl.linkedin.com/in/smeetsm
Download sample code athttps://github.com/MaartenSmeets/nodejssamples