Open Source Projects

tansygoobertownInternet and Web Development

Dec 8, 2013 (3 years and 10 months ago)

52 views

Oracle in Open Source projects

Oracle in

Open Source Projects

Berry van Halderen


b.vanhalderen@hippo.nl





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.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 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@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;


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.

Oracle in Open Source

Standarization approaches

I.
Application interoperability

II.
Storage abstraction layers that capture application
domain knowledge

I.
Java Content Repository: JCR

II.
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 knowledge

and seperation between storage method and code.

Oracle in Open Source

JDO / JPA Annotations

@Entity

public 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
-
21

JSR
-
15

JSR
-
10

JSR
-
24

JSR
-
30

JSR
-
37

JSR
-
40

JSR
-
43

JSR
-
45

JSR
-
48

JSR
-
51

JSR
-
56

JSR
-
69

JSR
-
72

JSR
-
74

JSR
-
76

JSR
-
94

JSR
-
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
-
147

JSR
-
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
-
262

JSR
-
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
-
322

JSR
-
318

JSR
-
317

JSR
-
315

JSR
-
314

JSR
-
313

JSR
-
301

JSR
-
299

JSR
-
296

JSR
-
286 Portlet 2.0

JSR
-
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
-
154

JSR
-
153

JSR
-
152

JSR151

JSR
-
127

JSR
-
117

JSR
-
114

JSR
-
112

JSR
-
110

JSR
-
109

JSR
-
101

JSR
-
88

JSR
-
73

JSR
-
67

JSR
-
53

JSR
-
52

JSR
-
31

JSR
-
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 and

other vendors co
-
operating in

open standards.

http://flickr.com/photos/thepartycow/296816170/