experiences with evangelizing java within the database

19
Experiences with Evangelizing Java Within the Database

Upload: marcelo-ochoa

Post on 22-May-2015

123 views

Category:

Software


3 download

DESCRIPTION

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

TRANSCRIPT

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