theserverside: kickstarting jcr

45
Kickstarting JCR: TheServerSide.com as a Content Application Michael Marth Technology Evangelist Day Software AG David Nuescheler CTO Day Software AG

Upload: david-nuescheler

Post on 26-Jan-2015

123 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: TheServerSide: Kickstarting JCR

Kickstarting JCR: TheServerSide.com as a Content Application

Michael MarthTechnology EvangelistDay Software AG

David NueschelerCTODay Software AG

Page 2: TheServerSide: Kickstarting JCR

obpqof`qba

R håçï=óçìê=eqji=C=g~î~ëÅêáéíe~îÉ=~=î~ÖìÉ=ÅçåÅÉéí=çÑ=~=“`çåíÉåí=oÉéçëáíçêóÒ=~åÇ=“obpqÒ

Page 5: TheServerSide: Kickstarting JCR

Kickstarting JCRTSS is a Content App

What’s JCR (elevator pitch)

REST meets JCR meets Ajax

Building TSS as a Content Appsilver

Page 6: TheServerSide: Kickstarting JCR

Kickstarting JCRTSS is a Content App

What’s JCR (elevator pitch)

REST meets JCR meets Ajax

Building TSS as a Content Appsilver

Page 7: TheServerSide: Kickstarting JCR

What’s JCR?

`çåíÉåí=oÉéçëáíçêó=Ñçê=g~î~qj=íÉÅÜåçäçÖó=^mfpéÉÅJiÉ~ÇWa~ó=pçÑíï~êÉpí~íìëW=cáå~ä=oÉäÉ~ëÉ=NTJàìåJOMMR

gpoJNTM

bñéÉêí=dêçìéW

Page 8: TheServerSide: Kickstarting JCR

bñéÉêí=dêçìéW

gpoJNTM gpoJOUP

`çåíÉåí=oÉéçëáíçêó=Ñçê=g~î~qj=íÉÅÜåçäçÖó=^mf=îOKMpéÉÅJiÉ~ÇWa~ó=pçÑíï~êÉpí~íìëW=mìÄäáÅ=oÉîáÉï=`äçëÉÇ=ëÉéJOMMT

What’s JCR?

Page 9: TheServerSide: Kickstarting JCR

What’s JCR?

“The API should be a standard, implementation independent, way to access content bi-directionally on a granular level to a content repository.” ?

Page 10: TheServerSide: Kickstarting JCR

Best of both worlds.

data base filesystem

content repository

read

write

hier-archiesstreams

locking accesscontrol

integrity structure

tx query

un-structured“full-text” sort

orderversion

ingobser-vation

multi-value

Page 11: TheServerSide: Kickstarting JCR

- Reality Check -

Task: Write a JSP snippet that lists “documents” in a “folder”.”

What’s JCR?

Page 12: TheServerSide: Kickstarting JCR

What’s JCR?- Reality Check -

Task: Write a JSP snippet that lists “documents” in a “folder”.”

<%childCount = node.getContentCount();for(int i=0;i<childCount;i++) { IContent child = node.getContent(i); Property title = child.getPropertyByName("Title"); %><%= title.getValue() %><br/><%}%>

<%LAPI_DOCUMENTS documents

= new LAPI_DOCUMENTS(session);

LLValue childTable = new LLValue();

documents.ListObjects(volumeID, folderID,

null, null, LAPI_DOCUMENTS.PERM_SEE, chi

ldTable);

Enumeration children = childTable.enumerateValue

s();

while(children.hasMoreElements()) {

LLValue child = (LLValue)e.nextElement()

;

String title = child.toString("Name");

%><%= title %><br/><%

}%>

<%fndocs = new IFnObjSetDualProxy( fnfolder.getContents(idmFolderContent.idmFolderContentDocument));

int numDocs = fndocs.getCount();for (int i = 1; i <= numDocs; i++) {

IFnDocumentDual fndoc = new IFnDocumentDualProxy(fndocs.getItem(new Integer(i)));

IFnPropertiesDual propset = fndoc.getProperties();

IFnPropertyDual idmTitleProp = propset.getItem("Title");

String title = idmTitleProp.getValue();

%><%= title %><br/><% if (comCleanup) { cleaner.release(fndoc); }}%>

<%IDocuments documents =

new IDocumentsProxy(binder.getDocuments());

documents.cache();

int documentCount = documents.getCount();

for (int i = 0; i<documentCount; i++) {

document = new IDocumentProxy(docume

nts.getItemByIndex(i));

String title = document.getTitle()

%><%= title %><br/><%

}%>

<%PageIterator children = page.getPages();while (children.hasNext()) { Page child = children.nextPage(); Container toplevel = child.getContent(); Atom title = toplevel.getAtom("Title"); %><%= title %><br /><%}%>

+800

<%NodeIterator children = node.getNodes();while (children.hasNext()) { Node child = children.nextNode(); Property title = child.getProperty("Title"); %><%= title %><br /><%}%>

JCR API

Page 13: TheServerSide: Kickstarting JCR

- Functional Elevator Pitch -What’s JCR?

level 1

level 2

read, export, query

write, import, accesscontrol

sql locking obser-vation tx versioning

optional

Page 14: TheServerSide: Kickstarting JCR

JSR-283 Public Review Ballot

approved

Java Standardization

Page 15: TheServerSide: Kickstarting JCR

Java Standardization

Page 16: TheServerSide: Kickstarting JCR

Known compliant Repositories

Apache Jackrabbit Oracle XML DBExo

ECMS PlatformMicrosoft

Sharepoint OpenText Livelink

Day CRX IBM FileNet P8 Xythos Repository Alfresco ECM Vignette V7

Interwoven Repository IBM CM EMC Documentum

How many

RDBMS vendors

do you need?+hundreds of TCKsregistered

* *

*

*

* using third party connector

*

Page 17: TheServerSide: Kickstarting JCR

Sourcemix Sourcemix

Percussion Rhythmix Lutece

Portal

QuickWCM WCMS

Jahia Framework

Hippo CMS

InfoQ Online CommunityNuxeo ECM

Sakai E-learning

TYPO3 v5.0 WCMGX WebManager

Exo ECMS Platform

Liferay Enterprise Portal

Artifactory Maven Proxy

IBM FileNet WebSiteManagerApache James

medic-2-medic mapofmedicine

Day Communiqué WCMS

Apache Tapestry

Day Communique Collab

QSLabs ComplianceApache

Cocoon

Alfresco ECMSApache Sling

Mindquarry Collaboration

Day Communique DAMmagnolia WCMS

JBoss Portal

Some known JCR Applications

Sun OpenPortal Interface 21

Spring Framework

Fast Enterprise SearchOracle PortalBEA Portal

Page 18: TheServerSide: Kickstarting JCR

JCR - Weatherforcast-5°

2008 2009-8°

2010-12°

Page 19: TheServerSide: Kickstarting JCR

Kickstarting JCRTSS is a Content App

What’s JCR (elevator pitch)

REST meets JCR meets Ajax

Building TSS as a Content Appsilver

Page 20: TheServerSide: Kickstarting JCR

Kickstarting JCRTSS is a Content App

What’s JCR (elevator pitch)

REST meets JCR meets Ajax

Building TSS as a Content Appsilver

Page 21: TheServerSide: Kickstarting JCR

JCR: Yours truly

REST over JCR

REST -> Roy T. Fielding

released y2k162 pages

v1.0 released 2005

+300 pages

Page 22: TheServerSide: Kickstarting JCR

JCR

functionally broad

well designedlong term

strategicheavy duty16 tons

stable & durable

The Problem:

Page 23: TheServerSide: Kickstarting JCR

JCR

me

short-sighted...easily confused

developer hat

hacklazy

“i want to build webapps” the o

ther

side

functionally broad

well designedlong term

strategicheavy duty16 tons

stable & durable

The Problem:

Page 24: TheServerSide: Kickstarting JCR

The Silver bullet:

JCR

me (david)

developer hat

very simple projection: fits the bill

sling

silver

Page 25: TheServerSide: Kickstarting JCR

Apache Sling

microjax jax

JCR backed ReST-Webkit(OSGI, OCM , ...) contains

Page 26: TheServerSide: Kickstarting JCR

I2

3

Browser

J2EE WebServer

browser & ujax.jsreading: json & resource GET’swriting: form-POSTs & GETs

Sling Servletstranslating requests to JCR calls

JCR CompliantContent Repository

I

2

3very simple js API to read content, Forms to write content

handles all the heavy lifting, particularly security16 tons

Introducing jax

Page 27: TheServerSide: Kickstarting JCR

Taking the URL seriously

.../product.jsp?id=12346

Mistake 1:Addressing the “Script”Mistake 2:.jsp? What the heck?

Mistake 3:Passing in “this”

Page 28: TheServerSide: Kickstarting JCR

Repository

Sling URL decomposition.

/cars/audi/s4.details.html

Content Repository Path...selects a particular script

Page 29: TheServerSide: Kickstarting JCR

“Data First!”JCR supports “structure first” aswell. (but that’s missing point)

Page 30: TheServerSide: Kickstarting JCR

Getting ready...

download and installtest & mount as a drive

Page 32: TheServerSide: Kickstarting JCR

simple write example

write me!http://localhost:7402/apps/firs

tsteps/1_write.html

<html>

<head><title>u

jax: simple wr

ite example</t

itle>

</head><body>

<form action="

/content/first

steps" method=

"POST">

<!-- title -->

<h2>Title</h2>

<input type="t

ext" name="Tit

le" />

<!-- descripti

on -->

<h2>Descriptio

n</h2>

<textarea rows

="5" name="Des

cription">

</te

xtarea>

<!-- color -->

<h2>Color</h2>

<select name="

Color">

<option value=

"red">red

<option value=

"green">green

</select>

</form>

</body>

</html>

Page 33: TheServerSide: Kickstarting JCR

simple read example

read me!http://localhost:7402/apps/firststeps/2_read.html

<html>

<head><title>u

jax: simple re

ad example</ti

tle>

</head>

<body>

<script src

="/ujax/ujax.j

s"></script

<script>

var node=uj

ax.getContent(

"/content/firs

tsteps");

var div='<d

iv style="back

ground-color:'

+node.Color+'"

>';

document.wr

ite(div);

</script>

<h2><script>

document.write

(node.Title);

</script></h2>

<p><script>

document.write

(node.Descript

ion);

</script></p>

</div>

</body>

</html>

Page 34: TheServerSide: Kickstarting JCR

add newhttp://localhost:7402/apps/firststeps/3_addnew.html

add new entry

<html>

<head><title>u

jax: add new e

ntry example</

title>

</head><body>

<form action="

/content/first

steps/entries/

*"

method="PO

ST" >

<h2>Title</h2>

<input type="t

ext" name="Tit

le" />

<h2>Descriptio

n</h2>

<textarea rows

="5" name="Des

cription"></te

xtarea>

<h2>Color</h2>

<select name="

Color">

<option value=

"red">red

<option value=

"green">green

</select>

<p><input type

="submit"></p>

</form>

</body>

</html>

Page 35: TheServerSide: Kickstarting JCR

list entries

list entrieshttp://localhost:7402/apps/firststeps/4_list.html

<html>

<head><title>u

jax: list entr

ies example</t

itle>

[...]

<script>

var entries=uj

ax.getContent(

"/content/firs

tsteps/entries

", 2);

</script>

<div>

<script>

for (var a i

n entries) {

var entry=ent

ries[a];

document.

write('<div st

yle="backgroun

d-color:'+entr

y.Color+'">');

document.

write('<h2>'+e

ntry.Title+'</

h3>');

document.

write(entry.De

scription);

if(entry.

Image) {

[...]

}

document.

write('</div>'

);

document.

write('<a href

="4_list.html"

onclick=

”ujax.removeCo

ntent(\'/mydat

a/entries/\'+a

+'\'">

remove</

a>');

}

</script>

<a href="3_add

new.html">add

new</a>

</div>

</body>

Page 37: TheServerSide: Kickstarting JCR

Kickstarting JCRTSS is a Content App

What’s JCR (elevator pitch)

REST meets JCR meets Ajax

Building TSS as a Content Appsilver

Page 38: TheServerSide: Kickstarting JCR

Kickstarting JCRTSS is a Content App

What’s JCR (elevator pitch)

REST meets JCR meets Ajax

Building TSS as a Content Appsilver

Page 39: TheServerSide: Kickstarting JCR

Essentially:

Re-build “TSS++” as a content app.

Page 40: TheServerSide: Kickstarting JCR

Transform “TheServerSide.com” into a jax and JCR backed Content App.

TheServerSide.com as a content Application.

- goals -

»»NO TOOLS!

(well texteditor &

browser ;) )

Page 41: TheServerSide: Kickstarting JCR

Buddy coding:

Beer for

Bug.

Page 42: TheServerSide: Kickstarting JCR

DEMO

Page 43: TheServerSide: Kickstarting JCR

If you remember only 2 things.visit us: dev.day.comregister for JCR Cup 2008Make you next Application a Content Application

2

I booth &

fireside chat

Page 44: TheServerSide: Kickstarting JCR

Q&A

Page 45: TheServerSide: Kickstarting JCR

Thank you for your attention