1 / 42

Migrating C++ Applications using OCCI

Learn how to migrate C++ applications to Oracle using the Oracle C++ Call Interface (OCCI). Explore object orientation in C++, Oracle C++ Call Interface overview, object access, and case studies.

fcarpenter
Télécharger la présentation

Migrating C++ Applications using OCCI

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bernhard DüchtingPrincipal Sales Consultant BU Database - Migration Oracle Germany

  2. Migrating C++ Applications using OCCI

  3. Agenda • Object Orientation and C++ • Oracle C++ Call Interface - Overview • Objects Access • Summary • Case Study - Using OCCI at CERN • Q & A

  4. Object Orientation with 9i • Native data types for collections • Definition of object types, object tables and object views • Explicit table inheritance using SQL-99 • Implicit inheritance using references (REF) • Overloading of object methods • Online schema evolution

  5. Object Orientation and C++ • Header files with object definition generated from object schema • No need for separate object-relational mapping • Object cache with pre-fetch capability for transient and persistent object management • Server-side object locking

  6. Steps for Migration • Determine object model and class hierarchy • Use JDeveloper 9i to map to Oracle object schema • Generate C++ header files using Oracle Type Translater (OTT) • Modify old C++ access classes as required to work with new object type definitions • Add functionality for transient and persistent object management as required

  7. OCCI Partners and Customers • A major GIS cartridge partner • High performance object-relational and spatial data access for national surveying system • A global power transmission manufacturer • Handle complex object-retrieval for graphical maintenance console • A global medical systems manufacturer • Replace ODBMS to manage patient image data • A national postal authority • Replacing third-party persistency framework

  8. Agenda • Object Orientation and C++ • Oracle C++ Call Interface - Overview • Objects Access • Summary • Case Study - Using OCCI at CERN • Q & A

  9. Oracle C++ Call Interface OCCI • Built on OCI • Similar control and performance of OCI • Based on Standards • ANSI/ISO C++ Standard, including STL • Associative access API design similar to JDBC • Performance • Prefetching, client-side cache, array operations, data buffering, thread safe • API easy to use • API design consistent with C++ programming paradigm (e.g. new operator overloaded for creating persistent objects)

  10. OCCI Basics • Setup of Environment and Connection • Executing SQL Statement • SQL statement • Prepared SQL statement with bind variables • Stored procedure • Executing SQL Query • Return multiple rows into result set • Use prefetching for performance • Seamless support of Oracle datatypes • varchar2 mapped to string, • collection mapped to vector STL

  11. OCCI Advanced Features • Connection Pooling • Improves scalability by multiplexing many logical connections over few physical connections • Optimal usage of physical connection resource • Connection pool shrinks and grows on demand • Thread Safety • OCCI handles mutexed access to shared resources • Array Operations • Insert/update multiple rows • Fetch multiple rows in one round-trip

  12. Example Session Environment *env=Environment::createEnvironment(Environment::OBJECT); RegisterMappings(env); Connection *conn=env->createConnection(“scott”,”tiger”,””); Statement *stmt=conn->createStatement(); ResultSet *resultSet=stmt->executeQuery(“select ref(t) from atable t where n=0”); if (ResultSet::DATA_AVAILABLE == resultSet->next()) { Ref<mytype> ref=resultSet->getRef(1); } conn->commit(); stmt->closeResultSet(resultSet); conn->terminateConnection(conn); Environment::terminateEnvironment(env); create/modify/delete objects

  13. Agenda • Object Orientation and C++ • Oracle C++ Call Interface - Overview • Objects Access • Summary • Case Study - Using OCCI at CERN • Q & A

  14. OCCI Object Features • Transparent access of database objects as C++ instances • Navigation of objects as simple as de-referencing smart-pointers • Client-side caching of C++ objects • Supports all 9i object features including inheritance • Oracle Type Translator (OTT) • Maps object types to C++ interface classes

  15. Client-side Object Cache • Memory Buffer for Objects • Transparent lookup and memory management support • Stores and tracks objects fetched from server to client side • Maintains references • Created when OCCI environment is initialized in object mode • Benefits • Reduces client/server round-trips • Object-level locking

  16. Accessing Objects • Unique Object Identifier OID • Navigational Interface • No SQL • Navigate using object references (REF) • Create/access/lock/delete/flush/commit • Associative Interface • Use SQL or PL/SQL • Data buffers, no cost of transporting data to client

  17. Representing Objects CREATE TYPE ADDRESS AS OBJECT ( state CHAR(2), zip CHAR(2)); • OTT generates: class ADDRESS : public PObject { // OCCI pre-defined class protected : string state; string zip; public : void *operator new(size_t size); // create a transient instance void *operator new(size_t size, Connection *conn, string& table); // create a persistent instance }

  18. Working with Objects I • Create new object • Use new operator • Transient or persistent objects • Fetch object from server • Pin object in cache using REF • Fetch object by value • Navigate to object • Use pinned object to traverse hierarchy • Only with referenceable objects

  19. Working with Objects II • Modify object • Make changes in C++ application • Mark persistent object as dirty • Flush changes to server • Commit transaction • Includes flushing dirty objects

  20. Oracle Object Cache Clientside cache Server buffer cache REF flush load Pin Network

  21. Agenda • Object Orientation and C++ • Oracle C++ Call Interface - Overview • Objects Access • Summary • Case Study - Using OCCI at CERN • Q & A

  22. Summary I • Oracle C++ Call Interface OCCI • Simple and easy • High-performance and Scalable API • Comprehensive support of Oracle Database features • Ideal choice for implementing high performance mid-tier applications • 9i Release 2 focus on performance

  23. Summary II • Easy migration of C++ applications • Determine UML class model • Import into Jdeveloper 9i • Re-model as required • Generate Oracle 9i object schema • Generate C++ header files with OTT • Modify C++ persistency classes as required

  24. Agenda • Object Orientation and C++ • Oracle C++ Call Interface - Overview • Objects Access • Summary • Case Study - Using OCCI at CERN • Q & A

  25. C A S E S T U D Y Using OCCI at CERN

  26. Overview • Brief introduction to CERN & LHC • Huge data volumes, long lifetime, Use of OO • Extensive experience with databases • Oracle since 1982; ODBMS since 1995 • Migration of existing applications • Complex C++ programs; • Up to 1000 classes; • Many KLOC - MLOC

  27. CERN – European Organization for Nuclear Research

  28. The LHC Machine

  29. Data R A W E S D A O D TAG 1TB/yr 10TB/yr 100TB/yr Tier1 1PB/yr (1PB/s prior to reduction!) Tier0 random seq. Users

  30. Overview • Brief introduction to CERN & LHC • Huge data volumes, long lifetime, OO • Extensive experience with databases • Oracle since 1982; ODBMS since 1995 • Migration of existing applications • Complex C++ programs; • Up to 1000 classes; • Many KLOC - MLOC

  31. CERN & Databases • Oracle brought in for construction of previous accelerator • 1982; LEP – 27km ring 100m underground • Now pervasive through-out work of lab • Early 1990s: move to object orientated approach for “physics applications” • Extensive experience with Object Databases • Until end 2001, baseline choice for multi-PB requirements of LHC • Production experience with ODBMS up to ~100TB • cf SLAC/BaBar 500TB system • Requirement for LHC: 100PB system (all data)

  32. Overview • Brief introduction to CERN & LHC • Huge data volumes, long lifetime, OO • Extensive experience with databases • Oracle since 1982; ODBMS since 1995 • Migration of existing applications • Complex C++ programs; • Up to 1000 classes; • Many KLOC – MLOC • Exploit associative and navigational access

  33. OCCI / OTT Functionality • CERN has worked closely with Oracle since prior to Oracle 9i announcement on OCCI/OTT functionality, interfaces, implementation etc • Active partner in 9iR1 & 9iR2 Beta program • Happy to confirm that required functionality & product stability are available in 9iR2

  34. Migration of Existing Apps (I) • Detector Conditions Database • Previously implemented on ODBMS • Same user interface re-implemented using OCCI • Client based on associative access • No changes to user code! (Except connect string) • Complete re-design of underlying data model • Implemented using pure relational model • Uses partitioned tables; materialized views; stored procedures; indexes; … • One of several applications for production 9iRAC service being setup at CERN • Other similar applications foreseen • Grid replica catalogue, production control DB, …

  35. Migration of Existing Apps (II) • Take existing large C++ application • Strip out ODBMS-based persistency layer • Replace with OCCI using navigational access • Strong requirements from both user & developer point of view: • C++ Developer: • No change to object model & classes • User: • No change to application

  36. CMS Offline Software – its big!

  37. Functionality tests (I) Tests of basic components • Simple objects • Compound objects • Contain other user types as attributes • Inheritance • Composition by reference • Collections by value & reference (II) Full object models • Exploits all above features • Stresses client-side object cache & navigation

  38. CMS Migration • Independent module developed to handle DB interface • Oracle or ODBMS • Modification of the application and the implementation of the independent module totaled several hundreds of lines of code • No other code was modified! • From user application level … users are not aware of the change

  39. Conclusions • OCCI offers powerful persistency mechanisms for C++ applications • Both associative & navigational access supported • Full power of database still available • Significant benefit over conventional ODBMS • Migration of complex applications proven • Achieved with no change to user code

  40. Q & Q U E S T I O N S A N S W E R S A

More Related