effective web application development with apache sling · effective web application development...

36
Effective Web Application Development with Apache Sling Robert Munteanu ( @rombert ) , Adobe Systems Romania

Upload: lamquynh

Post on 14-Jun-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Effective Web Application Development with Apache Sling

Robert Munteanu ( @rombert ) , Adobe Systems Romania

About the Speaker

11/18/14 2

● Apache Sling PMC member

● Fanboy of the Sling/JCR/OSGi stack

● Enthusiastic Open-Source contributor

● Senior Computer Scientist at Adobe in Romania

Speaker.currentSpeaker().interrupt();

Presentation Flow

11/18/14 3

● Quick facts and figures

● Conceptual foundations

● Building blocks

● Building Sling applications

Quick facts and figures

Apache Sling - History

11/18/14 5

2007incubation

2009TLP

2014Version 7

200xPre-Apache

Apache Sling – High-level View of the Code

11/18/14 6

Source: OpenHub

Apache Sling - Activity Level

11/18/14 7

Source: OpenHub

Source: status.apache.org

Conceptual Foundations

Apache Sling – Conceptual Foundations

11/18/14 9

REST-basedContent-driven

OSGi-powered

Scripting insideApache

Apache Sling – Apache Open Source

11/18/14 10

4Aries

1ServiceMix

7Commons

17Felix

3Geronimo

6Jackrabbit

1Derby

2Tika

Apache Sling – REST-based

11/18/14 11

/blog/

/blog/{0}.html

/

BlogViewController

BlogListController

HomeController

//blog/blog/hello-world

SlingMainServlet

Apache Sling – Content-Driven

11/18/14 12

blog

hello-world

images

jcr:content

some-cat.jpg

other-cat.jpg

Apache Sling – Content-Driven

11/18/14 13

- jcr:primaryType = app:asset- jcr:title = Some Cat- jcr:description = A longer description of this picture of a cat- jcr:created = 2014-06-03T00:00:00.000+02:00- jcr:lastUpdated = 2014-06-03T11:00:00.000+02:00- tags = [Animal, Cat, Color]- width = 400- height = 600

some-cat.jpg

Apache Sling – Scripting Inside

11/18/14 14

JSP

Apache Sling – Scripting Inside

11/18/14 15

libs

blogapp

welcome.jsp

welcome

json.html

Apache Sling – OSGi-powered

● Provision and deploy bundles

● Configure, register and lookup services

● Eventing

● Web Console

11/18/14 16

Building blocks

Apache Sling – Serving a request

GET /blog/welcome.html

11/18/14 18

/blog/welcome myblog/blog.groovy???

Apache Sling – Resource Types

11/18/14 19

blog [blogapp/listing]

hello-world

images

jcr:content [blogapp/blog/content]

some-cat.jpg

other-cat.jpg

Apache Sling – Script Resolution

GET /blog.html

11/18/14 20

Type: blogapp/listing

Extension: html

Method: GET

/libs/blogapp/listing/html.jsp

@SlingServlet(resourceTypes=”blogapp/listing”,...)

/libs/blogapp/listing.jsp

Apache Sling – Request Selectors

GET /blog.rss.xml

11/18/14 21

Type: blogapp/listing

Extension: xml

Selector: rss

Method: GET

/libs/blogapp/listing/rss.html

Apache Sling – Resource Providers

11/18/14 22

JCR MongoDB

FS Cassandra

//content//content/comments/logs

Apache Sling – JCR

11/18/14 23

Apache Sling – JCR implementations

11/18/14 24

Apache Jackrabbit Oak

Building Sling Applications

Apache Sling – JCR modeling

11/18/14 26

images

File uploadsome-cat.jpg

renditions

small.jpg

ripple.jpg

Observation

annotations

initial-review

ACLs

Apache Sling - JCR

11/18/14 27

etc

rendition

ripple

- orientation = /etc/rendition/ripple/options ↵/orientation/vertical- antialiasing = true- edges = /etc/rendition/ripple/options/↵edges/wrap- wave type = /etc/rendition/ripple/options/ ↵wave_type/simple- period = 20- amplitude = 5

Apache Sling – Everything is a Resource

11/18/14 28

Everything is a Resource

Apache Sling – Reading from the Repository

11/18/14 29

@SlingServlet(resourceTypes = "blogapp/listing", extensions = "xml", methods = "GET")

public class RSSFeedServlet extends SlingSafeMethodsServlet {

@Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {

// actual implementation

}

}

Apache Sling – Reading from the Repository

11/18/14 30

Resource res = request.getResource();

ValueMap properties = ↵ res.adaptTo(ValueMap.class);

String title = properties.get(“jcr:title”,↵ “Missing”);

Post post = res.adaptTo(Post.class);

title = post.getTitle();

Apache Sling - Extensions

● Thread Pools and Scheduled Tasks

● I18n

● Caching

● Models

● Health Checks

● Eventing

11/18/14 31

Apache Sling - SlingQuery

Get the closest Folder parent

$(resource).parents("sling:Folder").last();

Get the second child of each resource

$(resource1, resource2).children(":eq(1)");

Find children named en or de

$(resource).children("#en, #de")

11/18/14 32

Apache Sling - Deployment

● Single executable Jar or War file – the Sling launchpad

● Configuration defined in multiple text files, defining bundles, configuration, variables, bootstrap commands, etc

11/18/14 33

Apache Sling – Provisioning Model

[feature name=main]

[variables] io.version=1.4

[configurations]org.apache.jackrabbit.....SegmentNodeStoreService

name="Default\ NodeStore" repository.home="sling/oak/repository"

[artifacts startLevel=5] commons-io/commons-io/${io.version}/jar commons-fileupload/commons-fileupload/1.3.1/jar

11/18/14 34

Apache Sling - Tooling

● Maven Plugins

● Bundle deployment

● Launchpad creation

● Maven Archetypes

● IDE Tooling

● Eclipse

● Netbeans (external)

11/18/14 35

Resources

● http://sling.apache.org/

● http://jackrabbit.apache.org/

11/18/14 36