Unraveling Multimodality with Large Language Models.pdf
Apache Sling : JCR, OSGi, Scripting and REST
1. OSGi, Scripting & REST
Web Development with Apache Sling
Carsten Ziegeler | Day Software
cziegeler@apache.org
2. 2
About Carsten Ziegeler
• Member of the Apache Software Foundation
– Sling, Felix, Cocoon, Portals, Sanselan, Excalibur,
Incubator
– PMC: Felix, Portals, Cocoon, Incubator, Excalibur (Chair)
• RnD Team at Day Software
• Article/Book Author, Technical Reviewer, Speaker
• JSR 286 Spec Group (Portlet API 2.0)
2
3. 3
Agenda – Apache Sling
1 Motivation
2 Content and JCR
3 Web and REST
4 Scripting
5 OSGi
6 Outlook
3
5. 5
Web Challenges
• Publish huge amount of information
– Different types
– Highly dynamic
– Different output formats
• Web 2.0 ready
– Collaboration and integration
• Fast changing requirements
– Rapid prototyping and development
– Dynamic, extensible but maintainable
5
6. 6
Web Challenges
• Publish huge amount of information
JCR
– Different types
– Highly dynamic
– Different output formats REST
ROA
• Web 2.0 ready
– Collaboration and integration
Scripting
• Fast changing requirements
– Rapid prototyping and development
– Dynamic, extensible but maintainable OSGi
6
7. 7
Apache Sling – The Fun is Back
5th Winner JAX Innovation Award 2008
• Web framework
• Java content repository (JCR)
• ROA / REST
• Scripting inside
• OSGi
• Apache Open Source project
– http://incubator.apache.org/sling
7
10. 10
Content is Important
• Apache Sling makes handling content easy
• Java content repository (JCR)
– Several different sources possible
• Direct mapping: URL -> content
– Configurable
– http://myserver.domain/products/sling.html
• Flexible rendering
10
11. 11
Content Repository
• Generic application data store
• Structured and unstructured content
• Support small and large-scale data
• Locking, transactions, versioning, observation
and searching
11
12. 12
JCR – JSR 170
• Content Repository for Java technology API
• (Java) Standard
– Supported by many vendors
– Used by many products and projects
– Several open source solutions
• How do you connect to a CR?
• How do you interact with a CR?
JSR 283 – Version 2.0 – scheduled for 2009
12
14. 14
Content Repository Features
• Hierarchical content
– Nodes and properties
• Structured
– Nodetypes and typed properties
• And/or unstructured
• Fine and coarse-grained
14
15. 15
Sample Content Structure
Travel Family
Europe Weddings
Amsterdam Basel 2008
City Photo
Photo
2007
Photo
Photo
15
16. 16
Content Repository Features
Query (XPath, SQL)
•
Export/Import (XML)
•
Referential Integrity
•
Authentication
•
Access Control
•
Versioning
•
Observation
•
Locking and Transactions (JTA)
•
16
17. 17
Comparison
• File System
– Hierarchical, unstructured
• Database
– Structured
– Referential integrity, transactions
• Content Repository
– Advantages of a FS and a database
– Plus observation, versioning etc.
17
19. 19
The Repository Model
• Repository: one (or more) workspaces
• Workspace contains a tree of items
• Item: Node or property
• Nodes provide the content structure
– May have children
• Actual data is stored as values of properties
• Types and namespaces!
Implementation of JCR 19
20. 20
Nodes and Properties
W
o
r
k
s
p
a
c
e
AC
Root
= Node
o
n
t
e
n
t
R
e
p
o
s
it
o
r
y
= Property
a c
b
g
d h
e
„Once upon
-25
a time..“
i j k
6.02x1023
true
Implementation of JCR
20
21. 21
Apache Jackrabbit
• JSR 170 reference implementation
• Apache TLP since 2006
• Several releases
• JCR 2.0 RI later this year
• Additional components
22. 22
Leverage the standard node types
• Type hierarchy • Content hierarchy
nt:hierarchyNode
nt:folder
nt:file
nt:linkedFile
nt:resource
22
26. 26
Resource Oriented Architecutre
• Piece of information is a resource
– News entry, product, photo...
– (Descriptive) URI
• Stateless
– Request contains all relevant information
• Use HTTP
– Methods (GET, POST) for operations
26
27. 27
REST with Apache Sling
• Default behaviour for GET
• Creating/Updating content through POST
– Default behaviour
• Additional operations/method
• Resource-first request processing!
27
28. 28
Resource
• Sling's abstraction of the thing addressed by
the request URI
– Usually mapped to a JCR node
– File system, database...
• Properties of resources
– Path, e.g. JCR Item path
– Type, e.g. JCR node type
– Metadata, e.g. last modification date
28
29. 29
Resource- rst Request Processing
fi
• URI Decomposition
• /products/sling.print.a4.html
• Resource Path Selectors Extension
– Resource and representation
• Content retrieved from repository
• Rendering based on content type
29
30. 30
Basic Request Processing Steps
• URI decomposition
• Resolve the resource
– Source: request URI
• Resolve rendering script
– Source: resource type
– Scripts are wrapped by a generic script servlet
• Create rendering chain
– Configurable (servlet) filters
– Rendering servlet
30
• Invoke rendering chain
31. 31
Resource Resolver
• Gateway for resources
• Abstracts the path resolution
• Abstracts access to the persistence layer(s)
• Configurable
– Mappings (Multi-site mgmt, beautify paths)
• Tasks:
– Finding Resources
– Getting Resources
– Simplification of Query Execution
31
34. 34
Scripting Inside
• It's your choice
– JSP, servlet, ESP
– javax.script (Apache BSF)
– own script handlers
• Scripts stored in OSGi bundles or repository
• Scripts are searched at configurable locatiosn
• Default servlets (or scripts)
– JSON, XML
– Registerable
– Fallback / Last Ressort
34
35. 35
Script Resolving I
• Path to script is built from ...
– Configured search paths ( /apps, /libs )
– Resource type converted to path ( my/photo )
– Selector string ( print/a4)
– Request method & MIME Type
• GET --> Request URL Extension ( html )
• else --> Method Name ( POST, PUT, ... )
35
36. 36
Script Resolving Example
• URI: /products/sling.print.a4.html
• Resource: /products/sling
• Resource Type: myapp:product
• Script for GET:
– /apps/myapp/product/print/a4/html.*
• Script for POST:
– /libs/myapp/product/print/a4/POST.*
36
37. 37
Script Resolving II
• Scripts are searched by best matching
– /apps/myapp/product/print/a4/html.*
– /libs/myapp/product/print/a4/html.*
– /apps/myapp/product/html.*
– /libs/myapp/product/html.*
• Resource has a type and a super type
– Script inheritance
– Default script (JSON...)
37
38. 38
Powerful Scripting with Includes I
Request: /albums/travel.html
Resource Resolver
Resource, resource type: my:Album
Script Resolver
Script: /libs/my/Album/html.jsp
Script
Generates main html
sling:include with selectors
response 38
39. 39
Powerful Scripting with Includes II
Request: /albums/travel.html
Script (/libs/my/Album/html.jsp)
<sling:include resource=quot;<%= current %>quot; addSelectors=quot;treequot;/>
…
Script Resolver
Script: /libs/my/Album/tree.html.jsp
Script
response
42. 42
OSGi in 5..ehm..1 Minute
• Specification of a framework
• Module concept (bundles) with lifecycle
• Simple but powerful component model
– Lifecycle management
– Publish/Find/Bind service registration
• Dynamic!
• Uses the concept of bundles
42
43. 43
An OSGi Bundle
• Leverages the Java packaging mechanism:
JAR files
• Contains Java classes and resources
• Additional meta-data
– Implicit dependencies to other bundles
– Package imports/exports
43
44. 44
Services
• OSGi offers an API to register services
– Service is registered by its interface name(s)
– Implementation is bundle private
– Several components for same service possible
(from different bundles)
• Bundles can query services
– By interface names
– With additional filters
44
45. 45
The OSGi Core
• Minimal but sufficient API for services
– Minimal overhead: Good for simple bundles
– No support for component management
– No support for configuration management
– Requires sometimes a lot of Java coding
• Additional (optional) OSGi extensions
– Declarative Service Specification
– Configuration Admin Service Specification
45
46. Dynamic Services
• OSGi Declarative Services Specification
– XML Configuration
• Contained in bundle
– Publishing services
– Consuming services
• Policy (static,dynamic), cardinality (0..1, 1..1, 0..n)
– Default configuration
– Service Lifecycle management
• Various Implementations
– Apache Felix SCR 46
47. Confi g Admin and Metatype
• OSGi Config Admin
– Configuration Manager
– Persistence storage
– API to retrieve/update/remove configs
– Works with Declarative Services
• OSGi Metatype Service
– Description of bundle metadata
– Description of service configurations
• Various Implementations
– Apache Felix 47
48. Apache Felix
• Top-level project (March 2007)
• Healthy and diverse community
• OSGi R4 (R4.1) implementation
– Framework (frequent releases)
– Services (continued development)
– Moving towards upcoming R4.2
• Tools
– Maven Plugins, Web Console, iPojo
• New sub project
– Karaf : Runtime Environment (Service Mix)
48
49. Apache Sling Runtime
• Uses Apache Felix
• Runtime: Apache Sling Launchpad
– Might be merged with Felix Karaf
• Two flavours
– Standalone Java Application
– Web application
• But Sling can be deployed in any OSGi
framework!
49
50. 50
Standalone Java Application
• One single executable JAR file
• Small Launcher
• Starts OSGi Framework (Apache Felix)
• Uses Jetty in an OSGi Bundle
50
51. 51
Web Application
• Extends Standalone Application
– Replaces Command Line Support with a Servlet
• Uses a Bridge to connect Sling to the Servlet
Container
51
52. 52
Facts about Sling
• Sling API
– No reference to JCR API
– Uses resource abstraction
• Highly modular and runtime configurable
– OSGi framework
– Everything is a OSGi bundle
• ConfigAdmin, Declarative Services, Metatype
• Felix Web Console
52
55. 55
Current State
• Apache Sling is in the Apache Incubator
• Second Release: RSN! :)
• Demo Applications
• Increasing interest -> Increasing community
• Graduating from the incubator to a TLP
– sling.apache.org
55
56. 56
Development
• Easy to get started
– Add content, add script, add more content
• Very flexible and dynamic
• Tooling
– Maven Plugins
– Apache Felix SCR Plugin
– Additional Sling Plugins
– But not tied to Maven of course :)
56
57. 57
And remember...
• (Nearly) Everything is content
– Application content
– HTML pages, CSS and JavaScript files, static
images
– Documentation, resource bundles, etc.
– With versioning, export/import, full text search,
etc.
57
58. 58
Manage the Web Challenges...
• Publish huge amount of information
– Different types
– Highly dynamic
– Different output formats
• Web 2.0 ready
– Collaboration and integration
• Fast changing requirements
– Rapid prototyping and development
– Dynamic, extensible but maintainable
58
59. 59
...with Apache Sling: State of the Art
• Modularity and dynamics (OSGi)
• Content Management (JCR)
• Resource oriented architecture (REST)
• Scripting inside
59
60. 60
Apache Sling – The Fun is Back!
• Web Framework
• Java Content Repository
• REST
• Scripting inside
• OSGi
• Apache Open Source project
• Check it out today!
60