19
Experiences with Evangelizing Java Within the Database

Experiences with Evangelizing Java Within the Database

Embed Size (px)

DESCRIPTION

Experiences with Evangelizing Java Within the Database Oracle OpenWorld San Francisco 2013

Citation preview

Page 1: Experiences with Evangelizing Java Within the Database

Experiences with Evangelizing Java Within the Database

Page 2: Experiences with Evangelizing Java Within the Database

About

● About me– CTO at Scotas.com

– Founder of the ArOUG

– ACE Member since 2006

– Open Source Developer (DBPrism/ DBPrism CMS, LDI, ...)

– Oracle developer since 1999

● About Scotas– A company specialized in free text search, synchronization

and Oracle

– OLS, Native Solr integration

– External Solr/ ElasticSearch integration

www.scotas.com

Page 3: Experiences with Evangelizing Java Within the Database

www.scotas.com

Agenda

– Database resident JVM

– History of the JVM implementation

– Evangelizing about Database resident JVM● Experience during

– Developing– Testing– Deploying

● Examples

– Conclusion

Page 4: Experiences with Evangelizing Java Within the Database

Database resident JVM time-line

● 8i (1999, JDK1.2, JSP, ORB, NCOMP)● 9i (2001, JDK 1.3, NCOMP)● 10g (2003 R1, 2005 R2, JDK 1.4, NCOMP)● 11g (2007, JDK 1.5, JIT)● 12c (2013, JDK 1.6/1.7/.., JIT)

www.scotas.com

Page 5: Experiences with Evangelizing Java Within the Database

Database resident JVM architecture

www.scotas.com

Components

Page 6: Experiences with Evangelizing Java Within the Database

Sun’s JDK versus Database resident JVM

Sun’s JDK VM● Thread Based

● Sharing across Threads

● Limited Scalability

● Classes in file system

● Resolve classes with “Classpath”

● JIT

● Preemptive multi-threading

● Limited Robustness (process failure)

Database resident JVM● Database Session Model

● Session Isolation● Unlimited Scalability● Classes in database● Resolve classes with

“Resolver Spec”● JIT (11g and up)● Non-Preemptive multi-

threading● Does not crash as a whole

www.scotas.com

Page 7: Experiences with Evangelizing Java Within the Database

Oracle’s Commitment to OJVM

● Used by a growing number of database customers acording to Oracle

● Used by Oracle Components

– InterMedia– Spatial– Text– XQuery (XMLDB)– WareHouse Builder– CDC (Change Data Capture)– ODM (Oracle Data Mining analytics functions)

● 12c Enhancements

www.scotas.com

Page 8: Experiences with Evangelizing Java Within the Database

● Many among Fortune 500 companies● Some examples from

“Java in the Oracle Database @ Work – Customer Case Studies”

● And for sure Scotas & Cima

Who is Using OJVM

www.scotas.com

Page 9: Experiences with Evangelizing Java Within the Database

Java in the Database: What For

www.scotas.com

● Trigger-based Notification System using RMI

● Secure Credit-Card Processing using JSSE

● Custom Alert applications that monitor business data

● Sending emails with attachment from within the database

● Produce PDF files from Result Set● Execute external OS commands and

external procedures● Implement Md5 CRC● Publish Repository Content to Portal● Portable Logistic Applications

● Implement Parsers for various File Formats (txt, zip, xml, binary)

● Implement Image Transformation and Format Conversion (GIF, PNG, JPEG, etc)

● Implement Database-resident Content Management System

● HTTP Call-Out● JDBC Call-Out● RMI Call-Out to SAP● Web Services Call-Out● Messaging across Tiers● RESTful Database Web Services● Near Real Time Full Text Search

Page 10: Experiences with Evangelizing Java Within the Database

Evangelizing Java Within the Database

www.scotas.com

Experiences in:

Page 11: Experiences with Evangelizing Java Within the Database

Experiences during development

● Basically any Java IDE works, but● JDeveloper is better:

– Database integration● Database navigator● Database reports● Find objects● DBMS_OUTPUT

– Database resident Java Class browser– Remote debugger

● Use $ORACLE_HOME/jdk for compilling● Use library dependencies $ORACLE_HOME:

– javavm/lib/ (database resident JVM implemenetation Aurora)– rdbms/jlib/ (database resident APIs such as ODCI, XDB, Servlet)– jdk/lib/ (properly JDK specific libs)– lib/ (Oracle functionalities such as XML Parser)– jdbc/lib (Oracle JDBC implementation)

● If you have problem with target JDK, Retro-translator is your friend

www.scotas.com

Page 12: Experiences with Evangelizing Java Within the Database

Experiences during testing

● There is no visual feedback (Java headless)● Code could be tested in an external JVM encapsulating your

JDBC connection funtionality● Use a logging framework

– Java Util Logging works (JUL)– Apache Log4J works (more funtionality)– Usually logging information goes to .trc files

● Use JDeveloper for remote debugging (dbms_debug_jdwp)● Incorporate JUnit integration

– Class loader issues– Security concerns

www.scotas.com

Page 13: Experiences with Evangelizing Java Within the Database

Experiences during deployment

● Incorporate Ant or Maven

– One sentence deployment– DBA likes scripts for installing– Imagine you are deploying your apps in a Datacenter

using ssh● Use NCOMP with DB version < 11g● Important!!! name your libraries with version numbers

major.minor.patch● Allways incorporate version control (SVN, CVS, GIT)● Write many test suites● Size your Database resident memory areas properly

www.scotas.com

Page 14: Experiences with Evangelizing Java Within the Database

Examples – DBPrism CMS

● At the time of PSP (formerly HTMLDB, WebDB, Apex..)● Using DBPrism connector example for the Book

Profesional XML Databases● Develop as an example for the Book

Oracle Database Programming using Java and Web Services● Presented at Second Open Source Content Management

Conference , Berkeley, CA● A CMS working as Java Stored Procedures● Using Apache Cocoon as presentation framework● Using Struts's controller idea, view (XQuery pages),

Controller (Java Stored Procedures)● Exploring many XMLDB functionalities (XQuery, XSL,

Oracle Text, ...)

www.scotas.com

Page 15: Experiences with Evangelizing Java Within the Database

Examples – RESTFul Web Services

● An Extension to restlet.org project● A Java Servlet Connector for XMLDB● Incorporated to the code base of OSS Project● Allows user to write RESTFul Web Services in Java● Connection are accepted directly by Oracle Listener● Many connections spawn several parallel shared servers● Java reflection was used to avoid static dependency to

propietary API● Main problem found was Servlet 2.2 API support into XMLDB,

still the same in 12c● Allows remote debugging of RESTFul implementation (

dbms_debug_jdwp)

www.scotas.com

Page 16: Experiences with Evangelizing Java Within the Database

Examples - Scotas OLS

www.scotas.com

● An Embedded version of Solr Framework running inside Oracle JVM● 42 new Java Classes and several new PLSQL Object Types● Four new SQL operators scontains(), sscore(), smlt(), shighlight() and poweful text analysis functionalities

● An orthogonal/up-to-date Solr solution for any programming language, especially Java, Ruby, Python, PHP and .Net, currently latest production version – 4.0.0.

● Available to any Oracle product such as BI, Apex, ODM

create index esl_events_sidx on esl_events(message) indextype is Lucene.SolrIndexparameters('SyncMode:Deferred;MltColumn:text;HighlightColumn:title;DefaultColumn:text;CommitOnSync:true;ExtraTabs:ESL.esl_causes c;WhereCondition:L$MT.event_id=c.event_id(+);ExtraCols:.....') local parallel 2;

create index esl_events_sidx on esl_events(message) indextype is Lucene.SolrIndexparameters('SyncMode:Deferred;MltColumn:text;HighlightColumn:title;DefaultColumn:text;CommitOnSync:true;ExtraTabs:ESL.esl_causes c;WhereCondition:L$MT.event_id=c.event_id(+);ExtraCols:.....') local parallel 2;

select /*+ DOMAIN_INDEX_SORT */ sscore(1),shighlight(1),message from esl_events where scontains(message,'severity_s:(ERROR INFO) AND springframework',1)>0 and gen_day between 26 and 27;

select /*+ DOMAIN_INDEX_SORT */ sscore(1),shighlight(1),message from esl_events where scontains(message,'severity_s:(ERROR INFO) AND springframework',1)>0 and gen_day between 26 and 27;

Page 17: Experiences with Evangelizing Java Within the Database

Conclusions

● Open Source projects

– Release early, release often (to attract contributors, see Hadoop version 0.20)

– Due to Oracle License limitation we can not incorporate OSS code in main branch, Examples DBPrism Adapter, Restlet Adapter)

– Loading OSS libraries into the RDBMS is not well views by DBAs● Corporate projects

– Impedance mistmatch● DBA don't have Java skills● Java Developers don't have DBA skills● PLSQL Developer don't have OO skills

– Architects don't really know database resident potentiality– Same challenges are now by incorporating Hadoop in Oracle projects

www.scotas.com

Page 18: Experiences with Evangelizing Java Within the Database

Answers!

www.scotas.com | [email protected] | +1 (650) 704-7915 | 440 North Wolfe Road, Sunnyvale, CA 94085

Page 19: Experiences with Evangelizing Java Within the Database

Thank You!

www.scotas.com | [email protected] | +1 (650) 704-7915 | 440 North Wolfe Road, Sunnyvale, CA 94085