shooting rabbits with sling n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Shooting rabbits with sling PowerPoint Presentation
Download Presentation
Shooting rabbits with sling

Loading in 2 Seconds...

play fullscreen
1 / 34

Shooting rabbits with sling - PowerPoint PPT Presentation


  • 195 Views
  • Uploaded on

Shooting rabbits with sling. Introduction to Apache Jackrabbit & Apache Sling. JCR. Content Repository API for Java JSR-170 & JSR-283 javax.jcr Object database Hierarchical data model Apache Jackrabbit – reference implementation. Mantra: everything is content. Content is content

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

Shooting rabbits with sling


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
    Presentation Transcript
    1. Shooting rabbits with sling Introduction to Apache Jackrabbit & Apache Sling

    2. JCR • Content Repository API for Java • JSR-170 & JSR-283 • javax.jcr • Object database • Hierarchical data model • Apache Jackrabbit – reference implementation

    3. Mantra: everything is content • Content is content • Blogs, articles, posts, etc. • Structured data • List of addresses in e-mail database • Unstructured data • Word document • ACLs • Code

    4. Content hierarchy • JCR has tree-like data model • Repository consists of items • Item can be node or property • Node children are properties or other nodes • Properties are leaves

    5. Node • Nodes form content hierarchy • Nodes are named • Each node has primary type specifying it’s structure (allowed and required children and properties) • Something like class • Eg. myapp:Contactrequires properties myapp:givenNameand myapp:familyName • Nodes can also have mixintypes • Something like interface • Eg. mix:versionable, mix:lockableor myapp:Emailable • Popular types: • nt:base, nt:unstructured, nt:folder

    6. Property • Property contains data • Types: • string, binary, long, double, date, boolean, name, path, reference • Can be multivalued

    7. Searching • Node names and properties are indexed • Jackrabbit uses Apache Lucene • Supported query languages: • XPath • JCR-SQL • JCR-SQL2 (recommended)

    8. SQL2 SELECT * FROM [cq:PageContent] AS sWHERE ISDESCENDANTNODE([/content])AND s.[jcr:title] = ’Mojastrona’ • Main purpose: find node by property contents • Avoid queries with parent path (as it’s not indexed) • It’s better to create a mixin or marker property • We don’t JOIN • SQL and XPath are isomorphic

    9. Versioning • Any subtree can be versioned • Add mixinmix:versionable • node.checkin() • Creates new version • Makes the node read-only • node.checkout() • Allows to modify the node • Usage examples: • Page versions at many levels

    10. Observation • Event listener • We can filter events with: • Event type • Path • Node types • An explicit list of nodes • Usage examples: • Automatic workflows • Generating thumbnails • “Last modified” date • Indexing in internal and external search engine

    11. Other features • Locking • Access control • Users & groups • Groups can be members of other groups • Privileges on nodes to read, write, etc.

    12. JCR – advantages and problems • Advantages • Site structure is easy to reflect • Flexible • Hierarchical structure • Disadvantages • Storing large amount of structured data is neither easy nor efficient • Don’t load CSV file with 1 000 000 rows • Data has to be denormalized (as there is no JOINs) • Clustering is tricky • Master-slave works OK • Waiting for Jackrabbit 3.0 – codename Oak • Transactions…

    13. Apache Sling HTTP access to JCR repository

    14. Apache Sling • Web framework • RESTful access to JCR nodes • Powered by OSGi • Support multiple scripting languages (JSP, Groovy, …) • Open source, developed by Adobe within Apache foundation

    15. REST # Create / Update $ curl -u admin:admin–d name=“Java User Group” –d city=Poznan \localhost:8080/content/hello # Read $ curl localhost:8080/content/hello.tidy.json # Delete $ curl -X DELETE -u admin:admin\localhost:8080/content/hello

    16. Resource URL • Resource path: /content/hello • http://localhost:8080/content/hello.xml • http://localhost:8080/content/hello.json • http://localhost:8080/content/hello.html • There are simple built-in renderers • Each can be overridden

    17. sling:resourceType • In order to create custom rendition we need to set sling:resourceTypeproperty • It’s a JCR path to some renderer • Renderer can be JSP, Java Servlet, Scala, Python, Groovy, Ruby or ESP (internal Sling language, kind of backend JS) • Content-centric: you don’t invoke script directly

    18. Sample HTML renderer <html> <head><title>ESP example</title> </head> <body> <h1>Hello<%= currentNode.getProperty('name') %> </h1> <h2><%= currentNode.getProperty('city') %> </h2> </body> </html>

    19. How does it work?

    20. URL decomposition /content/corporate/jobs/developer.print.a4.html/mysuffix • Resource path • Selectors • Extension • Suffix

    21. Resource path /content/corporate/jobs/developer.print.a4.html/mysuffix • Substring before the first dot • Path to the resource in JCR • This part of the URL defines data. • Rest defines way of the presentation.

    22. Extension /content/corporate/jobs/developer.print.a4.html/mysuffix • Defines content format • Most common: html, json, xml • But may be png

    23. Selectors /content/corporate/jobs/developer.print.a4.html/mysuffix • Specifies additional variants of the given content type • Optional • Multiple selectors are allowed

    24. Suffix /content/corporate/jobs/developer.print.a4.html/mysuffix • Additional information passed to the rendering script • Similar to GET ?name=value parameter, but can be cached

    25. Script resolution GET /content/corporate/jobs/developer.print.a4.html/mysuffix /content/corporate/jobs/developer/sling:resourceType = cognifide/hr/jobs /apps/cognifide/hr/jobs: • jobs.print.a4.GET.html.esp • jobs.print.a4.html.esp • jobs.print.a4.esp • jobs.print.GET.html.esp • jobs.print.html.esp • jobs.print.esp • jobs.GET.html.esp • jobs.html.esp • jobs.GET.esp • jobs.esp

    26. Composed resources <html> <head><title><%= currentNode.getProperty(’title') %></title></head> <body> <div class=“left_column”> <sling:includepath=“left” resourceType=“foundation/parsys”/> </div> <div class=“main”> <sling:include path=“main” resourceType=“foundation/parsys”/> <div> </body> </html>

    27. Paragraph system <c:forEachvar=“par” items=“${resource.children}”> <sling:include path=“${par.path}” resourceType=“${par[‘sling:resourceType’]}”/> </c:forEach>

    28. Resource Resolver • In JCR we had Node • In Sling we have Resource • Virtual tree of resources, reflecting the JCR • ResourceResolver– transforms nodes to resources • It’s possible to create own ResourceResolvers and reflect other data sources • Filesystem, • MongoDB, • PostgreSQL • Many ResourceResolvers may work together • Like mountin UNIX

    29. Resolver usage Resource res = resourceResolver.getResource(“/content/hello”);ModifiableValueMap map = res.adaptTo(ModifiableValueMap.class);String name = map.get(“name”, String.class);map.put(“name”, name.toUpperCase());resourceResolver.commit(); Node node = res.adaptTo(javax.jcr.Node);Session = resourceResolver.adaptTo(javax.jcr.Session);

    30. Why do we use resolver? • API is friendlier than JCR • Sling provides us resources and resolver in many places • Servlets • Scripts

    31. Servlets • Like ordinary servlets but… • Can be assigned to: • Paths • Selectors • Extensions • Resource types (so can act as rendering script) • doGet(), doPost() methods are invoked with • SlingHttpServletRequest and …Response • Additional methods for getting requested resource, resolver, decompose URL, etc.

    32. Sample Sling servlet @Component@Service@SlingServlet(resourceTypes = ”jug/hellocomponent”) public class AuthCheckerServlet extends SlingSafeMethodsServlet{ @Reference private ResourceResolverFactoryresolverFactory; public void doGet(SlingHttpServletRequest request, SlingHttpServletResponseresponse) { response.getWriter().println(“Hello world”); } }

    33. Sling – pros and cons • Similar to JCR • Pros • Natural reflection of site and filesystem structure • Document repositories, Digital Asset Management • OSGi stack • Javascript has easy access to repository • Cons • Security issues • internal resources available as xml and json, • handling user generated content • Lack of free tools, eg. repo explorer

    34. Q&A