experiences with evangelizing java within the database
DESCRIPTION
Experiences with Evangelizing Java Within the Database Oracle OpenWorld San Francisco 2013TRANSCRIPT
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
www.scotas.com
Agenda
– Database resident JVM
– History of the JVM implementation
– Evangelizing about Database resident JVM● Experience during
– Developing– Testing– Deploying
● Examples
– Conclusion
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
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
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
● 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
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
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
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
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
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
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
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;
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
Answers!
www.scotas.com | [email protected] | +1 (650) 704-7915 | 440 North Wolfe Road, Sunnyvale, CA 94085
Thank You!
www.scotas.com | [email protected] | +1 (650) 704-7915 | 440 North Wolfe Road, Sunnyvale, CA 94085