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
Database resident JVM architecture www.scotas.com Components
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
Evangelizing Java Within the Database www.scotas.com Experiences in:
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.SolrIndex parameters('SyncMode:Deferred;MltColumn:text;HighlightColumn:title;DefaultColumn:text;Co mmitOnSync: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.SolrIndex parameters('SyncMode:Deferred;MltColumn:text;HighlightColumn:title;DefaultColumn:text;Co mmitOnSync: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 | info@scotas.com | +1 (650) 704-7915 | 440 North Wolfe Road, Sunnyvale, CA 94085
Thank You! www.scotas.com | info@scotas.com | +1 (650) 704-7915 | 440 North Wolfe Road, Sunnyvale, CA 94085

Experiences with Evangelizing Java Within the Database

  • 1.
    Experiences with EvangelizingJava Within the Database
  • 2.
    About ● About me – CTOat 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
  • 3.
    www.scotas.com Agenda – Database residentJVM – History of the JVM implementation – Evangelizing about Database resident JVM ● Experience during – Developing – Testing – Deploying ● Examples – Conclusion
  • 4.
    Database resident JVMtime-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
  • 5.
    Database resident JVMarchitecture www.scotas.com Components
  • 6.
    Sun’s JDK versusDatabase 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
  • 7.
    Oracle’s Commitment toOJVM ● 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
  • 8.
    ● Many among Fortune500 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
  • 9.
    Java in theDatabase: 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
  • 10.
    Evangelizing Java Withinthe Database www.scotas.com Experiences in:
  • 11.
    Experiences during development ● Basicallyany 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
  • 12.
    Experiences during testing ● Thereis 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
  • 13.
    Experiences during deployment ● IncorporateAnt 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
  • 14.
    Examples – DBPrismCMS ● 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
  • 15.
    Examples – RESTFulWeb 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
  • 16.
    Examples - ScotasOLS 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.SolrIndex parameters('SyncMode:Deferred;MltColumn:text;HighlightColumn:title;DefaultColumn:text;Co mmitOnSync: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.SolrIndex parameters('SyncMode:Deferred;MltColumn:text;HighlightColumn:title;DefaultColumn:text;Co mmitOnSync: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;
  • 17.
    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
  • 18.
    Answers! www.scotas.com | info@scotas.com| +1 (650) 704-7915 | 440 North Wolfe Road, Sunnyvale, CA 94085
  • 19.
    Thank You! www.scotas.com | info@scotas.com| +1 (650) 704-7915 | 440 North Wolfe Road, Sunnyvale, CA 94085