effective web application development with apache sling

Post on 09-Jul-2015

566 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Apache Sling is an innovative web framework built on top of the Java Content Repository (JCR), that uses OSGi for its component model and fosters RESTful application design. This talk shows how Sling integrates various standard-based technologies, like OSGi and the Content Repository API for Java to create a coherent framework for web application development. We will walk through the development of a simple application with minimal effort and demonstrate how to productize the resulting application. We will pay special attention to some approaches which are not yet part of mainstream development, such as using OSGi for dependecy injection and JCR for persistence.

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

top related