JSR 170: The Key to Unlocking Content Repositories Originally presented at the XML 2006 Conference by: Joel Amoussou, CEO, Efasoft [email_address]
JSR 170 Design Goal “ The API should be a standard, implementation independent, way to access content bi-directionally on a granular level within a content repository.” http://www.jcp.org/en/jsr/detail?id=170
The JDBC of Content Repositories RDBMS Content Repositories Analogy Infrastructure & Consolidation Relational SQL JDBC Hierarchical XPath 2.0 JSR 170
The Airline Industry Use Case Airline Tech Pubs Portal Airframe Manufacturer RDBMS Engine  Manufacturer Native  XML DB Component Manufacturer File System JSR 170 JSR 170 JSR 170 JSR 170
The Airline Industry Use Case  (cont’d)‏ Airline Tech Pubs Portal Airframe Manufacturer RDBMS Engine  Manufacturer Native  XML DB Component Manufacturer Object DB JSR 170 JSR 170 JSR 170 JSR 170 NEW No rewrite!
Enterprise Repository Product Lifecycle Management (PLM)‏ My Customers Content Repositories Learning Management System (LMS)‏ Enterprise Resource  Planning (ERP)‏ Enterprise Portals Customer Relationship Management (CRM)‏ MyRepo
Interoperable Enterprise CMS Cross-Repository Integration  Library  Services Observation Exchange Aggre- gation
Features WebDAV,  RMI, SOAP Open Source Jackrabbit/TCK/Eclipse Hierarchical model (workspace, nodes, and properties)‏ Plug-and-Play Compliant Repository Independent of Persistence Storage Standardized Content  Repository API JSR 170
Repository Model Description DescriptiveDataModule <dm> … </dm> Illustration Root Procedure Node Property Content Date Content <dm> … </dm> Content 2006-12-06 Creator “ X-Airways” ProceduralDataModule
JSR 170 Code Snippet InitialContext ctx = ... Repository repository = (Repository)ctx.lookup(&quot;s1000drepo&quot;); Credentials credentials = new SimpleCredentials(&quot;username&quot;, &quot;password&quot;.toCharArray()); Session mySession = repository.login(credentials, &quot;S1000DWorkspace&quot;); Node root = mySession.getRootNode(); Node illustration = root.getNode(&quot;Description/Illustration&quot;); Property dateProperty = illustration.getProperty(&quot;Date&quot;); Value dateValue = dateProperty.getValue();  date creationDate = dateValue.getDate();  Node procedure = (Node) mySession.getItem(&quot;/Procedure&quot;); Node proceduralDM = procedure.addNode(&quot;ProceduralDataModule&quot;); proceduralDM.setProperty(&quot;Creator&quot;, &quot;X-Airways&quot;); mySession.save();
JSR 170 Level 1 Credit: Apache Jackrabbit Level1 Read only Simple & Covers a large number of usecases Structured Strong typed information Hierarchical Parent child relationships, Sort order PropertyTypes String, Binary, Numbers, Calendar, ... NodeTypes Introspect complex Content Structures Query (XPath)‏ Search and query the Repository Export Standardized XML Content Export Fine & Coarsegrained Content Items Small to Large
JSR 170 Level 2 Credit: Apache Jackrabbit Write Save changes to a repository Unstructured Support for weakly or unstructured Content Import Standardized Finegrained Content Import Referencial Integrity Reference Tracking and Integrity AccessControl Introspection Level 2
Optional Features Credit: Apache Jackrabbit Versioning Workspaces, Merge, Update, Label, ... JTA Support (XA) Transactions Observation Monitor changes in the Repository Query (SQL)‏ Search the Content Repeository using SQL Locking Session based and persistant
Apache Sling and Chemistry  Sling REST access to Jackrabbit Server-side Javascript OSGi Chemistry CMIS on top of Jackrabbit SOAP binding AtomPub binding
JSR 283 1 Node & Property Shareable nodes Content modeling Metadata 2 Misc Retention & hold Access control Journaled observ. Workspace mgt 3 Query Extension for SQL Prepared queries
Thank You ! [email_address]

JSR 170: The Key to Unlocking Content Repositories

  • 1.
    JSR 170: TheKey to Unlocking Content Repositories Originally presented at the XML 2006 Conference by: Joel Amoussou, CEO, Efasoft [email_address]
  • 2.
    JSR 170 DesignGoal “ The API should be a standard, implementation independent, way to access content bi-directionally on a granular level within a content repository.” http://www.jcp.org/en/jsr/detail?id=170
  • 3.
    The JDBC ofContent Repositories RDBMS Content Repositories Analogy Infrastructure & Consolidation Relational SQL JDBC Hierarchical XPath 2.0 JSR 170
  • 4.
    The Airline IndustryUse Case Airline Tech Pubs Portal Airframe Manufacturer RDBMS Engine Manufacturer Native XML DB Component Manufacturer File System JSR 170 JSR 170 JSR 170 JSR 170
  • 5.
    The Airline IndustryUse Case (cont’d)‏ Airline Tech Pubs Portal Airframe Manufacturer RDBMS Engine Manufacturer Native XML DB Component Manufacturer Object DB JSR 170 JSR 170 JSR 170 JSR 170 NEW No rewrite!
  • 6.
    Enterprise Repository ProductLifecycle Management (PLM)‏ My Customers Content Repositories Learning Management System (LMS)‏ Enterprise Resource Planning (ERP)‏ Enterprise Portals Customer Relationship Management (CRM)‏ MyRepo
  • 7.
    Interoperable Enterprise CMSCross-Repository Integration Library Services Observation Exchange Aggre- gation
  • 8.
    Features WebDAV, RMI, SOAP Open Source Jackrabbit/TCK/Eclipse Hierarchical model (workspace, nodes, and properties)‏ Plug-and-Play Compliant Repository Independent of Persistence Storage Standardized Content Repository API JSR 170
  • 9.
    Repository Model DescriptionDescriptiveDataModule <dm> … </dm> Illustration Root Procedure Node Property Content Date Content <dm> … </dm> Content 2006-12-06 Creator “ X-Airways” ProceduralDataModule
  • 10.
    JSR 170 CodeSnippet InitialContext ctx = ... Repository repository = (Repository)ctx.lookup(&quot;s1000drepo&quot;); Credentials credentials = new SimpleCredentials(&quot;username&quot;, &quot;password&quot;.toCharArray()); Session mySession = repository.login(credentials, &quot;S1000DWorkspace&quot;); Node root = mySession.getRootNode(); Node illustration = root.getNode(&quot;Description/Illustration&quot;); Property dateProperty = illustration.getProperty(&quot;Date&quot;); Value dateValue = dateProperty.getValue(); date creationDate = dateValue.getDate(); Node procedure = (Node) mySession.getItem(&quot;/Procedure&quot;); Node proceduralDM = procedure.addNode(&quot;ProceduralDataModule&quot;); proceduralDM.setProperty(&quot;Creator&quot;, &quot;X-Airways&quot;); mySession.save();
  • 11.
    JSR 170 Level1 Credit: Apache Jackrabbit Level1 Read only Simple & Covers a large number of usecases Structured Strong typed information Hierarchical Parent child relationships, Sort order PropertyTypes String, Binary, Numbers, Calendar, ... NodeTypes Introspect complex Content Structures Query (XPath)‏ Search and query the Repository Export Standardized XML Content Export Fine & Coarsegrained Content Items Small to Large
  • 12.
    JSR 170 Level2 Credit: Apache Jackrabbit Write Save changes to a repository Unstructured Support for weakly or unstructured Content Import Standardized Finegrained Content Import Referencial Integrity Reference Tracking and Integrity AccessControl Introspection Level 2
  • 13.
    Optional Features Credit:Apache Jackrabbit Versioning Workspaces, Merge, Update, Label, ... JTA Support (XA) Transactions Observation Monitor changes in the Repository Query (SQL)‏ Search the Content Repeository using SQL Locking Session based and persistant
  • 14.
    Apache Sling andChemistry Sling REST access to Jackrabbit Server-side Javascript OSGi Chemistry CMIS on top of Jackrabbit SOAP binding AtomPub binding
  • 15.
    JSR 283 1Node & Property Shareable nodes Content modeling Metadata 2 Misc Retention & hold Access control Journaled observ. Workspace mgt 3 Query Extension for SQL Prepared queries
  • 16.
    Thank You ![email_address]