52
Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of Unicon, Inc. Permission is granted for this material to be shared for non-commercial, educational purposes, provided that this copyright statement appears on the reproduced materials and notice is given that the copying is by permission of Unicon, Inc. To disseminate otherwise or to republish requires written permission from Unicon, Inc.

Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Embed Size (px)

Citation preview

Page 1: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Developing with the JCR (JSR 170, JSR 283)

Lennard FullerJA-SIG Spring, 2008

© Copyright Unicon, Inc., 2006. This work is the intellectual property of Unicon, Inc. Permission is granted for this material to be shared for non-commercial, educational purposes, provided that this copyright statement appears on the reproduced materials and notice is given that the copying is by permission of Unicon, Inc. To disseminate otherwise or to republish requires written permission from Unicon, Inc.

Page 2: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

1. What isn’t JSR 170?

2. What is JSR 170?

3. JSR 170 in the CM space

4. JSR 170 in Detail

5. Tips for working with JCR

6. The Future: JSR 283

7. Questions?

Page 3: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

What isn’t JSR170?

Page 4: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR 170 is NOT

• A Java Content Repository.

• A competitor of Documentum or Filenet

• A competitor of ANY other Content Management System or Repository in existence.

• A Content Management Client

• An Enterprise Content Management API

• An API which defines repository administration

Page 5: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

What is JSR 170?

Page 6: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR 170: Java Content Repository

• Java Community Process

http://www.jcp.org/en/jsr/detail?id=170

• Led by Day Software

• Officially released June 17, 2005

• “Content Repository API for Java”

• Two levels of compatibility with optional

features

Page 7: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

“ The API should be a standard, implementation

independent, way to access content bi-directionally on a

granular level within a content repository. “

JSR 170 Specification

Page 8: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

RepositoryD

ApplicationD

API D

RepositoryC

ApplicationC

API C

RepositoryB

ApplicationB

API B

RepositoryA

ApplicationA

API A

Traditional Content Management

Page 9: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

RepositoryD

ApplicationD

RepositoryC

ApplicationC

RepositoryB

ApplicationB

RepositoryA

ApplicationA

Using JSR 170

JSR 170 API

Page 10: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

ApplicationD

ApplicationC

ApplicationB

Repository

ApplicationA

Using JSR 170: Infrastructure

JSR 170 API

Page 11: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

ApplicationD

ApplicationC

ApplicationB

Repository

ApplicationA

Using JSR 170: Infrastructure

JSR 170 API

Page 12: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR 170 in the CM space

Page 13: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Software EvolutionV

olu

me

Market Evolution

OS

Webservers

Content Industry

StandardNMH

Heaven

Infrastructure

Pervasive Software

RDBMS

AppServers

Page 14: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Competing Standards?

Page 15: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

1.ODMA and DMA

2.WebDAV

3.iECM

Page 16: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

ODMA and DMA

• ODMA: standard for integration and interoperability of desktop applications with document management systems

• DMA: standard for the federation of document management systems which faced out to server islands

• Both ODMA and DMA were dissolved prior to 2000

• Both are dissolved… no competition for JCR

Page 17: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

WebDAV

• Currently managed by AIIM

• 1996 – First Working Group Meeting

• WebDAV is a standard for a protocol

• WebDAV is an extension of HTTP

• Adoption of this standard is widespread

• WebDAV is a protocol, not an API. It is

NOT competing with JCR.

Page 18: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

iECM

• AIIM managed

http://www.aiim.org

• Formed by largest vendors

• SOA for ECM

• No release date scheduled.

• “interoperable Enterprise Content

Management”

Page 19: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Compliant Repositories

*Many more registered with TCK

3rd Party Connectors

Page 20: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR 170 Apps and Support for Apps

Many, many, many more……

Page 21: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR 170 In Detail

Page 22: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of
Page 23: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Basic Repository Model

• A repository consists of one or more

workspaces

• A workspace contains a tree of items

• An item is either a node or a property

• A property can only be a leaf

• nodes encapsulate the content structure

• The values of the properties is where the data

is stored

Page 24: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR 170: Data Model

Page 25: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR 170: Level 1

Defines a read only repository

• Accessing Repository

• Reading Repository Content

• Transient namespace remapping

• Export Repository Content

• Search Repository Content (XPath)

• Discovery of NodeTypes

Page 26: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR 170: Level 2

Includes level 1 and adds ability to mutate

• Adding and removing nodes & properties

• Writing the values of properties

• Import from XML

• Assigning node types to nodes

• Persistent namespace changes

Page 27: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR 170: Optional Features

‘Optional’ features?

• Transactions

• Versioning

• Observation

• Locking

• SQL Search

Page 28: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Simple Authentication

Session jcrSession = null;

try {

// varies from CR to CR… this is simple login

jcrSession = jcrRepository.login(new SimpleCredentials("admin",

"admin".toCharArray()));

...

} catch (RepositoryException ex) {

throw convertJcrAccessException(ex);

} finally {

jcrSession.logout();

}

Page 29: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Create Node

Session jcrSession = null;

try {

...

// Get repository root node

Node rootNode = jcrSession.getRootNode();

// Add new nodes node.

// NOTE: until persisted new node’s UUID my be bogus!

Node ferret = rootNode.addNode("ferret","zoo:animal");

ferret.setProperty (“zoo:animalName",“sparky");

Node exhibit = rootNode.addNode(“ferretExhibit","zoo:exhibit");

// persist

jcrSession.save();

} catch (RepositoryException ex) {

throw convertJcrAccessException(ex);

} finally {

jcrSession.logout();

}

Page 30: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Move Node

try {

...

// ferrets are running wild!!!!

Node rootNode = jcrSession.getRootNode();

// get ferret.

Node ferret = rootNode.getNode("ferret");

Node exhibit = rootNode.getNode(“ferretExhibit");

// put furry one in exhibit

jcrSession.move(ferret.getPath(), exhibit.getPath()+ "/"+

ferret.getName());

// persist

jcrSession.save();

} catch (RepositoryException ex) {

throw convertJcrAccessException(ex);

} finally {

jcrSession.logout();

}

Page 31: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Search and Remove

try {

...

Workspace ws = jcrSession.getWorkspace();

QueryManager qm = ws.getQueryManager();

// find sparky!

String queryString = “//ferretExhibit[@zoo:animalName=‘sparky']“;

Query q = qm.createQuery(queryString, Query.XPATHquery);

Query Result qr = q.execute();

NodeIterator ni = qr.getNodes();

// NOTE: there could be more than one ferret named sparky!

// remove all ferrets named sparky from the zoo.

while (ni.hasNext()) {

Node sparky = (Node) ni.next();

sparky.remove();

}

jcrSession.save();

} catch (RepositoryException ex) {

throw convertJcrAccessException(ex);

} finally {

jcrSession.logout();

}

Page 32: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR170

RepositoryA

ApplicationA

JSR170

RepositoryB

ApplicationB

JSR 170: Migration

JSR 170 Defined XML

Export Import

Export

File outputFile = new File(“systemview.xml");

FileOutputStream out = new FileOutputStream(outputFile); session.exportSystemView("/zoo:ferretExhibit", out, false, false);

Import

File inputFile = new File(“systemview.xml");

FileInputStream in = new FileInputStream(inputFile);

session.importXML ("/", in, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW); session.save();

Page 33: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Tips For Working With JCR

Page 34: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

What Should I Know?

• Select the best Deployment Model for your

application and environment.

• Select the right Content Repository for your

application and environment.

– Schedule time to get to know your Content

Repository

• Know your content, and design your tree

structure carefully

Page 35: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Select the right Deployment Model

Page 36: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

ApplicationA

Deployment: Model 1

J2EE Servlet Container

JCR

Page 37: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

ApplicationA

Deployment: Model 2

J2EE Servlet Container

JCR

ApplicationB

Page 38: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

ApplicationA

Deployment: Model 3

J2EE Servlet Container

JCR

ApplicationB

Stand AloneApplication

C

Standalone Server Content Repository

Page 39: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

A word on JCR Remoting

• NOT defined in JSR 170 specification.

• Currently two solutions exist

– JCR-RMI

• existing jackrabbit implementation NOT performance

friendly

– REST style API

• Sling recently released

Page 40: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Select the right Content Repository

Page 41: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

So you want to work with a JSR 170 Content Repository?

Carefully consider your options.CR quality and features can vary greatly.

Page 42: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

A Closer Look at Alfresco’s JSR 170

• Alfresco Positives:

– Excellent, full featured open source enterprise

level CMS and WCM

– Some level of JSR 170 support exists.

• Alfresco Issues:

– Many key “optionals” not implemented.

– JCR Query support not prod ready.

– Remote access problemmatic.

Page 43: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Know your Content and Design Structure Carefully

Page 44: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Tips on Tree Design

• Know your content!

• Know how your selected CR treats your kinds of content

• First time designing tree structure for JCR?

– Allow time to make mistakes

– Prototype it to find mistakes

• Prefer deeper tree structures over wide tree structures

• Be certain JCR queries are NOT hardcoded.

Page 45: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

The future: JSR 283

Page 46: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR 283: Java Content Repository 2.0

• Java Community Process

http://jcp.org/en/jsr/detail?id=283

• Led by Day Software

• Public draft completed Sept 10, 2007

• TCK and RI slated for 2009 release.

• “Content Repository API for Java

Version 2.0”

Page 47: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

What is in JSR 283?

• Both JCR 1.0 XPath AND Sql Deprecated.

• JCR-SQL2 and JCR-JQOM query notations

– Inner join required

• New Property Types i.e.

– WeakReference

– URI

– Decimal

Page 48: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

JSR 283: Optionals

• Versioning now has two optional varieties Simple and Full.

• Node Type Registration

• Activities

• Baselines

• Journaled Observations

• Right, Left and Full JCR-SQL2 joins supported

• Path supported in where clause

• Access control

– Discovery

– Policies

– Entries

• Lifecycle Management

• Shareable nodes

Page 49: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Additional Noteworthy changes to JCR API

New:

• javax.jcr.Binary

• RangeIterator.getNumberRemaining()

• Query.setLimit(int)

• Query.setOffset(int)

• …

Deprecated:

• Node.getUUID()

– use getIdentifier() instead

• NodeType.canRemoveItem(String)

– Use NodeType.canRemoveNode(String) or NodeType.canRemoveProperty(String)

– …

Page 50: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Summary

• What isn’t JSR 170?

• What is JSR 170?

• JSR 170 in the CM space

• JSR 170 in Detail

• Tips for working with JCR

• The Future: JSR 283

Page 51: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Resources

• http://www.day.com/

• http://www.cmswatch.com/Feature/123

• http://docs.exoplatform.org/exo-documents/exo-jcr.site/index.html

• http://dev.alfresco.com

• http://freshmeat.net/projects/jeceira

• http://jlibrary.sourceforge.net/

• http://www.magnolia.info/en/magnolia.html

• http://jackrabbit.apache.org/

• http://newton.typepad.com/

Page 52: Developing with the JCR (JSR 170, JSR 283) Lennard Fuller JA-SIG Spring, 2008 © Copyright Unicon, Inc., 2006. This work is the intellectual property of

Lennard [email protected]

www.unicon.net

Questions?