270 likes | 291 Views
Oracle in Open Source Projects. Berry van Halderen b.vanhalderen@hippo.nl. 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.
E N D
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 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.
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.
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 Browse, versioning, etc by JCR. Programming paradigm by OCM http://flickr.com/photos/17271969@N00/16402704/
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-174 JSR-168 JSR-164 JSR-169 JSR-175 JSR-262 JSR-295 JSR-156 JSR-245 JSP 2.1 JSR-269 JSR-254 JSR-296 JSR-117 JSR-171 JSR-153 JSR-215 JSR-233 JSR-163 JSR-154 JSR-186 JSR-127 JSR-243 JDO 2.0 JSR-131 JSR-201 JSR-88 JSR-221 JSR-207 JSR-299 JSR-43 JSR-306 JSR-313 JSR-30 JSR-284 JSR-10 JSR-4 JSR-53 JSR-31 JSR-167 JSR-115 JSR-26 JSR-270 JSR-181 JSR-155 JSR-310 JSR-204 JSR-147 JSR-187 JSR-52 JSR-12 JDO JSR-276 JSR151 JSR-74 JSR-173 JSR-301 JSR-72 JSR-72 JSR-286 Portlet 2.0 JSR-317 JSR-255 JSR-318 JSR-227 JSR-277 JSR-212 JSR-165 JSR-322 JSR-222 JSR-152 JSR-37 JSR-139 JSR-250 JSR-316 JSR-309 JSR-40 JSR-16 JSR-5 JSR-305 JSR-101 JSR-121 JSR-198 JSR-225 JSR-289 JSR-303 JSR-223 JSR-206 JSR-200 JSR-265 JSR-203 JSR-315 JSR-251 JSR-224 JSR-21 JSR-114 JSR-241 JSR-56 JSR-208 JSR-15 JSR-247 JSR-128 JSR-220 JSR-202 JSR-244 JSR-196 JSR-294 JSR-51 JSR-160 JSR-314 JSR-24 JSR-94 JSR-123 JSR-170 JCR JSR-107 JSR-99 JSR-144 JSR-182 JSR-69 JSR-188 JSR-199 JSR-264 JSR-110 JSR-112 JSR-73 JSR-76 JSR-176 JSR-67 JSR-172 JSR-262 JSR-45 JSR-106 JSR-48 JSR-109 JSR-133 JSR-142 JSR-126 JSR-252 JavaServer Faces 2.0 JSR-291 JSR-292 JSR-138 JSR-19 JavaBeans
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/