SlideShare a Scribd company logo
<Insert Picture Here>




          A General Extension System for Event Processing Languages
          Alexandre Alves - Oracle CEP




Monday, July 11, 2011
Agenda                                                   DEBS2011



        • Scenario 1
              •   String manipulation (programming-in-the-small)
        • Blending CQL and Java
        • Architecture
        • Scenario 2            Text
              •   Geo-fence (extensibility)
        • Blending CQL and Spatial
        • Architecture
        • Q/A




Monday, July 11, 2011
Scenario 1:                                   DEBS2011
          Programming-in-the-small

        • Correlate security price changes to real-time event
          news.



                                  Text




Monday, July 11, 2011
Scenario 1:                   DEBS2011
          Programming-in-the-small
                                     Oracle CQL
                                     Processor

           SELECT *
           FROM            Text
           news [RANGE 1 HOUR],
           stock_tick [RANGE 1 HOUR]
           WHERE /* join-criteria */



Monday, July 11, 2011
Scenario 1:                                                   DEBS2011
          Programming-in-the-small

        • Problem: the NEWS feed is a unstructured (String),
          hence not trivial to identify its event properties
              •   For example, a naive join criteria is to look for a stock’s
                  symbol
        • The problem of parsing a String can be solved using
          Regular Expressions. Text
        • Regular Expressions and other programming-in-the-
          small tasks have long been solved by general
          purpose programming languages
        • Can we leverage this within an event processing
          language (e.g. CQL)?



Monday, July 11, 2011
Java Regular Expressions                                       DEBS2011



        • Let’s look at a simple solution to the problem using
          Java:


               Matcher matcher =
                                             Text
                    Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher
                    (message);
               if (matcher.find()) {
                                                                             Matches three letter
                symbol = message.substring(matcher.start() + 1,              symbols, separated by
                                                                             leading and trailing
                    matcher.end() - 1));                                     white-spaces
               }




Monday, July 11, 2011
Blending CQL with Java                                      DEBS2011



       CREATE VIEW filtered_news(message, matcher) AS
       SELECT
        message,
        Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message) as
       matcher
       FROM news [RANGE 1 HOUR] Text

       SELECT
        location, item_description, message
       FROM filtered_news, stock_tick[RANGE 1 HOUR]
       WHERE
        matcher.find() = true AND
        filtered_news.message.substring(matcher.start() + 1,
          matcher.end() - 1) = stock_tick.symbol



Monday, July 11, 2011
Blending CQL with Java                                     DEBS2011
                                                                 CQL char conversion
                                                                 to Java String

       CREATE VIEW filtered_news(message, matcher) AS
       SELECT
        message,
        Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message) as matcher
       FROM news [RANGE 1 HOUR]
                                          Text
       SELECT
        location, item_description, message                      Method invocation
       FROM filtered_news, stock_tick[RANGE 1 HOUR]
       WHERE
        matcher.find() = true AND                                Static method
        filtered_news.message.substring(matcher.start() + 1,     invocation
          matcher.end() - 1) = stock_tick.symbol




Monday, July 11, 2011
Blending CQL with Java                                     DEBS2011


                                                                 ‘matcher’ is a Java
                                                                 Object, and treated as
       CREATE VIEW filtered_news(message, matcher) AS
                                                                 a complex type by
       SELECT                                                    CQL
        message,
        Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message) as matcher
       FROM news [RANGE 1 HOUR]
                                          Text
       SELECT                                                     Overload of CQL ‘+’
        location, item_description, message                      operator to handle
       FROM filtered_news, stock_tick[RANGE 1 HOUR]              Java Integer
       WHERE
        matcher.find() = true AND                                Overload of CQL
        filtered_news.message.substring(matcher.start() + 1,     equality to handle
          matcher.end() - 1) = stock_tick.symbol                 Java String




Monday, July 11, 2011
Architecture                                                    DEBS2011




                  Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher
                  Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message)
                  (message)
        • Is this symbol:
              •                              Text
                   A stream attribute (e.g. message)?
              •    A stream alias (e.g. FROM S1 as A)
              •    A CQL function (e.g. SELECT myfunc())
              •    The l-value of complex type (e.g. myObj.myMethod())
              •    A constructor
              •    A (static) method
              •    A class name




Monday, July 11, 2011
Architecture                                                  DEBS2011




                Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher
                Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message)
                (message)
        • To be able to semantically compile symbols, we need
          to have type information.Text
        • However, CQL is not aware of Java, nor should it be.
        • There is a need of a generic type-system, and an
          extension model for providers to plug-in their own
          languages




Monday, July 11, 2011
Architecture                                   DEBS2011



                        CQL    Parser




                              Semantic         Type
                              Analyzer        Registry

                              Text

                                Code
                              Generator   Java
                                          Type-System




                               Code
                              Executor




Monday, July 11, 2011
Architecture                                                      DEBS2011




                Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher
                Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message)
                (message)

                                                              ComplexType

                 “Pattern”
                                             Text
                                          Type               fields
                                         Registry
                                                             methods




                                     Java
                                     Type-System




Monday, July 11, 2011
Architecture                                                      DEBS2011




                                                 ComplexType
                                                fields
    “Pattern”                Type
                            Registry
                                                methods



                                       Text
                        Java
                        Type-System

                                         CQL deals with a ‘complex type’ abstraction, and
                                         does not know of its ‘Java Language’ binding.




Monday, July 11, 2011
Architecture                                                  DEBS2011




                Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher
                Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message)
                (message)
                        Pattern
                  ComplexType
                 fields                      Text
                                         Find a “compile” method and its return type
                 methods




Monday, July 11, 2011
Architecture                                                   DEBS2011




                Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message)


              Pattern                  Matcher
          ComplexType               ComplexType  Text
         fields                     fields                    Store ‘matcher’ as
         methods                   methods                  a stream/view attribute




Monday, July 11, 2011
Architecture                                                                      DEBS2011


                                             Extensible Language

                                              stream 1     *   attribute                      Type
                                                                           <<is-of>>



     ‘matcher’ is an attribute of the view
     of type ‘java.util.regex.Matcher’                                                   ComplexType


                                                  Text                                 <<metadata binding>>




                                                                               Extension Java Language

 CREATE VIEW filtered_news(message, matcher)
                                                                                          Java Class




Monday, July 11, 2011
Extensibility                                                          DEBS2011


                                  Extensible Language

                                   stream 1     *   attribute                      Type
                                                                <<is-of>>




                                                                              ComplexType


                                       Text                                 <<metadata binding>>




           How do we know which                                     Extension Java Language

           ‘language extension’ to use?
           How to provide new                                                  Java Class

           extensions?




Monday, July 11, 2011
Scenario 2:                                                   DEBS2011
          Spatial Integration

        • Targeted marketing for a mobile subscriber
              •   CEP application checks if the location of the subscriber is
                  within the distance of a registered shop


                                           Text
                                            Text


                                                               Oracle Spatial
                                                                    Shop
                                                            id: CHAR
                                                            geometry: SDO_GEOMETRY




Monday, July 11, 2011
Blending CQL with Spatial                                   DEBS2011




      CREATE VIEW CustomerLocation-Stream(point, custId) AS
      SELECT createPoint@spatial(lng, lat) as point, custId
      FROM Location-Stream
                                                              point is a spatial type
      SELECT loc.custId, shop.id         Text
      FROM
       CustomerLocation-Stream[NOW] AS loc, Shop as shop
      WHERE
       contain@spatial(shop.geometry, loc.point, 2.0d)   ‘spatial’ link points to
                                                              Oracle Spatial
                                                              ‘extension’, where
                                                              ‘contain’ function
                                                              resides




Monday, July 11, 2011
Architecture                                         DEBS2011



                                                       CQL
     CQL link specifies language
     extension, which are plugged
     into the system as a CQL
     cartridge

                                        Text                 <<link>>


                                                   CQL Cartridge
                                                      Cartridge


 contain@spatial(shop.geometry, loc.point, 2.0d)




Monday, July 11, 2011
Conclusion                                     DEBS2011



        • Blending of CQL with other languages allow for the
          creation of feature-rich CEP applications while still
          being highly descriptive
              •   Example:
                   • String manipulation using Java
                                          Text
                   • Geo-fencing using Oracle Spatial
        • Generic frameworks allows for the dynamic plugin of
          extensions (cartridges)




Monday, July 11, 2011

More Related Content

PPTX
BASTA 2013: Custom OData Provider
KEY
L0033 - JFace
PDF
JavaFX and Scala in the Cloud: Stephen Chin
PPTX
JavaOne 2012 - CON11234 - Multi device Content Display and a Smart Use of Ann...
PDF
JQuery
ODP
Modular programming Using Object in Scala
PDF
Lesson03 学会使用单行函数
PDF
XML Quick Reference (from mulberrytech.com)
BASTA 2013: Custom OData Provider
L0033 - JFace
JavaFX and Scala in the Cloud: Stephen Chin
JavaOne 2012 - CON11234 - Multi device Content Display and a Smart Use of Ann...
JQuery
Modular programming Using Object in Scala
Lesson03 学会使用单行函数
XML Quick Reference (from mulberrytech.com)

What's hot (18)

PDF
Vba functions
PPT
Bean Intro
PPTX
Xml session
PDF
Go Faster With Native Compilation
PDF
Go faster with_native_compilation Part-2
PPTX
Java Beans
PPTX
JavaFX and Scala in the Cloud
PDF
Extending the Xbase Typesystem
PDF
PPTX
Java Beans Unit 4(Part 1)
PDF
Introduction to JPA and Hibernate including examples
PPT
En webinar jpa v2final
PDF
Sdtl manual
PDF
Modul Praktek Java OOP
PPSX
Oop features java presentationshow
PDF
Autonomous transaction
PDF
iOS overview
Vba functions
Bean Intro
Xml session
Go Faster With Native Compilation
Go faster with_native_compilation Part-2
Java Beans
JavaFX and Scala in the Cloud
Extending the Xbase Typesystem
Java Beans Unit 4(Part 1)
Introduction to JPA and Hibernate including examples
En webinar jpa v2final
Sdtl manual
Modul Praktek Java OOP
Oop features java presentationshow
Autonomous transaction
iOS overview
Ad

Viewers also liked (20)

PDF
Dealing with growing social demands in the mining industry
PPTX
Englekirk Brochure
PDF
Notam 01-01-17
PDF
Plant Healthcare Client Report
PDF
Discussion continuum - Dostep do leczenia
PDF
Assignment 4 - Certification in Dispute Management
PPT
Multimedia01
PDF
Notam 05 02-16
PDF
Kudavi 1.26.2016
PDF
Egoera: La economía de Bizkaia - Marzo 2016 - nº21
PPTX
Conversation01
PPTX
Традо питание по дошам
ODP
Intravert Server side processing for Cassandra
PPTX
Training company une partnerships
PDF
Mm wcmc v12
PDF
하비인사업계획서0624홍보
PPT
An Ounce of Prevention
PPT
Umbrella campaign
PDF
Desejo sexual com mais de 45 anos
Dealing with growing social demands in the mining industry
Englekirk Brochure
Notam 01-01-17
Plant Healthcare Client Report
Discussion continuum - Dostep do leczenia
Assignment 4 - Certification in Dispute Management
Multimedia01
Notam 05 02-16
Kudavi 1.26.2016
Egoera: La economía de Bizkaia - Marzo 2016 - nº21
Conversation01
Традо питание по дошам
Intravert Server side processing for Cassandra
Training company une partnerships
Mm wcmc v12
하비인사업계획서0624홍보
An Ounce of Prevention
Umbrella campaign
Desejo sexual com mais de 45 anos
Ad

Similar to A General Extension System for Event Processing Languages (20)

PDF
Clojure talk at Münster JUG
PDF
Clojure for Java developers
PDF
scalaliftoff2009.pdf
PDF
scalaliftoff2009.pdf
PDF
scalaliftoff2009.pdf
PDF
scalaliftoff2009.pdf
PDF
JavaScript Editions ES7, ES8 and ES9 vs V8
PPTX
An overview of java script in 2015 (ecma script 6)
PDF
Seeking Clojure
PDF
Clojure made-simple - John Stevenson
ODP
Clojure
PDF
Clojure - An Introduction for Java Programmers
PPT
Reactive cocoa
PDF
ICSM07.ppt
PDF
An Introduction to Scala - Blending OO and Functional Paradigms
PDF
Kings 120711
PDF
Clojure - A new Lisp
PPTX
Introduction To Programming In R for data analyst
PPT
PPT
Sql Summit Clr, Service Broker And Xml
Clojure talk at Münster JUG
Clojure for Java developers
scalaliftoff2009.pdf
scalaliftoff2009.pdf
scalaliftoff2009.pdf
scalaliftoff2009.pdf
JavaScript Editions ES7, ES8 and ES9 vs V8
An overview of java script in 2015 (ecma script 6)
Seeking Clojure
Clojure made-simple - John Stevenson
Clojure
Clojure - An Introduction for Java Programmers
Reactive cocoa
ICSM07.ppt
An Introduction to Scala - Blending OO and Functional Paradigms
Kings 120711
Clojure - A new Lisp
Introduction To Programming In R for data analyst
Sql Summit Clr, Service Broker And Xml

More from Alexandre de Castro Alves (7)

PDF
A Guideline to Statistical and Machine Learning
PDF
Developing Modular Systems using OSGi
PDF
Speeding up big data with event processing
PDF
Bpel4 Ws 1.1 To Ws Bpel 2.0
PDF
Introduction to OSGi
PDF
Alves Mea Pch1 Free
A Guideline to Statistical and Machine Learning
Developing Modular Systems using OSGi
Speeding up big data with event processing
Bpel4 Ws 1.1 To Ws Bpel 2.0
Introduction to OSGi
Alves Mea Pch1 Free

Recently uploaded (20)

PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPT
Teaching material agriculture food technology
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
A Presentation on Artificial Intelligence
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
KodekX | Application Modernization Development
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Empathic Computing: Creating Shared Understanding
Per capita expenditure prediction using model stacking based on satellite ima...
Mobile App Security Testing_ A Comprehensive Guide.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
NewMind AI Monthly Chronicles - July 2025
Building Integrated photovoltaic BIPV_UPV.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Big Data Technologies - Introduction.pptx
Electronic commerce courselecture one. Pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Teaching material agriculture food technology
“AI and Expert System Decision Support & Business Intelligence Systems”
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
The AUB Centre for AI in Media Proposal.docx
A Presentation on Artificial Intelligence
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
KodekX | Application Modernization Development
Advanced methodologies resolving dimensionality complications for autism neur...
Digital-Transformation-Roadmap-for-Companies.pptx
Empathic Computing: Creating Shared Understanding

A General Extension System for Event Processing Languages

  • 1. <Insert Picture Here> A General Extension System for Event Processing Languages Alexandre Alves - Oracle CEP Monday, July 11, 2011
  • 2. Agenda DEBS2011 • Scenario 1 • String manipulation (programming-in-the-small) • Blending CQL and Java • Architecture • Scenario 2 Text • Geo-fence (extensibility) • Blending CQL and Spatial • Architecture • Q/A Monday, July 11, 2011
  • 3. Scenario 1: DEBS2011 Programming-in-the-small • Correlate security price changes to real-time event news. Text Monday, July 11, 2011
  • 4. Scenario 1: DEBS2011 Programming-in-the-small Oracle CQL Processor SELECT * FROM Text news [RANGE 1 HOUR], stock_tick [RANGE 1 HOUR] WHERE /* join-criteria */ Monday, July 11, 2011
  • 5. Scenario 1: DEBS2011 Programming-in-the-small • Problem: the NEWS feed is a unstructured (String), hence not trivial to identify its event properties • For example, a naive join criteria is to look for a stock’s symbol • The problem of parsing a String can be solved using Regular Expressions. Text • Regular Expressions and other programming-in-the- small tasks have long been solved by general purpose programming languages • Can we leverage this within an event processing language (e.g. CQL)? Monday, July 11, 2011
  • 6. Java Regular Expressions DEBS2011 • Let’s look at a simple solution to the problem using Java: Matcher matcher = Text Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher (message); if (matcher.find()) { Matches three letter symbol = message.substring(matcher.start() + 1, symbols, separated by leading and trailing matcher.end() - 1)); white-spaces } Monday, July 11, 2011
  • 7. Blending CQL with Java DEBS2011 CREATE VIEW filtered_news(message, matcher) AS SELECT message, Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message) as matcher FROM news [RANGE 1 HOUR] Text SELECT location, item_description, message FROM filtered_news, stock_tick[RANGE 1 HOUR] WHERE matcher.find() = true AND filtered_news.message.substring(matcher.start() + 1, matcher.end() - 1) = stock_tick.symbol Monday, July 11, 2011
  • 8. Blending CQL with Java DEBS2011 CQL char conversion to Java String CREATE VIEW filtered_news(message, matcher) AS SELECT message, Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message) as matcher FROM news [RANGE 1 HOUR] Text SELECT location, item_description, message Method invocation FROM filtered_news, stock_tick[RANGE 1 HOUR] WHERE matcher.find() = true AND Static method filtered_news.message.substring(matcher.start() + 1, invocation matcher.end() - 1) = stock_tick.symbol Monday, July 11, 2011
  • 9. Blending CQL with Java DEBS2011 ‘matcher’ is a Java Object, and treated as CREATE VIEW filtered_news(message, matcher) AS a complex type by SELECT CQL message, Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message) as matcher FROM news [RANGE 1 HOUR] Text SELECT Overload of CQL ‘+’ location, item_description, message operator to handle FROM filtered_news, stock_tick[RANGE 1 HOUR] Java Integer WHERE matcher.find() = true AND Overload of CQL filtered_news.message.substring(matcher.start() + 1, equality to handle matcher.end() - 1) = stock_tick.symbol Java String Monday, July 11, 2011
  • 10. Architecture DEBS2011 Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message) (message) • Is this symbol: • Text A stream attribute (e.g. message)? • A stream alias (e.g. FROM S1 as A) • A CQL function (e.g. SELECT myfunc()) • The l-value of complex type (e.g. myObj.myMethod()) • A constructor • A (static) method • A class name Monday, July 11, 2011
  • 11. Architecture DEBS2011 Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message) (message) • To be able to semantically compile symbols, we need to have type information.Text • However, CQL is not aware of Java, nor should it be. • There is a need of a generic type-system, and an extension model for providers to plug-in their own languages Monday, July 11, 2011
  • 12. Architecture DEBS2011 CQL Parser Semantic Type Analyzer Registry Text Code Generator Java Type-System Code Executor Monday, July 11, 2011
  • 13. Architecture DEBS2011 Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message) (message) ComplexType “Pattern” Text Type fields Registry methods Java Type-System Monday, July 11, 2011
  • 14. Architecture DEBS2011 ComplexType fields “Pattern” Type Registry methods Text Java Type-System CQL deals with a ‘complex type’ abstraction, and does not know of its ‘Java Language’ binding. Monday, July 11, 2011
  • 15. Architecture DEBS2011 Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message) (message) Pattern ComplexType fields Text Find a “compile” method and its return type methods Monday, July 11, 2011
  • 16. Architecture DEBS2011 Pattern.compile("[.,; ][A-Z][A-Z][A-Z][.,; ]").matcher(message) Pattern Matcher ComplexType ComplexType Text fields fields Store ‘matcher’ as methods methods a stream/view attribute Monday, July 11, 2011
  • 17. Architecture DEBS2011 Extensible Language stream 1 * attribute Type <<is-of>> ‘matcher’ is an attribute of the view of type ‘java.util.regex.Matcher’ ComplexType Text <<metadata binding>> Extension Java Language CREATE VIEW filtered_news(message, matcher) Java Class Monday, July 11, 2011
  • 18. Extensibility DEBS2011 Extensible Language stream 1 * attribute Type <<is-of>> ComplexType Text <<metadata binding>> How do we know which Extension Java Language ‘language extension’ to use? How to provide new Java Class extensions? Monday, July 11, 2011
  • 19. Scenario 2: DEBS2011 Spatial Integration • Targeted marketing for a mobile subscriber • CEP application checks if the location of the subscriber is within the distance of a registered shop Text Text Oracle Spatial Shop id: CHAR geometry: SDO_GEOMETRY Monday, July 11, 2011
  • 20. Blending CQL with Spatial DEBS2011 CREATE VIEW CustomerLocation-Stream(point, custId) AS SELECT createPoint@spatial(lng, lat) as point, custId FROM Location-Stream point is a spatial type SELECT loc.custId, shop.id Text FROM CustomerLocation-Stream[NOW] AS loc, Shop as shop WHERE contain@spatial(shop.geometry, loc.point, 2.0d) ‘spatial’ link points to Oracle Spatial ‘extension’, where ‘contain’ function resides Monday, July 11, 2011
  • 21. Architecture DEBS2011 CQL CQL link specifies language extension, which are plugged into the system as a CQL cartridge Text <<link>> CQL Cartridge Cartridge contain@spatial(shop.geometry, loc.point, 2.0d) Monday, July 11, 2011
  • 22. Conclusion DEBS2011 • Blending of CQL with other languages allow for the creation of feature-rich CEP applications while still being highly descriptive • Example: • String manipulation using Java Text • Geo-fencing using Oracle Spatial • Generic frameworks allows for the dynamic plugin of extensions (cartridges) Monday, July 11, 2011