Oracle in Open Source
Outline
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
Oracle in Open Source
About 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.
Oracle in Open Source
Just a glance...
Oracle in Open Source
The 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
Oracle in Open Source
Architecture
Central repository delivering common functionalities Applications are CMS, websites, ...
Oracle in Open Source
Architecture
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
Oracle in Open Source
Why 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.
Oracle in Open Source
Advent of abstraction layers that are application specific
<nodestore classname="org.apache.slide.store.impl.rdbms.J2EEStore"> <parameter name="datasource">jdbc/repositoryDataSource</parameter> <parameter name="adapter">org.apache.slide.store.impl.rdbms.OracleRDBMSAdapterorg.apache.slide.store.impl.rdbms.OracleRDBMSAdapter</parameter> <parameter name="table-prefix">SLIDE_</parameter> <parameter name="column-prefix">SLIDE_</parameter> <parameter name="compress">false</parameter></nodestore>
Usage of adapter layer in software;Internal, application specific, abstraction on storage system used.
However each software module will have its own adapter
Oracle in Open Source
How does Hippo use Oracle
No oracle specific development because application base must be generic;Just like any other database and application serverProduct should run within any application container and using any back-end storage.
Small compartimized component provideconnection to back-end store.
http://flickr.com/photos/92011777@N00/228570232/
Oracle in Open Source
It 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
Oracle in Open Source
Other repositories out there
We want inter-operability
Oracle in Open Source
Standarization
How independently developed software can co-operate;➔ StandardizeBest effort standardization:● Application domain, rather than full generic;● Mostly on API, quering just as basis;
Open source requires open standards to be involved.
Oracle in Open Source
Standarization approaches
I. Application interoperabilityII.Storage abstraction layers that capture
application domain knowledge
I. Java Content Repository: JCRII. Java Persistency:
Plain Java objects mapped to database storage.
Java Standards (JSRs):
Oracle in Open Source
Java 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/
Oracle in Open Source
JCR provides
Versioning Hierarchical storage Locking Observation Hierarchical type management, but also unstructured content But no workflow, and leaves query languages partly open.
Oracle in Open Source
Example
Import javax.jcr.*;
Session session = repository.login();Node node = session.getRootNode().getNode(“documents”).getNode(“artists/queen”);
Node album = node.addNode(“A day at the races”, ”nodetype:album”);album.setProperty(“year”, 1976);album.setProperty(“genre”, new String[] { “pop rock”, “progressive rock” });Node song = album.addNode(“Teo Torriate”, “nodetype:song”);song.setProperty(“length”, 357);session.save();session.commit();
queryManager.createQuery(“SELECT * FROM nodetype:song WHERE length > 300”, Query.SQL)queryManager.createQuery(“/documents/artists//[@length > 300]”, Query.XPATH);Query query = queryManager.getQuery(session.getRootNode().getNode(“/queries/stored”);
QueryResult result = query.execute();for(NodeIterator iter = result.getNodes(); iter.hasNext(); ) { node = iter.nextNode();}
Oracle in Open Source
Object 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.
Java class Database
Mapping description
Database connector description
Oracle in Open Source
Object 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 knowledgeand seperation between storage method and code.
Oracle in Open Source
JDO / JPA Annotations
@Entitypublic class Employee implements Serializable { private int employeeId;
@Id public int getEmployeeId() { return employeeId; }
@JoinColumn(name="MANAGER_ID", referencedColumnName="EMP_ID") public Collection getManagedEmployees();}
@NamedQuery( name="findAllEmployees", query="SELECT * FROM EMPLOYEE WHERE MGR=1" hints={ @QueryHint={name=TopLinkQueryHints.BIND_PARAMETERS} })
Annotations in Java5 describing how to map to schema:
Specialized queries can be used too, if really needed:
Oracle in Open Source
JDO / JPA Mapping description
<jdo> <package name="org.sample"> <class name="Employee" detachable="true" identity-type="datastore"> <inheritance strategy="subclass-table"/> <field name="superfield" column="a"/> </class>
<field name="employees"> <collection element-type="Employee"/> </field> </package></jdo>
Alternative to use mapping description
Here, also targetted queries are possible.
Oracle in Open Source
OCM and JCR do not conflict
OCM and JCR do not conflict:➔ OCM on top of JCR
http://flickr.com/photos/17271969@N00/16402704/
Browse, versioning, etc by JCR.Programming paradigm by OCM
Oracle in Open Source
Oracle 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.
Oracle in Open Source
Oracle involvement in Open Standards
Is Oracle involved in Open Standards?
JSR-4
JSR-21JSR-15
JSR-10
JSR-24
JSR-30
JSR-37JSR-40
JSR-43
JSR-45 JSR-48
JSR-51
JSR-56
JSR-69
JSR-72JSR-74
JSR-76
JSR-94JSR-99
JSR-106
JSR-107
JSR-115
JSR-121
JSR-123
JSR-126
JSR-128
JSR-131
JSR-133 JSR-138
JSR-139
JSR-142
JSR-144
JSR-147JSR-155
JSR-156
JSR-160
JSR-163
JSR-164
JSR-165
JSR-167
JSR-169
JSR-171
JSR-174
JSR-175
JSR-176
JSR-181
JSR-182
JSR-186
JSR-187
JSR-188
JSR-198
JSR-199
JSR-72
JSR-200
JSR-201
JSR-202
JSR-203
JSR-204
JSR-207
JSR-208
JSR-212
JSR-215
JSR-223
JSR-227
JSR-233
JSR-241
JSR-250
JSR-251
JSR-254
JSR-262JSR-264
JSR-265
JSR-269
JSR-270
JSR-276
JSR-277
JSR-284
JSR-289
JSR-291 JSR-292
JSR-294
JSR-295
JSR-303
JSR-305
JSR-306
JSR-309
JSR-310
JSR-316
JSR-322JSR-318JSR-317
JSR-315
JSR-314
JSR-313
JSR-301
JSR-299
JSR-296
JSR-286 Portlet 2.0JSR-255
JSR-262
JSR-252 JavaServer Faces 2.0
JSR-247
JSR-245 JSP 2.1
JSR-244
JSR-243 JDO 2.0
JSR-225
JSR-224
JSR-222
JSR-221
JSR-220
JSR-206
JSR-196
JSR-173
JSR-172
JSR-170 JCR
JSR-168
JSR-154JSR-153
JSR-152
JSR151
JSR-127
JSR-117
JSR-114
JSR-112JSR-110
JSR-109
JSR-101
JSR-88
JSR-73JSR-67
JSR-53
JSR-52
JSR-31JSR-26
JSR-12 JDO
JSR-16
JSR-19 JavaBeans
JSR-5
Oracle in Open Source
Oracle 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.
Oracle in Open Source
Wrapping 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 andother vendors co-operating inopen standards.
http://flickr.com/photos/thepartycow/296816170/
Top Related