Title: Dia 1
1Oracle in Open Source Projects
Berry van Halderen b.vanhalderen_at_hippo.nl
2Outline
- About Hippo
- Architecture Hippo software and open source
- The storage problem for (open source) software
packages - Interoperability and standards
- JCR and JPA/JDO
- How this ties into Hippo and Oracle
3About Hippo
- Hippo develops and provides services for its
- Content Management System (CMS)
- Develop Open Source software
- Participate in open standards
- Web and Java-based content software
- Hippo works directly for customers, but wants to
focus as software company.
4Just a glance...
5The advantages of being open
- Customers have ensure maintainability
- Base software developed by more than one company
- Can provide confidence of correctness and checks
- Allows customer or third party extensions
- More modularized applications
- Better interoperability
- No free lunch, still requires support and
customization
6Architecture
- Central repository delivering common
functionalities - Applications are CMS, websites, ...
7Architecture
- All applications, even CMS are just web
applications - Central repository delivering common functions
- Get, retrieve, search documents
- Versioning
- Workflow
- Hierarchical storage
- Typed and unstructured data
- Locking
- Repository itself persists into files, databases,
etcetera - All communication and storage should be performed
using the central repository
8Why a repository?
- Extended, application domain specific
functionality, needed. - SQL 'standard' to diverse and generic for single
software base to work.
Repository uses simple database model and
filesystem to store data. Because all
applications use repository as storage, back-end
specific storage is hidden. However repository
still has to deal with back-end differences.
9Advent of abstraction layers that are application
specific
Usage of adapter layer in software Internal,
application specific, abstraction on storage
system used. However each software module
will have its own adapter
- ltnodestore classname"org.apache.slide.store.impl.
rdbms.J2EEStore"gt - ltparameter name"datasource"gtjdbc/repositoryData
Sourcelt/parametergt - ltparameter name"adapter"gtorg.apache.slide.store
.impl.rdbms.OracleRDBMSAdapterlt/parametergt - ltparameter name"table-prefix"gtSLIDE_lt/parameter
gt - ltparameter name"column-prefix"gtSLIDE_lt/paramete
rgt - ltparameter name"compress"gtfalselt/parametergt
- lt/nodestoregt
10How does Hippo use Oracle
- No oracle specific development because
application base must be generic - Just like any other database and application
server - Product should run within any application
container and using any back-end storage. - Small compartimized component provide
- connection to back-end store.
http//flickr.com/photos/92011777_at_N00/228570232/
11It was just too simple
- Two problems, first
- Open source projects are technical subprojects,
not end-applications. - Multiple projects are put together in one
application. - Each project potentially its own storage adapter.
- Second we're not alone
12Other repositories out there
- We want inter-operability
13Standarization
- How independently developed software can
co-operate - Standardize
- Best effort standardization
- Application domain, rather than full generic
- Mostly on API, quering just as basis
- Open source requires open standards to be
involved.
14Standarization approaches
- Application interoperability
- Storage abstraction layers that capture
application domain knowledge
Java Standards (JSRs)
- Java Content Repository JCR
- Java Persistency
- Plain Java objects mapped to database storage.
15Java Content Repository (JCR)
- JSR-170, JSR-283 in preparation
- Standardized API for Content repositories
- This is not a generic database access
- But a Java API for accessing content in web
application domain for CMS, DMS, etcetera.
http//flickr.com/photos/openthreads/234957983/
16JCR provides
- Versioning
- Hierarchical storage
- Locking
- Observation
- Hierarchical type management, but also
- unstructured content
- But no workflow,
- and leaves query languages partly open.
17Example
- Import javax.jcr.
- Session session repository.login()
- Node node session.getRootNode().getNode(documen
ts).getNode(artists/queen) - Node album node.addNode(A day at the races,
nodetypealbum) - album.setProperty(year, 1976)
- album.setProperty(genre, new String pop
rock, progressive rock ) - Node song album.addNode(Teo Torriate,
nodetypesong) - song.setProperty(length, 357)
- session.save()
- session.commit()
- queryManager.createQuery(SELECT FROM
nodetypesong WHERE length gt 300, Query.SQL) - queryManager.createQuery(/documents/artists//_at_le
ngth gt 300, Query.XPATH) - Query query queryManager.getQuery(session.getRoo
tNode().getNode(/queries/stored) - QueryResult result query.execute()
- for(NodeIterator iter result.getNodes()
iter.hasNext() )
18Object Relational/Content Mapping (ORM/OCM)
- Plain Java object programming preferred by
developers - Not the intricates of having to fetch and store
data, fetch groups - OCM provides layer that maps Java objects to a
database schema. - Once initial Java object is obtained, all
referenced objects are also available. - Fetch groups allow application-domain knowledge.
19Object Mapping Standards
- Alternative standards JPA and JDO (plus
Hibernate, etc.) - Differences in expressiveness, but all use same
approach - Mapping description file, or
- Annotations
- Plus back-end storage descriptor
- Mapping allow application domain knowledge
- and seperation between storage method and code.
20JDO / JPA Annotations
Annotations in Java5 describing how to map to
schema Specialized queries can be used too,
if really needed
- _at_Entity
- public class Employee implements Serializable
- private int employeeId
- _at_Id
- public int getEmployeeId() return
employeeId - _at_JoinColumn(name"MANAGER_ID",
referencedColumnName"EMP_ID") - public Collection getManagedEmployees()
-
- _at_NamedQuery(
- name"findAllEmployees",
- query"SELECT FROM EMPLOYEE WHERE MGR1"
- hints _at_QueryHintnameTopLinkQueryHints.BIN
D_PARAMETERS - )
21JDO / JPA Mapping description
Alternative to use mapping description Here,
also targetted queries are possible.
- ltjdogt
- ltpackage name"org.sample"gt
- ltclass name"Employee" detachable"true"
identity-type"datastore"gt - ltinheritance strategy"subclass-table"/gt
- ltfield name"superfield" column"a"/gt
- lt/classgt
- ltfield name"employees"gt
- ltcollection element-type"Employee"/gt
- lt/fieldgt
- lt/packagegt
- lt/jdogt
22OCM and JCR do not conflict
- OCM and JCR do not conflict
- OCM on top of JCR
Browse, versioning, etc by JCR. Programming
paradigm by OCM
http//flickr.com/photos/17271969_at_N00/16402704/
23Oracle and open source / open standards
- One view is that for Oracle open source is just
another application - this is rightfully so..
- Oracle wants to be the information provider to
all applications - Open standards promote this, and allow open
source provides to integrate with Oracle products.
24Oracle involvement in Open Standards
JSR-174
JSR-168
JSR-164
- Is Oracle involved in Open Standards?
JSR-169
JSR-175
JSR-156
JSR-295
JSR-262
JSR-171
JSR-254
JSR-269
JSR-296
JSR-245 JSP 2.1
JSR-153
JSR-117
JSR-215
JSR-163
JSR-186
JSR-233
JSR-154
JSR-131
JSR-243 JDO 2.0
JSR-127
JSR-201
JSR-221
JSR-88
JSR-43
JSR-207
JSR-306
JSR-299
JSR-313
JSR-30
JSR-4
JSR-10
JSR-284
JSR-115
JSR-167
JSR-53
JSR-31
JSR-26
JSR-270
JSR-155
JSR-181
JSR-204
JSR-310
JSR-147
JSR-187
JSR-276
JSR-52
JSR-12 JDO
JSR-74
JSR-173
JSR151
JSR-72
JSR-72
JSR-301
JSR-286 Portlet 2.0
JSR-317
JSR-318
JSR-255
JSR-165
JSR-212
JSR-227
JSR-277
JSR-322
JSR-222
JSR-37
JSR-139
JSR-152
JSR-250
JSR-40
JSR-305
JSR-309
JSR-316
JSR-101
JSR-16
JSR-5
JSR-121
JSR-198
JSR-289
JSR-225
JSR-223
JSR-303
JSR-206
JSR-200
JSR-203
JSR-265
JSR-315
JSR-251
JSR-21
JSR-56
JSR-241
JSR-224
JSR-114
JSR-15
JSR-128
JSR-208
JSR-247
JSR-220
JSR-51
JSR-160
JSR-202
JSR-294
JSR-244
JSR-196
JSR-24
JSR-314
JSR-94
JSR-123
JSR-170 JCR
JSR-99
JSR-107
JSR-144
JSR-182
JSR-69
JSR-188
JSR-199
JSR-264
JSR-110
JSR-76
JSR-176
JSR-172
JSR-112
JSR-73
JSR-67
JSR-262
JSR-45
JSR-48
JSR-106
JSR-109
JSR-126
JSR-133
JSR-138
JSR-142
JSR-291
JSR-292
JSR-252 JavaServer Faces 2.0
JSR-19 JavaBeans
25Oracle does JCR
- Oracle involved in JCR (JSR-170, 283)
- Oracle involved in JPA/JDO (JSR-243, 220, ..)
- Implementations for JCR, JDO/JPA (TopLink)
- Standards allow for interoperability
- e.g. Use specialized Hippo JCR together with
Oracle JCR tools - Or Oracle JCR combined with Hippo JCR
- Application programmers can use same interface,
and just point to different implementation when
addressing specific needs.
26Wrapping up
- Open source and open standards target less vendor
centric development and better interoperability - Attention in open source world to use open
standards - Application domain solutions
- rather than end-application specific or too
generic - use localized queries that can be tailored to
back-end. - Open source developers and
- other vendors co-operating in
- open standards.
http//flickr.com/photos/thepartycow/296816170/