Kuassi Mensah

Subscribe to Kuassi Mensah feed
Pragmatic Oracle Database Programming with Java, Hadoop, and JavaScript. I - Java in the database, JDBC, UCP, DRCP, Application Continuity, Transaction Guard II - In-Database Container for Hadoop, Table Access for Hadoop III - JavaScript Stored Procedures using Nashorn and Node.js using and Avatar.js. Kuassi Mensahhttps://plus.google.com/112625553381085136463noreply@blogger.comBlogger95125
Updated: 13 hours 53 min ago

My sessions recommendations for JavaOne '15 and OOW '15

Sun, 2015-09-27 14:52
JavaOne SF 2015  Session recommendations

High Availability with Java EE Containers, JDBC, and Java Connection Pools [BOF7732]
Monday, Oct 26, 8:00 p.m. | Parc 55—Mission

Implement Cloud Data Services with Java 8 Nashorn [CON4405]

Java Connection Pool Performance and Scalability with Wait-Free Programming [CON2158]
Wednesday, Oct 28, 4:30 p.m. | Hilton—Continental Ballroom 1/2/3


OOW SF 2015 - Session recommendations

Java Virtual Machine Cookbook [UGF2720]
Sunday, Oct 25, 9:00 a.m. | Moscone West—3011


Next-Generation Database: Implement Cloud Data Services with Java 8 Nashorn [CON8461]
Monday, Oct 26, 5:15 p.m. | Moscone South—308

Next-Generation Database: Java Connection Pool for Multitenant and Sharded Databases [CON8460]
Monday, Oct 26, 2:45 p.m. | Moscone South—308


Integrate Master Data with Big Data on Hadoop and Spark [CON8459]
Wednesday, Oct 28, 3:00 p.m. | Moscone South—308

Market Basket Analysis Using Oracle In-Database Container for Hadoop [CON8462]
Thursday, Oct 29, 12:00 p.m. | Moscone South—307

Next-Gen Database Enhancements for Java Application Performance and Scalability [CON10310]
Thursday, Oct 29, 2:30 p.m. | Moscone South—307


Dialog with the Oracle Database Java Developers and Architects [MTE9501]
Tuesday, Oct 27, 7:15 p.m. | Moscone South—305



JavaScript stored procedures as Cloud data services.

Tue, 2015-09-08 17:37
Find out how to implement JavaScript Stored Procedures with Oracle Database 12c and how to invoke these through RESTful Web Services.

https://blogs.oracle.com/java/entry/nashorn_and_stored_procedures

JavaScript Stored Procedures and Node.js Applications with Oracle Database 12c

Mon, 2015-02-09 20:44
                                      Kuassi Mensah
                                    db360.blogspot.com | @kmensah | https://www.linkedin.com/in/kmensah

Introduction                                                            
Node.js and server-side JavaScript are hot and trendy; per the latest “RedMonk Programming Languages Rankings[1], JavaScript and Java are the top two programming languages. For most developers building modern Web, mobile, and cloud based applications, the ability to use the same language across all tiers (client, middle, and database) feels like Nirvana but the IT landscape is not a green field; enterprises have invested a lot in Java (or other platforms for that matter) therefore, the integration of JavaScript with it becomes imperative. WebSockets and RESTful services enable loose integration however, the advent of JavaScript engines on the JVM (Rhino, Nashorn, DynJS), and Node.js APIs on the JVM (Avatar.js, Nodyn, Trireme), make possible and very tempting to co-locate Java and Node applications on the same JVM.
This paper describes the steps for running JavaScript stored procedures[2]directly on the embedded JVM in Oracle database 12c and the steps for running Node.js applications on the JVM against Orace database 12c, using Avatar.js, JDBC and UCP.
          
JavaScript and the Evolution of Web Applications Architecture                                   
At the beginning, once upon a time, long time ago, JavaScript was a browser-only thing while business logic, back-end services and even presentations where handled/produced in middle-tiers using Java or other platforms and frameworks. Then JavaScript engines (Google’s V8, Rhino) leave the browsers and gave birth to server-side JavaScript frameworks and Node.js.
Node Programming Model
Node.js and similar frameworks bring ease of development rapid prototyping, event-driven, and non-blocking programming model[3]to JavaScript. This model is praised for its scalability and good enough performance however, unlike Java, Node lacks standardization in many areas such as database access i.e., JDBC equivalent, and may lead, without discipline, to the so called “callback hell[4]”.
Nonetheless, Node is popular and has a vibrant community and a large set of frameworks[5].
Node Impact on Web Applications Architecture
With the advent of Node, REST and Web Sockets, the architecture of Web applications has evolved into 
(i) plain JavaScript on browsers (mobiles, tablets, and desktops); 
(ii) server-side JavaScript modules (i.e., Node.js, ORM frameworks) interacting with Java business logic and databases.
The new proposal for Web applications architecture is the integration of Node.js and Java on the JVM.  Let’s discuss the enabling technologies: JavaScript engine on the JVM and Node API on the JVM and describe typical use cases with Oracle database 12c.  
JavaScript on the JVM
Why implement a JavaScript engine and run JavaScript on the JVM? For starters, i highly recommend Mark Swartz ‘s http://moduscreate.com/javascript-and-the-jvm/and Steve Yegge’s  http://steve-yegge.blogspot.com/2008/06/rhinos-and-tigers.htmlblog posts. 
In summary, the JVM brings (i) portability; (ii) manageability; (iii) Java tools; (iv) Java libraries/technologies such as JDBC, Hadoop; and (v) the preservation of investments in Java. 
There are several implementations/projects of Java based JavaScript engines including Rhino, DynJS and Nashorn.Rhino
First JavaScript engine entirely written in Java; started at NetScape in 1997 then, became an open-source Mozilla project[6]. Was for quite some time the default JavaScript engine in Java SE, now  replaced by Nashorn in Java SE 8. 
DynJS
DynJS is another open-source JavaScript engine for the JVM. Here is the project homepage http://dynjs.org/. 
Nashorn
Introduced in Java 7 but “production” in Java 8[7], the goal of project Nashorn (JEP 174), is to enhance the performance and security of the Rhino JavaScript engine on the JVM. It integrates with javax.script API (JSR 223) and allows seamless interaction between Java and JavaScript (i.e., invoking Nashorn from Java and invoking Java from Nashorn).

To illustrate the reach of Nashorn on the JVM and the interaction between Java and JavaScript, let’s run some JavaScript directly on the database-embedded JVM in Oracle database 12c. 
JavaScript Stored Procedures with Oracle database 12c Using Nashorn
Why would anyone run JavaScript in the database? For the same reasons you’d run Java in Oracle database. Then you might ask: why run Java in the database, in the first place? As discussed in my book[8], the primary motivations are: 
(i) reuse skills and code, i.e., which programming languages are your new hire knowledgeable of or willing to learn; 
(ii) avoid data shipping[9] i.e., in-place processing of billions of data/documents; 
(iii) combine SQL with foreign libraries to achieve new database capability thereby extending SQL and the reach of the RDBMS, e.g., Web Services callout, in-database container for Hadoop[10]
Some developers/architects prefer a tight separation between the RDBMS and applications therefore, no programming language in the database[11]but there are many pragmatic developers/architects who run code near data, whenever it is more efficient than shipping data to external infrastructure.

Co-locating functions with data on the same compute engine is shared by many programming models such as Hadoop. With the surge and prevalence of Cloud computing, RESTful service based architecture is the new norm. Data-bound services can be secured and protected by the REST infrastructure, running outside the RDBMS. Typical use case: a JavaScript stored procedures service would process millions/billions of JSON documents in the Oracle database and would return the result sets to the service invoker.

To conclude, running Java, JRuby, Python, JavaScript, Scala, or other programming language on the JVM in the database is a sound architectural choice. The best practices consist in: (i) partitioning applications into data-bound and compute-bound modules or services; (ii) data-bound services are good candidates for running in the database; (iii) understand Oracle database 
DEFINER INVOKER rights [12]and grant only the necessary privilege(s) and/or permission(s). 

The Steps
The following steps allow implementing JavaScipt stored procedure  running in Oracle database; these steps represent an enhancement from the ones presented at JavaOne and OOW 2014 -- which consisted in reading the JavaScript from the file system; such approach required granting extra privileges to the database schema for reading from RDBMS file system something not recommended from security perspective. Here is a safer approach:

1.      Nashorn is part of Java 8 but early editions can be built for Java 7; the embedded JavaVM in Oracle database 12c supports Java 6 (the default) or Java 7. For this proof of concept, install Oracle database 12c with Java SE 7 [13]
2.      Build a standard Nashorn.jar[14]; (ii) modify the Shell code to interpret the given script name as an OJVM resource; this consists mainly in invoking getResourceAsStream()on the current thread's context class loader ; (iii) rebuild Nashorn.jar with the modified Shell
3.  Load the modified Nashorn jar into an Oracle database shema e.g., HR
 loadjava -v -r -u hr/ nashorn.jar
4.      Create a new dbms_javascript  package for invoking Nashorn’s Shell with a script name as parameter
create or replace package dbms_javascript as
  procedure run(script varchar2);
end;
/
create or replace package body dbms_javascript as
  procedure run(script varchar2) as
  language java name 'com.oracle.nashorn.tools.Shell.main(java.lang.String[])';
end;
/

Then call dbms_javascript,run(‘myscript.js’)from SQL which will invoke Nashorn  Shell to execute the previously loaded myscript.js.
5.  Create a custom role, we will name it NASHORN, as follows, connected as SYSTEM
SQL> create role nashorn;
SQL> call dbms_java.grant_permission('NASHORN', 'SYS:java.lang.RuntimePermission', 'createClassLoader', '' );
SQL> call dbms_java.grant_permission('NASHORN', 'SYS:java.lang.RuntimePermission', 'getClassLoader', '' );
SQL> call dbms_java.grant_permission('NASHORN', 'SYS:java.util.logging.LoggingPermission', 'control', '' );
Best practice: insert those statements in a nash-role.sqlfile and run the script as SYSTEM
6.      Grant the NASHORN role created above to the HR schema as follows (connected as SYSTEM):

SQL> grant NASHORN to HR;

7.      Insert the following JavaScript code in a file e.g., database.js stored on your client machine’s (i.e., a machine from which you will invoke loadjava as explained in the next step).
This script illustrates using JavaScript and Java as it
uses the server-side JDBC driver to execute a PreparedStatement to retrieve the first and last names from the EMPLOYEES table.

var Driver = Packages.oracle.jdbc.OracleDriver;
var oracleDriver = new Driver();
var url = "jdbc:default:connection:";   // server-side JDBC driver
var query ="SELECT first_name, last_name from employees";
// Establish a JDBC connection
var connection = oracleDriver.defaultConnection();
// Prepare statement
var preparedStatement = connection.prepareStatement(query);
// execute Query
var resultSet = preparedStatement.executeQuery();
// display results
     while(resultSet.next()) {
     print(resultSet.getString(1) + "== " + resultSet.getString(2) + " " );
     }
// cleanup
resultSet.close();
preparedStatement.close();
connection.close();


8.      Load database.js in the database as a Java resource (not a vanilla class)
loadjava –v –r –u hr/ database.js

9.      To run the loaded script

sqlplus hr/
SQL>set serveroutput on
SQL>call dbms_java.set_output(80000)
SQL>call dbms_javascript.run(‘database.js’);

The Nashorn Shell reads ‘database.js’ script stored as Java Resource from internal table; the JavaScript in its turn invokes JDBC to execute a PreparedStatement and the result set is displayed on the console. The message “ORA=29515: exit called from Java code with status 0” is due to the invocation of java.lang.Runtime.exitInternal; and status 0 means normal exit (i.e., no error). The fix is to remove that call from Nashorn. 
Node.js on the JVM
As discussed earlier, Node.js is becoming the man-in-the-middle between Web applications front ends and back-end legacy components and since companies have invested a lot in Java, it is highly desirable to co-locate Node.js and Java components on the same JVM for better integration thereby eliminating the communication overhead. There are several projects re-implementing Node.js APIs on the JVM including: Avatar.js, Nodyn, and Trireme. This paper will only discuss Oracle’s Avatar.js.
Project Avatar.js[15]
The goal of project Avatar.js is to furnish “Node.js on the JVM”; in other words, an implementation of Node.js APIs, which runs on top of Nashorn and enables the co-location of Node.js programs and Java components. It has been outsourced by Oracle under GPL license[16]. Many Node frameworks and/or applications have been certified to run unchanged or slightly patched, on Avatar.js.

There are binary distributions for Oracle Enterprise Linux, Windows and MacOS (64-bits). These builds can be downloaded from https://maven.java.net/index.html#welcome. Search for avatar-js.jar and platform specific libavatar-js libraries (.dll, .so, dylib). Get the latest and rename the jar and the specific native libary accordingly. For example: on  Linux, rename the libary to avatar-js.so; on Windows, rename the dll to avatar-js.dll and add its location to your PATH (or use -Djava.library.path=).

RDBMSes in general and Oracle database in particular remain the most popular persistence engines and there are RDBMS specific Node drivers[17]as well as ORMs frameworks. However, as we will demonstrate in the following section, with Avatar.js, we can simply reuse existing Java APIs including JDBC and UCP for database access.

Node Programming with Oracle Database using Avatar.js, JDBC and UCP 
The goal of this proof of concept is to illustrate the co-location of a Node.js application, the Avatar.js library, the Oracle JDBC driver and the Oracle Universal Connection Pool (UCP) on the same Java 8 VM.
The sample application consists in a Node.js application which performs the following actions:
(i) Request a JDBC-Thin connection from the Java pool (UCP)
(ii)Create a PreparedStatement object for “SELECT FIRST_NAME, LAST_NAME FROM EMPLOYEES
(iii)Execute the statement and return the ResultSet in a callback
(iv)Retrieve the rows and display in browser on port 4000
(v) Perform all steps above in a non-blocking fashion – this is Node.js’s raison d’être. The demo also uses Apache ab load generator to simulate concurrent users running the same application in the same/single JVM instance.For the Node application to scale in the absence of asynchronous JDBC APIs, we need to turn synchronous calls into non-blocking ones and retrieve the result set via callback.
Turning Synchronous JDBC Calls into Non-Blocking Calls
We will use the following wrapper functions to turn any JDBC call into a non-blocking call i.e., put the JDBC call into a thread pool and free up the Node event loop thread.
var makeExecutecallback = function(userCallback) {
 return function(name, args){
      ...
      userCallback(undefined, args[1]);
  }
}
 function submit(task, callback, msg) {
    var handle = evtloop.acquire();
    try {    var ret = task();
               evtloop.post(new EventType(msg, callback, null, ret)); {catch{}
    evtloop.submit(r);
}

Let’s apply these wrapper functions to executeQuery JDBC call, to illustrate the concept
exports.connect = function(userCallback) {..} // JDBC and UCP settings
Statement.prototype.executeQuery = function(query, userCallback) {
         var statement = this._statement;
          var task = function() {
          return statement.executeQuery(query);
       }
     submit(task, makeExecutecallback(userCallback), "jdbc.executeQuery");
}
Similarly the same technique will be applied to other JDBC statement APIs.
Connection.prototype.getConnection = function() {…}
Connection.prototype.createStatement = function() {..}
Connection.prototype.prepareCall = function(storedprocedure) {..}
Statement.prototype.executeUpdate = function(query, userCallback) {..}
Returning Query ResultSet through a Callback
The application code fragment hereafter shows how: for every HTTP request: (i) a connection is requested, (ii) the PreparedStatement is executed, and (iii) the result set printed on port 4000.
   ...
   var ConnProvider = require('./connprovider').ConnProvider;
var connProvider = new ConnProvider(function(err, connection){.. });

var server = http.createServer(function(request, response) {
  connProvider.getConn(function(name,data){..});     
  connProvider.prepStat(function(resultset) {
                while (resultset.next()) {
                   response.write(resultset.getString(1) + " --" + resultset.getString(2));
                   response.write('
');
    }
    response.write('
');
    response.end();   
}
server.listen(4000, '127.0.0.1');

Using Apache AB, we were able to scale to hundreds of simultaneous invocations of the Node application. Each instance grabs a Java connection from The Universal Connection Pool (UCP), executes the SQL statements through JDBC then return the result set via a Callbak on port 4000.
Conclusions
As server-side JavaScript (typified by Node.js) gains in popularity it’ll have to integrate with existing components (COBOL is still alive!!). Developers, architects will have to look into co-locating JavaScript with Java, across middle and database tiers.





[1] http://redmonk.com/sogrady/2015/01/14/language-rankings-1-15/
[2] I’ll discuss the rationale for running programming languages in the database, later in this paper.
[3] Request for I/O and resource intensive components run in separate process then invoke a Callback in the main/single Node  thread, when done.
[4] http://callbackhell.com/
[5] Search the web for “Node.js frameworks
[6] https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino
[7] Performance being one of the most important aspect
[8] http://www.amazon.com/exec/obidos/ASIN/1555583296
[9] Rule of thumb: when processing more than ~20-25% of target data, do it in-place, where data resides (i.e., function shipping).
[10] In-database Container for Hadoop is not available, as of this writing.
[11] Other than database’s specific procedural language, e.g.,  Oracle’s PL/SQL
[12] I discuss this in chapter 2 of my book; see also Oracle database docs.
[13] See Multiple JDK Support in http://docs.oracle.com/database/121/JJDEV/E50793-03.pdf
[14] Oracle does not furnish a public download of Nashorn.jar for Java 7; search “Nashorn.jar for Java 7”.
[15]  https://avatar-js.java.net/
[16] https://avatar-js.java.net/license.html
[17] The upcoming Oracle Node.js driver was presented at OOW 2014. 

My DOAG session re:Server-side JavaScript

Tue, 2014-11-18 04:31
#DOAG Wed 19/11 17:00 rm HongKong Server-side #JavaScript (#NodeJS) progrm#OracleDB using #nashorn & Avatar.js --#db12c @OracleDBDev #java

Will post shortly ablog re: JavaScript Stored Procedures. 

Run Scala directly in Oracle database

Thu, 2014-02-27 06:15
A nice proof of concept for #Scala, #java, #Oracle, and #db12c, afficionados http://bit.ly/1o8gejG

En route for OTN Yathra

Mon, 2014-02-17 11:27
En route for OTN Yathra (http://t.co/E0KUudWOLn) first stop Mumbai customers visits #java #db12c #mapreduce #hadoop #oracletechnet

Rocky Mountain OUG: what's up Feb 6th @ 8:30am in Room 504?

Wed, 2014-02-05 20:17
 Why get up early and show up in Room 504? http://bit.ly/1cgzgy1 #Java #db12c #OracleRac

Speaking at OTN Yathra (India)

Wed, 2014-01-29 12:01
Speaking @ http://t.co/E0KUudWOLn Mumbai/Pune/Chennai In-Database#MapReduce for DBAs and Database Developers using SQL or #Hadoop

Rocky Mountain Oracle Users group event

Fri, 2014-01-24 17:16
 
Join me at #RMOUG Feb 6th 8:30 Rm 504:; i'll be presenting #JavaPerf., Scalability, Availability & Security w Oracle #db12c --#OracleRac -- http://bit.ly/1cgzgy1

OTN Virtual Developers Days

Fri, 2014-01-24 16:51
Join me on Feb 4th @ http://t.co/nheuk9MBZd

at 10:15am: "In-Database MapReduce w SQL & Hadoop"  then 12:15pm "Best Practices 4 App Performance, Scalability and High-Availability with Oracle Database 12c"

My Sessions at Oracle OpenWorld and JavaOne 2013

Thu, 2013-07-18 17:18
Have you ever needed to deploy Java applications with tens of thousands of concurrent users?
Have you ever experienced paying twice the same flight ticket, the same article or your taxes?
Have you ever wanted the system to just deal with database failure and not ask you to restart your transaction from start?
Looking to exploit the new Oracle Multitenant Container Database with Java?
Looking to analyze structured data using Mapreduce patterns?
Looking to implement MapReduce patterns using SQL and Hadoop?
If you are a Java architect, Java designer or wannabe looking to exploit new Oracle database 12c enhancements in the areas of performance, scalability, availability, security and manageability/ease-of-use, here are sessions for you. Register and book your seats ASAP!
My Sessions
9/24/13 (Tuesday) 5:15 PM - Marriott Marquis - Salon 8
9/25/13 (Wednesday) 10:15 AM - Marriott Marquis - Salon 7
9/24/13 (Tuesday) 3:00 PM - Hilton - Continental Ballroom 5
9/25/13 (Wednesday) 8:30 AM - Hilton - Continental Ballroom 4
9/23/13 (Monday) 10:45 AM - Marriott Marquis - Salon 3/4


What's in Oracle Database 12c for Java?

Wed, 2013-06-26 00:05
Looking to exploit the new Oracle Multitenant Container Database with Java?
Have you ever needed to deploy Java applications with tens of thousands of concurrent users? If you are a Java architect, Java designer or wannabe looking to exploit new Oracle database 12c enhancements in the areas of performance, scalability, availability, security and manageability/ease-of-use, this is the paper for you.

 Have you ever experienced paying twice the same flight ticket, the same article or your taxes? Have you ever wanted the system to just deal with database failure and not ask you to restart your transaction from start? Upon database outages (hardware, software, network, or storage failure), four problems confront applications: hangs, errors handling, determining the outcome of in-flight work (i.e., last COMMIT), and the resubmission in-flight work.
If you are application developer, database and system administrator, integrator or ISV looking to better exploit Oracle RAC and Active Data Guard to achieve maximum application availability, this is the paper for you (although with a Java focus).

My Guide for Oracle OpenWorld 2012

Thu, 2012-09-13 17:44
Are you a Java developer, C/C++ developer, or PHP|Ruby|Perl|Python developer  looking to exploit the latest Oracle database technology?

Are you a MapReduce/Hadoop developer or administrator?

Are you MySQL developer looking to migrate or reuse your applications against Oracle?

Are you a developer or Oracle DBA looking for Net Services Enhancements with the Latest Oracle Database Technology?
Here is my list of sessions for you!
Note: I will be either presenting, coordinating or attending these sessions, so if you want to see/meet me, you know where to go!
1/ MapReduce and Hadoop developer and administrator: what is new in the latest Oracle database technology?
In-Database Hadoop: When MapReduce Meets the RDBMS
Where: Parc 55 - Embarcadero
When: 10/3/12, 15:00 - 16:00
Where: Marriott Marquis - Salon 10/11
When: 10/2/12, 17:00 - 18:00
Where: Marriott Marquis - Golden Gate C1
When: 10/2/12, 13:15 - 14:15

Where: Moscone South - 302
When: 10/2/12, 10:15 - 11:15

Visit us in the:
(i) Oracle Red Lounge in Moscone North upper lobby  
(ii) Java/JDBC demo booth (Database demo campground, Moscone South)

2/ Java developers: what is new in the latest Oracle database technology?
Where: Marriott Marquis - Golden Gate C1
When: 10/2/12, 13:15 - 14:15

Where: Marriott Marquis - Club Room
When: 10/3/12, 17:00 - 18:00

Where: Marriott Marquis - Salon 10/11
When: 10/1/12, 12:15 - 13:15

Where: Marriott Marquis - Foothill F
In-Database Hadoop: When MapReduce Meets the RDBMS
Where: Parc 55 - Embarcadero (JavaOne)
When: 10/3/12, 15:00 - 16:00

Where: Marriott Marquis - Salon 10/11
When: 10/2/12, 17:00 - 18:00


Visit us in the Java/JDBC demo booth (Database demo campground, Moscone South)


3/ C/C++ developer: what is new in the latest Oracle database technology?
Best Practices for Application Performance, Scalability, and Availability
Where: Marriott Marquis - Club Room
When: 10/1/12, 10:45 - 11:45

Meet the Developers of Database Access Services (OCI, ODBC, DRCP, PHP, Python)
Where: Marriott Marquis - Foothill F
When: 10/1/12, 19:15 - 20:00
Run MySQL Applications Against the Latest Oracle Database Technology
Where: Marriott Marquis - Salon 10/11
When: 10/1/12, 16:45 - 17:45

Syndication and Consolidation: Oracle Database Driver for MySQL Applications
Where: Marriott Marquis - Club Room
When: 10/1/12, 13:45 - 14:45 


Visit us in the Data Access and Net Services demo booth (Database demo campground, Moscone South)

4/ PHP|Python|Ruby|Perl developer5/ MySQL developer: what is new in the latest Oracle database technology?Syndication and Consolidation: Oracle Database Driver for MySQL Applications
Where: Marriott Marquis - Club Room
When: 10/1/12, 13:45 - 14:45

Run MySQL Applications Against the Latest Oracle Database Technology
Where: Marriott Marquis - Salon 10/11
When: 10/1/12, 16:45 - 17:45

Visit us in the Data Access and Net Services demo booth (Database demo campground, Moscone South)
6/ Net Services Enhancements with the Latest Oracle Database Technology
 Where: Moscone South - 303
 When: 10/3/12, 11:45 - 12:45
 

Visit us in the Data Access and Net Services demo booth (Database demo campground, Moscone South)

Book Review: OCA Oracle Database 11g: SQL Fundamentals I: A Real World Certification Guide - Packt Publishing

Sun, 2012-01-29 14:16

What i liked: the book is accessible to anyone; the examples and their screen casts make easy to see what exactly the author is talking about. Each chapter has a "Certification objectives covered" and a "Test Your Knowledge" sections which are helpful, something you'd expect from a certification guide. The book also covers (very slightly, though) how to use SQL with programming languages including PL/SQL, Perl, Python, and Java; but why is Ruby not covered (-:?

Bonus: introduction to APEX.


OOW 2011: What is Going on for JDBC, UCP, Java in the Database, Net Services, OCI, PHP, Ruby, Python, and Perl

Wed, 2011-08-31 17:37

Oracle OpenWorld San Fransicso 2011


Sessions for DBA and/or application developers (Java, C, C++, PHP, Ruby, Python, Perl) looking for features and best practices to optimize networking and build best performing, scalable and highly-available applications with Oracle Database 11g.


Session: 14702

Java in the Database—The Sky's the Limit: Lessons from the Largest Deployment

Where: Marriott Marquis - Salon 8 -- When: 10/3/11, 15:30

---


BoF Session: 26220

Meet the Oracle JDBC and Oracle Universal Connection Pool Development Team

Where: Marriott Marquis - Salon 8 -- When: 10/3/11, 18:30

---


BoF Session: 26240

Meet the Oracle Database Clients Developers: C, C++, PHP, Python, Ruby, and Perl

Where: Marriott Marquis - Salon 8 -- When: 10/3/11, 19:30

---

Hands-on Lab - Session: 30082

Develop and Deploy High-Performance Web 2.0 PHP, Ruby, or Python Applications

Where: Marriott Marquis - Salon 10/11 -- When: 10/3/11, 17:00

---

Session: 13360

Optimize Java Persistence/Scale Database Access with JDBC and Oracle Universal Connection Pool (UCP)

Where: Marriott Marquis - Salon 8 -- When: 10/4/11, 17:00

---

Hands-on-lab - Session: 30021

Efficient Java Persistence with JDBC, Java Universal Connection Pool, and Java in the Database

Where: Marriott Marquis - Salon 10/11 -- When: 10/4/11, 13:15

---

Session: 14345

Net Services: Best Practices for Performance, Scalability, and High Availability

Where: Moscone South - 303 -- When: 10/5/11, 13:15

---

Session: 14703

Build, Deploy, and Troubleshoot Highly Performant, Highly Available Apps with Oracle Database

Where: Moscone South - 303 -- When: 10/5/11, 17:00

---

Session: 14704

PHP, Ruby, Python, and Perl: Develop and Deploy Mission-Critical Apps with Oracle Database 11g

Where: Marriott Marquis - Salon 8 -- When: 10/5/11, 11:45



Pages