E fg e c t i v e W e b A p p l i c a t i o n D e v e l o p me n t w i t h A p a c h e S l i n g E fg e c t i v e W e b A p p l i c a t i o n D e v e l o p m e n t w i t h A p a c h e S l i n g R o b e r t M u n t e a n u A p a c h e C o n C o r e E u r o p e 2 0 1 5 h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
W h o I a m $ F D A Y J O B O S S A A d o b e E x p e r i e n c e p a c h e S l i n g M a n a g e r M a n t i s B T A M p a c h e S l i n g y l y n C o n n e c t o r f o r M a n t i s B T A p a c h e J a c k r a b b i t M A y l y n C o n n e c t o r f o r R e v i e w p a c h e F e l i x B o a r d Speaker.currentSpeaker().interrupt(); h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
A g e n d a ● Q u i c k f a c t s a n d f i g u r e s ● C o n c e p t u a l f o u n d a t i o n s ● B u i l d i n g b l o c k s ● B u i l d i n g S l i n g a p p l i c a t i o n s h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
Q u i c k f a c t s a n d f i g u r e s Q u i c k f a c t s a n d f i g u r e s h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
Q u i c k f a c t s a n d f i g u r e s 2 0 0 x 2 0 0 7 2 0 0 9 2 0 1 4 P r e - A p a c h e i n c u b a t i o n T L P V e r s i o n 7 h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
H i g h - l e v e l V i e w o f t h e C o d e S o u r c e : O p e n H u b h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
L e v e l o f a c t i v i t y S o u r c e : O p e n H u b S o u r c e : s t a t u s . a p a c h e . o r g h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
C o mmu n i t y i n v o l v e me n t S o u r c e : M a r k m a i l h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
C o n c e p t u a l f o u n d a t i o n s C o n c e p t u a l f o u n d a t i o n s h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
C o n c e p t u a l f o u n d a t i o n s O S G i - p o w e r e d R E S T - b a s e d C o n t e n t - d r i v e n S c r i p t i n g i n s i d e A p a c h e h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
A p a c h e O p e n S o u r c e P r o j e c t 1 7 4 1 7 F e l i x A r i e s S e r v i c e M i x C o m m o n s 3 6 1 2 G e r o n i m o J a c k r a b b i t D e r b y T i k a h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
R E S T - b a s e d / b l o g / { 0 } . h t m l B l o g V i e w C o n t r o l l e r B l o g L i s t C o n t r o l l e r / b l o g / / H o m e C o n t r o l l e r S l i n g M a i n S e r v l e t / / b l o g / b l o g / h e l l o - w o r l d h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
C o n t e n t - d r i v e n blog hello-world jcr:content images some-cat.jpg other-cat.jpg h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
C o n t e n t - d r i v e n some-cat.jpg - 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 h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
S c r i p t i n g i n s i d e J S P h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
S c r i p t i n g i n s i d e libs blogapp welcome.jsp welcome json.html h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
O S G i p o w e r e d ● P r o v i s i o n a n d d e p l o y b u n d l e s ● C o n f i g u r e , r e g i s t e r a n d l o o k u p s e r v i c e s ● E v e n t i n g ● W e b C o n s o l e h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
B u i l d i n g b l o c k s B u i l d i n g b l o c k s h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
S e r v i n g a r e q u e s t G E T / b l o g / w e l c o m e . h t m l ? ? ? / b l o g / w e l c o m e m y b l o g / b l o g . g r o o v y h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
R e s o u r c e T y p e s blog [blogapp/listing] hello-world jcr:content [blogapp/blog/content] images some-cat.jpg other-cat.jpg h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
S c r i p t r e s o l u t i o n GET /blog.html Type: blogapp/listing Extension: html Method: GET /libs/blogapp/listing.jsp /libs/blogapp/listing/html.jsp @SlingServlet(resourceTypes=”blogapp/listing”,...) h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
R e q u e s t s e l e c t o r s GET /blog.rss.xml Type: blogapp/listing Extension: xml Selector: rss Method: GET /libs/blogapp/listing/rss.html h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
R e s o u r c e P r o v i d e r s J C R M o n g o D B / / c o n t e n t / / c o n t e n t / c o m m e n t s / l o g s F S C a s s a n d r a h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
J C R h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
J C R I mp l e me n t a t i o n s A p a c h e J a c k r a b b i t O a k h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
B u i l d i n g S l i n g A p p l i c a t i o n s B u i l d i n g S l i n g A p p l i c a t i o n s h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
J C R M o d e l i n g images F i l e u p l o a d some-cat.jpg renditions O b s e r v a t i o n small.jpg ripple.jpg annotations A C L s initial-review h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
J C R M o d e l i n g 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 h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
E v e r y t h i n g i s a R e s o u r c e E v e r y t h i n g i s a r e s o u r c e h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
R e a d i n g f r o m t h e r e p o s i t o r y @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 } } h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
R e a d i n g f r o m t h e r e p o s i t o r y 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(); h t t p : / / r o b e r t . mu n t e a . n u @r o mb e r t
Recommend
More recommend