2. Agenda
1. Hva er Apache Sling?
2. Hva er Java Content Repository (JCR)?
3. Kort om OSGi
4. Kort om REST
5. Sentrale konsepter i Apache Sling
6. Demo: Blogg-applikasjon
7. Er Apache Sling noe for deg?
2
8. Hva er Apache Sling?
• “the simplest device for
delivering content very
fast”
4
9. Hva er Apache Sling?
• “the simplest device for
delivering content very
fast”
4
10. Hva er Apache Sling?
• “the simplest device for
delivering content very
fast”
• Web-rammeverk dedikert
til Java Content Repository
(JCR)
4
11. Hva er Apache Sling?
• “the simplest device for
delivering content very
fast”
• Web-rammeverk dedikert
til Java Content Repository
(JCR)
• Open source fra Apache
Software Foundation
4
22. JCR-implementasjoner
• Apache Jackrabbit • IBM FileNet P8
• Oracle XML DB • Xythos Repository
• exo Platform • Alfresco ECM
• Microsoft Sharepoint • Interwoven Repository
• OpenText LiveLink • IBM CM
• Day CRX • EMC Documentum
8
23. JCR-implementasjoner
• Apache Jackrabbit • IBM FileNet P8
• Oracle XML DB • Xythos Repository
• exo Platform • Alfresco ECM
• Microsoft Sharepoint • Interwoven Repository
• OpenText LiveLink • IBM CM
• Day CRX • EMC Documentum
• OpenJCR (java.net)
8
24. JCR-implementasjoner
• Apache Jackrabbit • IBM FileNet P8
• Oracle XML DB • Xythos Repository
• exo Platform • Alfresco ECM
• Microsoft Sharepoint • Interwoven Repository
• OpenText LiveLink • IBM CM
• Day CRX • EMC Documentum
• OpenJCR (java.net)
8
25. JCR-applikasjoner
• Oracle Portal • Enonic Vertical Site • IBM Workplace
Web Content
• BEA Portal • Hippo CMS Management
• JBoss Portal • jLibrary • Day Communiqué
• JBoss DNA • Magnolia CMS • Apache James
• Sun OpenPortal • Drools • Alfresco ECMS
• Fast Enterprise • BEA WebLogic • Idium Web (snart!)
Search Portal
9
26. JSR-170
JSR-170
❝ The API should be a standard,
implementation independent way to
access content bi-directionally on a
granular level to a content repository”
10
27. JSR-170
JSR-170
❝ The API should be a standard,
implementation independent way to
access content bi-directionally on a
granular level to a content repository”
10
31. Java Content Repository
Database Filsystem
et ur
Integrit Strukt
Lese-
tilgang
Spør rin
g er
Trigger
e Skrive-
tilgang
11
32. Java Content Repository
Database Filsystem
et ur
Integrit Strukt i
Lese- Hierark s–
Tilgang
tilgang kontrol
l
Spør rin
g er
Trigger
e Skrive- Låsing Binær -
tilgang data
11
33. Java Content Repository
Database Filsystem
et ur
Integrit Strukt i
Lese- Hierark s–
Tilgang
tilgang kontrol
l
Spør rin
g er
Trigger
e Skrive- Låsing Binær -
tilgang data
Java Content Repository
11
34. Java Content Repository
Database Filsystem
et ur
Integrit Strukt i
Lese- Hierark s–
Tilgang
tilgang kontrol
l
Spør rin
g er
Trigger
e Skrive- Låsing Binær -
tilgang data
Java Content Repository
12
35. Java Content Repository
Database Filsystem
But wait,
et ur
Integrit Strukt i
Lese- Hierark s–
Tilgang
tilgang kontrol
l
Spør rin
g er
Trigger
e Skrive- Låsing Binær -
tilgang data
there’s more!
Java Content Repository
12
36. Java Content Repository
Database Filsystem
et ur
Integrit Strukt i
Lese- Hierark s–
Tilgang
tilgang kontrol
l
Spør rin
g er
Trigger
e Skrive- Låsing Binær -
tilgang data
Java Content Repository
12
37. Java Content Repository
Database Filsystem
et ur
Integrit Strukt i
Lese- Hierark s–
Tilgang
tilgang kontrol
l
Spør rin
g er
Trigger
e Skrive- Låsing Binær -
tilgang data
Java Content Repository
13
38. Java Content Repository
Database Filsystem
et ur
Integrit Strukt i
Lese- Hierark s–
Tilgang
tilgang kontrol
l
Spør rin
g er
Trigger
e Skrive- Låsing Binær -
tilgang data
st-
Fulltek PI
søk Java A
ne ring ølge
Versjo Rekkef
uktur
Fri str
Multi- Event-
r
value listene
Java Content Repository
13
53. Innhold først,
struktur senere
• JCR gjør det mulig å lagre data fritt strukturert
• Trenger ikke sette opp tabeller med felter
16
54. Innhold først,
struktur senere
• JCR gjør det mulig å lagre data fritt strukturert
• Trenger ikke sette opp tabeller med felter
• Restriksjoner kan innføres etterhvert
16
55. Innhold først,
struktur senere
• JCR gjør det mulig å lagre data fritt strukturert
• Trenger ikke sette opp tabeller med felter
• Restriksjoner kan innføres etterhvert
• Hierarki vil ofte være tilstrekkelig struktur
– unngå referanser på tvers av hierarkiet
16
58. Blogg-applikasjon
RDBS-modell:
Blog Post
blogId blogId*
author postId
title
text
date
post blog
id name author title text
Id Id
First Intet mer
1 Vidars blogg Vidar 1 1
post! å ...
2 ... ... 2 1 ... ...
... ... ... ... ... ... ...
17
59. Blogg-applikasjon
RDBS-modell:
Blog Post
blogId blogId*
author postId
title
text
date
image
post blog
id name author title text image
Id Id
First Intet mer
1 Vidars blogg Vidar 1 1 NULL
post! å ...
2 ... ... 2 1 ... ... NULL
... ... ... ... ... ... ... NULL
17
60. Blogg-applikasjon
RDBS-modell:
Blog Post Attachment
blogId blogId* attachmentId
author postId postId*
title filename
text
date
post blog attach
id name author title text postId title
Id Id mentId
First Intet mer
1 Vidars blogg Vidar 1 1 1 1 feriebilde.jpg
post! å ...
2 ... ... 2 1 ... ... 2 1 ...
... ... ... ... ... ... ... ... ... ...
17
71. The Dynamic
OSGi Module System
for Java
• Open Services Gateway initiative
21
72. The Dynamic
OSGi Module System
for Java
• Open Services Gateway initiative
• Funksjonalitet (kode) pakkes i bundler
21
73. The Dynamic
OSGi Module System
for Java
• Open Services Gateway initiative
• Funksjonalitet (kode) pakkes i bundler
• En bundle kan startes, stoppes, oppgraderes run-time
(hot-deploy)
21
74. The Dynamic
OSGi Module System
for Java
• Open Services Gateway initiative
• Funksjonalitet (kode) pakkes i bundler
• En bundle kan startes, stoppes, oppgraderes run-time
(hot-deploy)
• Bundler kan ha avhengigheter til andre bundler
21
75. The Dynamic
OSGi Module System
for Java
• Open Services Gateway initiative
• Funksjonalitet (kode) pakkes i bundler
• En bundle kan startes, stoppes, oppgraderes run-time
(hot-deploy)
• Bundler kan ha avhengigheter til andre bundler
• En bundle eksporterer gitte java-pakker til andre
pakker
21
80. Standard Java-pakkemodell
Package1 Package2
public class public class
Package1.ClassB Package2.ClassA
public void doSomething()
public void accessIt()
{
{
ImplClass some =
new Package1.PublicClass();
new ImplClass();
new Package1.ImplClass();
some.getSomething();
}
}
class Package1.ImplClass
private String something;
public getSomething()
22
81. Standard Java-pakkemodell
Package1 Package2
public class public class
Package1.ClassB Package2.ClassA
public void doSomething()
public void accessIt()
{
{
ImplClass some =
new Package1.PublicClass();
new ImplClass();
new Package1.ImplClass();
some.getSomething();
}
}
class Package1.ImplClass
private String something;
public getSomething()
22
82. Standard Java-pakkemodell
Package1 Package2
public class public class
Package1.ClassB Package2.ClassA
public void doSomething()
public void accessIt()
{
{
ImplClass some =
new Package1.PublicClass();
new ImplClass();
new Package1.ImplClass();
some.getSomething();
}
}
class Package1.ImplClass
private String something;
public getSomething()
22
83. OSGi bundles
Package1 Package2
public class public class
Package1.ClassB Package2.ClassA
public void doSomething()
{
ImplClass some = public void accessIt()
new ImplClass(); {...
some.getSomething(); }
}
class Package1.ImplClass
private String something;
public getSomething()
23
84. OSGi bundles
MyBundle.jar
Package1 Package2
public class public class
Package1.ClassB Package2.ClassA
public void doSomething()
{
ImplClass some = public void accessIt()
new ImplClass(); {...
some.getSomething(); }
}
class Package1.ImplClass
private String something;
public getSomething()
23
85. OSGi bundles
MyBundle.jar [exports Package2]
Package1 Package2
public class public class
Package1.ClassB Package2.ClassA
public void doSomething()
{
ImplClass some = public void accessIt()
new ImplClass(); {...
some.getSomething(); }
}
class Package1.ImplClass
private String something;
public getSomething()
23
86. OSGi bundles
MyBundle.jar [exports Package2] YourBundle
Package1 Package2
public class public class
Package1.ClassB Package2.ClassA
public void doSomething()
{
ImplClass some = public void accessIt()
new ImplClass(); {...
some.getSomething(); }
}
class Package1.ImplClass
private String something;
public getSomething()
23
87. OSGi bundles
MyBundle.jar [exports Package2] YourBundle
Package1 Package2 PackageX
public class public class public class
Package1.ClassB Package2.ClassA PackageX.SomeClass
public void doSomething()
{
ImplClass some = public void accessIt()
new ImplClass(); {... import Package2;
some.getSomething(); } import Package1;
}
public void foo()
class Package1.ImplClass
{
...
private String something; }
public getSomething()
23
88. OSGi bundles
MyBundle.jar [exports Package2] YourBundle
Package1 Package2 PackageX
public class public class public class
Package1.ClassB Package2.ClassA PackageX.SomeClass
public void doSomething()
{
ImplClass some = public void accessIt()
new ImplClass(); {... import Package2;
some.getSomething(); } import Package1;
}
public void foo()
class Package1.ImplClass
{
...
private String something; }
public getSomething()
23
89. OSGi bundles
MyBundle.jar [exports Package2] YourBundle
Package1 Package2 PackageX
public class public class public class
Package1.ClassB Package2.ClassA PackageX.SomeClass
public void doSomething()
{
ImplClass some = public void accessIt()
new ImplClass(); {... import Package2;
some.getSomething(); } import Package1;
}
public void foo()
class Package1.ImplClass
{
...
private String something; }
public getSomething()
23
90. OSGi bundles
MyBundle.jar [exports Package2] YourBundle
Package1 Package2 PackageX
public class public class public class
Package1.ClassB Package2.ClassA PackageX.SomeClass
public void doSomething()
{
ImplClass some = public void accessIt()
new ImplClass(); {... import Package2;
some.getSomething(); } import Package1;
}
public void foo()
class Package1.ImplClass
{
...
private String something; }
public getSomething()
23
92. OSGi i Apache Sling
• Hele Sling-plattformen er en serie med
OSGi-bundles
24
93. OSGi i Apache Sling
• Hele Sling-plattformen er en serie med
OSGi-bundles
• Lett å bytte ut bundles/komponenter med
egen funksjonalitet
24
94. OSGi i Apache Sling
• Hele Sling-plattformen er en serie med
OSGi-bundles
• Lett å bytte ut bundles/komponenter med
egen funksjonalitet
• Lett å utvide med egne bundles
24
97. Behov for egne bundles
• Egne innholdstilbydere
• Egne servleter som svarer på bestemte
requester
25
98. Behov for egne bundles
• Egne innholdstilbydere
• Egne servleter som svarer på bestemte
requester
• Initielt innhold
25
99. Behov for egne bundles
• Egne innholdstilbydere
• Egne servleter som svarer på bestemte
requester
• Initielt innhold
• Plugin-moduler til Jackrabbit
25
103. REST
• REpresentional State Transfer
• All state holdes av klienten
27
104. REST
• REpresentional State Transfer
• All state holdes av klienten
• Unngår server-side sessions
27
105. REST
• REpresentional State Transfer
• All state holdes av klienten
• Unngår server-side sessions
• Back-to-basic: Bruke HTTP-verbene som de var ment
27
106. REST
• REpresentional State Transfer
• All state holdes av klienten
• Unngår server-side sessions
• Back-to-basic: Bruke HTTP-verbene som de var ment
• GET henter
• POST lagrer
• PUT oppdaterer
• DELETE sletter
27
109. URLer med mening
• URLen peker til en ressurs, ikke en metode
• http://domain.com/?module=Articles;action=Article.publicShow;ID=8402
28
110. URLer med mening
• URLen peker til en ressurs, ikke en metode
• http://domain.com/?module=Articles;action=Article.publicShow;ID=8402
Article.publicShow
28
111. URLer med mening
• URLen peker til en ressurs, ikke en metode
• 8402
http://domain.com/?module=Articles;action=Article.publicShow;ID=8402
Article.publicShow
28
112. URLer med mening
• URLen peker til en ressurs, ikke en metode
• 8402
http://domain.com/?module=Articles;action=Article.publicShow;ID=8402
Article.publicShow
• http://domain.com/articles/siste_nytt_fra_javazone
28
114. Alt kan uttrykkes med
GET, POST, PUT, DELETE
Non-REST
GET /listWebshopOrders
POST /submitWebshopOrder?name=...
Takk, ordren din er registrert.
GET /getWebshopOrderDetail?id=352
POST /cancelWebshopOrder?id=352
POST /updateWebshopOrder?id=352&...
29
115. Alt kan uttrykkes med
GET, POST, PUT, DELETE
Non-REST REST
GET /listWebshopOrders GET /webshop/orders
POST /submitWebshopOrder?name=... POST /webshop/orders/
Takk, ordren din er registrert. 201 Created
Location: /webshop/orders/352
GET /getWebshopOrderDetail?id=352 GET /webshop/orders/352
POST /cancelWebshopOrder?id=352 DELETE /webshop/orders/352
POST /updateWebshopOrder?id=352&... PUT /webshop/orders/352
29
116. Alt kan uttrykkes med
GET, POST, PUT, DELETE
Non-REST REST
GET /listWebshopOrders GET /webshop/orders
POST /submitWebshopOrder?name=... POST /webshop/orders/
Takk, ordren din er registrert. 201 Created
Location: /webshop/orders/352
GET /getWebshopOrderDetail?id=352 GET /webshop/orders/352
POST /cancelWebshopOrder?id=352 DELETE /webshop/orders/352
POST /updateWebshopOrder?id=352&... PUT /webshop/orders/352
29
117. Alt kan uttrykkes med
GET, POST, PUT, DELETE
Non-REST REST
GET /listWebshopOrders GET /webshop/orders
POST /submitWebshopOrder?name=... POST /webshop/orders/
Takk, ordren din er registrert. 201 Created
Location: /webshop/orders/352
GET /getWebshopOrderDetail?id=352 GET /webshop/orders/352
POST /cancelWebshopOrder?id=352 DELETE /webshop/orders/352
POST /updateWebshopOrder?id=352&... PUT /webshop/orders/352
29
118. Alt kan uttrykkes med
GET, POST, PUT, DELETE
Non-REST REST
GET /listWebshopOrders GET /webshop/orders
POST /submitWebshopOrder?name=... POST /webshop/orders/
Takk, ordren din er registrert. 201 Created
Location: /webshop/orders/352
GET /getWebshopOrderDetail?id=352 GET /webshop/orders/352
POST /cancelWebshopOrder?id=352 DELETE /webshop/orders/352
POST /updateWebshopOrder?id=352&... PUT /webshop/orders/352
29
119. Alt kan uttrykkes med
GET, POST, PUT, DELETE
Non-REST REST
GET /listWebshopOrders GET /webshop/orders
POST /submitWebshopOrder?name=... POST /webshop/orders/
Takk, ordren din er registrert. 201 Created
Location: /webshop/orders/352
GET /getWebshopOrderDetail?id=352 GET /webshop/orders/352
POST /cancelWebshopOrder?id=352 DELETE /webshop/orders/352
POST /updateWebshopOrder?id=352&... PUT /webshop/orders/352
29
132. Egenskaper ved en ressurs
• Path
• f.eks. pathen til en node i JCR
35
133. Egenskaper ved en ressurs
• Path
• f.eks. pathen til en node i JCR
• Type
• for JCR-noder: sling:resourceType
35
134. Egenskaper ved en ressurs
• Path
• f.eks. pathen til en node i JCR
• Type
• for JCR-noder: sling:resourceType
• Metadata
• f.eks. sist endret-dato
35
136. Resource Resolver
• Sling bruker ressurs-treet som utgangspunkt for
URL-resolving
36
137. Resource Resolver
• Sling bruker ressurs-treet som utgangspunkt for
URL-resolving
Vidars blogg First post feriebilde.jpg
author: Vidar text: Intet mer å... jcr:data: ...
date: 08-09-2009
Second p..
text: ...
date: ...
36
138. Resource Resolver
• Sling bruker ressurs-treet som utgangspunkt for
URL-resolving
http://domain.com/vidars_blogg/first_post.fulltext.html
Vidars blogg First post feriebilde.jpg
author: Vidar text: Intet mer å... jcr:data: ...
date: 08-09-2009
Second p..
text: ...
date: ...
36
139. Resource Resolver
• Sling bruker ressurs-treet som utgangspunkt for
URL-resolving
http://domain.com/vidars_blogg/first_post.fulltext.html
Vidars blogg First post feriebilde.jpg
author: Vidar text: Intet mer å... jcr:data: ...
date: 08-09-2009
Second p..
text: ...
date: ...
36
142. Rendering av ressurser
• En ressurs kan rendres av en servlet eller
et skript
• Ressursens ressurstype bestemmer hvilken
servlet/skript som velges
37
143. Rendering av ressurser
• En ressurs kan rendres av en servlet eller
et skript
• Ressursens ressurstype bestemmer hvilken
servlet/skript som velges
• Servleter/skript finnes i det samme virtuelle
ressurstreet
37
157. Request-prosessering
1. Finn fram til ressursen
Kilde: request-URLen
2. Frinn fram servlet/script til prosessering
Kilde: resourceType, selectors og
extension
40
158. Request-prosessering
1. Finn fram til ressursen
Kilde: request-URLen
2. Frinn fram servlet/script til prosessering
Kilde: resourceType, selectors og
extension
3. Kall evt. servlet-filtere
40
159. Request-prosessering
1. Finn fram til ressursen
Kilde: request-URLen
2. Frinn fram servlet/script til prosessering
Kilde: resourceType, selectors og
extension
3. Kall evt. servlet-filtere
4. Kall servleten/skriptet
40
160. Request-prosessering
1. Finn fram til ressursen Reso ur
ce-first
process
ing
Kilde: request-URLen
2. Frinn fram servlet/script til prosessering
Kilde: resourceType, selectors og
extension
3. Kall evt. servlet-filtere
4. Kall servleten/skriptet
40
162. Hva med min egen kode?
• Java-kode pakkes i OSGi-bundler
41
163. Hva med min egen kode?
• Java-kode pakkes i OSGi-bundler
• Bundlen deployes til en kjørende Sling-
instans (hot-deploy)
41
164. Din egen servlet
public class MyServlet extends HttpServlet {
doGet(HttpServletRequest req,
HttpServletResponse res) {
res.getWriter().println(author);
}
}
42
165. Din egen servlet
/**
* @scr.service interface="javax.servlet.Servlet"
* @scr.property name="sling.servlet.paths"
* value="/apps/bloggpost/fulltext/html"
*/
public class MyServlet extends HttpServlet {
doGet(HttpServletRequest req,
HttpServletResponse res) {
res.getWriter().println(author);
}
}
42
166. Din egen servlet
/**
* @scr.service interface="javax.servlet.Servlet"
* @scr.property name="sling.servlet.paths"
* value="/apps/bloggpost/fulltext/html"
*/
public class MyServlet extends SlingSafeMethodsServlet {
doGet(SlingHttpServletRequest req,
SlingHttpServletResponse res) {
res.getWriter().println(author);
}
}
42
184. Ressurs-rendering i ESP
First post
body: Intet mer å...
date: 08-09-2009
sling:resourceType: bloggpost
author: Vidar
summary: Alltid drømt om å v..
47
185. Ressurs-rendering i ESP
<h1><%=currentNode.name%></h1>
First post
<% body: Intet mer å...
if (currentNode.author) { %> date: 08-09-2009
sling:resourceType: bloggpost
author: Vidar
Av <%=currentNode.author%>
summary: Alltid drømt om å v..
<% } %>
<p style=”font-weight: bold”><%=currentNode.summary%></p>
<%=currentNode.body%>
<%
sling.include(currentNode.path + “images.html”);
%>
47
186. Ressurs-rendering i ESP
/apps/bloggpost/fulltext/html.esp
<h1><%=currentNode.name%></h1>
First post
<% body: Intet mer å...
if (currentNode.author) { %> date: 08-09-2009
sling:resourceType: bloggpost
author: Vidar
Av <%=currentNode.author%>
summary: Alltid drømt om å v..
<% } %>
<p style=”font-weight: bold”><%=currentNode.summary%></p>
<%=currentNode.body%>
<%
sling.include(currentNode.path + “images.html”);
%>
47
198. Litt for simpelt for deg?
• Hva med
• On-the-fly skalering av bilder
• RSS-feed
• Kommentarer
• Separat admin-grensesnitt
54
199. Hva skjedde her?
Koden finnes på http://svn.apache.org/repos/asf/sling/trunk/samples/espblog/
55
200. Hva skjedde her?
admin.esp ThumbnailGeneratorService.java
edit.esp ThumbnailGeneratorServiceImpl.java
html.esp
list.esp
menu.esp
xml.esp
header.esp
Koden finnes på http://svn.apache.org/repos/asf/sling/trunk/samples/espblog/
55
201. Hva skjedde her?
admin.esp ThumbnailGeneratorService.java
edit.esp ThumbnailGeneratorServiceImpl.java
html.esp
list.esp
menu.esp
xml.esp
header.esp
Koden finnes på http://svn.apache.org/repos/asf/sling/trunk/samples/espblog/
55
202. Hva skjedde her?
admin.esp ThumbnailGeneratorService.java
edit.esp ThumbnailGeneratorServiceImpl.java
html.esp
list.esp
menu.esp
xml.esp
header.esp
Koden finnes på http://svn.apache.org/repos/asf/sling/trunk/samples/espblog/
55
203. Thumbnail-generator: OSGi-komponent
import javax.jcr.*;
import javax.jcr.observation.*;
import org.osgi.service.component.ComponentContext;
/**
* Observerer endringer under /content/espblog, og
* genererer thumbnails for bilder som lastes opp.
* @scr.service
* @scr.component immediate=”true”
*/
public class ThumbnailGeneratorServiceImpl implements
ThumbnailGeneratorService, EventListener {
204. Registrere EventListener
/** @scr.reference (settes automatisk av OSGi-rammeverket*/
private SlingRepository repository;
/** kalles av OSGi-rammeverket når komponenten startes */
protected void activate(ComponentContext context) {
Session s = repository.loginAdministrative();
// Observer nt:file NODE_ADDED
ObservationManager m = s.getWorkspace().getObservationManager();
String[] types = {“nt:file”};
m.addEventListener(
this,
Event.NODE_ADDED,
“/espblog/posts”, ...
);
}
205. Eventhandler
/**
* Kalles av JCR-implementasjonen hver gang det skjer en
* event som vi har registrert oss for
*/
public void onEvent(EventIterator it) {
while (it.hasNext()) {
Event event = it.nextEvent();
String p = event.getPath();
if (!p.contains(“thumbnails”)) {
Node n = session.getRootNode().getNode(p);
createThumbnails(addedNode);
}
}
}
208. En typisk Sling-applikasjon
• JCR-funksjonalitet
• WebDAV
• Observation
• Sling-snacks
• Enkel skript-mapping
• REST-grensesnitt
• Innholdslasting
209. En typisk Sling-applikasjon
• JCR-funksjonalitet
• WebDAV
• Observation
• Sling-snacks
• Enkel skript-mapping
• REST-grensesnitt
• Innholdslasting
• Alt pakket i en OSGi-bundle - deployes til server
211. Bør du vurdere
Apache Sling / JCR?
• Behandler du innhold?
60
212. Bør du vurdere
Apache Sling / JCR?
• Behandler du innhold?
• Ja, det gjør du.
60
213. Bør du vurdere
Apache Sling / JCR?
• Behandler du innhold? ROA =
Reso ur
Oriente
ce
• Ja, det gjør du. Alt er innhold!
d
Archite
cture
60
214. Bør du vurdere
Apache Sling / JCR?
• Behandler du innhold? ROA =
Reso ur
Oriente
ce
• Ja, det gjør du. Alt er innhold!
d
Archite
cture
• Lei av å måtte endre databasestrukturen for
å innføre ny funksjonalitet?
60
215. Bør du vurdere
Apache Sling / JCR?
• Behandler du innhold? ROA =
Reso ur
Oriente
ce
• Ja, det gjør du. Alt er innhold!
d
Archite
cture
• Lei av å måtte endre databasestrukturen for
å innføre ny funksjonalitet?
Versjonering Tilgangskontroll Fulltekst-søk
med Apache
Lucene
60
217. Kom i gang
Bygg selv:
> svn checkout http://svn.apache.org/repos/asf/sling/trunk sling
> cd sling
> export MAVEN_OPTS="-Xmx256m -XX:MaxPermSize=128m"
> mvn clean install
> cd launchpad/webapp
> mvn jetty:run
218. Kom i gang
Bygg selv:
> svn checkout http://svn.apache.org/repos/asf/sling/trunk sling
> cd sling
> export MAVEN_OPTS="-Xmx256m -XX:MaxPermSize=128m"
> mvn clean install
> cd launchpad/webapp
> mvn jetty:run
219. Kom i gang
Bygg selv:
> svn checkout http://svn.apache.org/repos/asf/sling/trunk sling
> cd sling
> export MAVEN_OPTS="-Xmx256m -XX:MaxPermSize=128m"
> mvn clean install
> cd launchpad/webapp
> mvn jetty:run
Eller last ned ferdig bygd kjørbar .jar eller .war
http://sling.apache.org/site/downloads.cgi
221. Oppsummering
• Lett å komme i gang
• Legg til innhold, et par script, og du har
en applikasjon
62
222. Oppsummering
• Lett å komme i gang
• Legg til innhold, et par script, og du har
en applikasjon
• Fleksibelt og dynamisk
• BYOB (Bring Your Own Bundles)
62
223. Oppsummering
• Lett å komme i gang
• Legg til innhold, et par script, og du har
en applikasjon
• Fleksibelt og dynamisk
• BYOB (Bring Your Own Bundles)
• Fremdeles ungt, stor økning i brukerbase
62
224. Oppsummering
• Lett å komme i gang
• Legg til innhold, et par script, og du har
en applikasjon
• Fleksibelt og dynamisk
• BYOB (Bring Your Own Bundles)
• Fremdeles ungt, stor økning i brukerbase
• Buzzword-compliant
Hot-
REST JSON Script
d eploy
62
7 pkt
DEFINISJON
JCR
OSGi
REST
SLING TILF&#xD8;RER
DEMO
NOE FOR DEG
F&#xF8;rst en definisjon av hva Sling er
S&#xE5; til Java Content Repository, som Sling bygger p&#xE5;
OSGi og REST er ogs&#xE5; viktige begreper
S&#xE5; g&#xE5;r vi grundigere inn p&#xE5; hva Sling tilbyr
S&#xE5; en demo av en applikasjon
Til slutt ser vi p&#xE5; hvilke problemer Sling l&#xF8;ser
Klikk for hver bullet
3 pkt
UTVIKLER I IDIUM
BASERT P&#xC5; SLING
COMMITTER
Committer - kan bidra til prosjektet og p&#xE5;virke det
Klikk for hver bullet
3 pkt
UTVIKLER I IDIUM
BASERT P&#xC5; SLING
COMMITTER
Committer - kan bidra til prosjektet og p&#xE5;virke det
Klikk for hver bullet
3 pkt
UTVIKLER I IDIUM
BASERT P&#xC5; SLING
COMMITTER
Committer - kan bidra til prosjektet og p&#xE5;virke det
Hva er det_ vi skal snakke om
[KLIKK]
3pkt
&#x201C;the simplest device for delivering content very fast&#x201D; st&#xE5;r det i PR-materiellet
4 pkt
ENKELT, RASKT, INNHOLD
DEFINERE INNHOLD SEINERE
WEB-RAMMEVERK DEDIKERT TIL JCR
APACHE LICENSE
- det dreier seg alts&#xE5; om *innhold*, definisjon seinere
- den raskeste m&#xE5;ten &#xE5; utvikle innholdsbaserte applikasjoner
Apache-prosjekt = &#xE5;pen kildekode, Apache License er en av de aller frieste lisensene
Hva er det_ vi skal snakke om
[KLIKK]
3pkt
&#x201C;the simplest device for delivering content very fast&#x201D; st&#xE5;r det i PR-materiellet
4 pkt
ENKELT, RASKT, INNHOLD
DEFINERE INNHOLD SEINERE
WEB-RAMMEVERK DEDIKERT TIL JCR
APACHE LICENSE
- det dreier seg alts&#xE5; om *innhold*, definisjon seinere
- den raskeste m&#xE5;ten &#xE5; utvikle innholdsbaserte applikasjoner
Apache-prosjekt = &#xE5;pen kildekode, Apache License er en av de aller frieste lisensene
Hva er det_ vi skal snakke om
[KLIKK]
3pkt
&#x201C;the simplest device for delivering content very fast&#x201D; st&#xE5;r det i PR-materiellet
4 pkt
ENKELT, RASKT, INNHOLD
DEFINERE INNHOLD SEINERE
WEB-RAMMEVERK DEDIKERT TIL JCR
APACHE LICENSE
- det dreier seg alts&#xE5; om *innhold*, definisjon seinere
- den raskeste m&#xE5;ten &#xE5; utvikle innholdsbaserte applikasjoner
Apache-prosjekt = &#xE5;pen kildekode, Apache License er en av de aller frieste lisensene
Hva er det_ vi skal snakke om
[KLIKK]
3pkt
&#x201C;the simplest device for delivering content very fast&#x201D; st&#xE5;r det i PR-materiellet
4 pkt
ENKELT, RASKT, INNHOLD
DEFINERE INNHOLD SEINERE
WEB-RAMMEVERK DEDIKERT TIL JCR
APACHE LICENSE
- det dreier seg alts&#xE5; om *innhold*, definisjon seinere
- den raskeste m&#xE5;ten &#xE5; utvikle innholdsbaserte applikasjoner
Apache-prosjekt = &#xE5;pen kildekode, Apache License er en av de aller frieste lisensene
Hva er det_ vi skal snakke om
[KLIKK]
3pkt
&#x201C;the simplest device for delivering content very fast&#x201D; st&#xE5;r det i PR-materiellet
4 pkt
ENKELT, RASKT, INNHOLD
DEFINERE INNHOLD SEINERE
WEB-RAMMEVERK DEDIKERT TIL JCR
APACHE LICENSE
- det dreier seg alts&#xE5; om *innhold*, definisjon seinere
- den raskeste m&#xE5;ten &#xE5; utvikle innholdsbaserte applikasjoner
Apache-prosjekt = &#xE5;pen kildekode, Apache License er en av de aller frieste lisensene
Sling er en plattform, som igjen er ...
3pkt
BYGD P&#xC5; JCR
basert p&#xE5; REST
drevet av OSGi
... og vi skal se p&#xE5; disse delene
Sling er en plattform, som igjen er ...
3pkt
BYGD P&#xC5; JCR
basert p&#xE5; REST
drevet av OSGi
... og vi skal se p&#xE5; disse delene
Sling er en plattform, som igjen er ...
3pkt
BYGD P&#xC5; JCR
basert p&#xE5; REST
drevet av OSGi
... og vi skal se p&#xE5; disse delene
Tre standarder som Sling bygger p&#xE5;. F&#xF8;rst:
JCR - Java Content Repository
Tre standarder som Sling bygger p&#xE5;. F&#xF8;rst:
JCR - Java Content Repository
Tre standarder som Sling bygger p&#xE5;. F&#xF8;rst:
JCR - Java Content Repository
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
5 pkt
JSR-170: JCR 1.0
JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt
5pkt
JCR 1.0 og 2.0
STORE FIRMAER ST&#xD8;TTER
HIERARKISK DATABASE
NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER
RIKE DATATYPER
... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak
[KLIKK]
Hierarki - ikke tabeller / kolonner
Kommer tilbake til datatyper/-struktur
4 pkt
FLERE FORSKJELLIGE IMPLEMENTASJONER AV JCR-STANDARDEN
NYTT: OpenJCR
APACHE JACKRABBIT ER REFERANSEIMPL, og shippes med Sling
DE FLESTE BYGD P&#xC5; JACKRABBIT
Apache Jackrabbit er referanseimplementasjonen, og den som shippes med Sling
Microsoft Sharepoint - via connector fra Day
Mange av disse er bygd p&#xE5; Jackrabbit, men utvidet med propriet&#xE6;r funksjonalitet
4 pkt
FLERE FORSKJELLIGE IMPLEMENTASJONER AV JCR-STANDARDEN
NYTT: OpenJCR
APACHE JACKRABBIT ER REFERANSEIMPL, og shippes med Sling
DE FLESTE BYGD P&#xC5; JACKRABBIT
Apache Jackrabbit er referanseimplementasjonen, og den som shippes med Sling
Microsoft Sharepoint - via connector fra Day
Mange av disse er bygd p&#xE5; Jackrabbit, men utvidet med propriet&#xE6;r funksjonalitet
2pkt
NOEN KJENTE NAVN, bl.a. NORSKE
MYE ENTERPRISE, men SLING EGNER SEG OGS&#xC5; FOR MINDRE L&#xD8;SNINGER => ref kolibri
Antakelig noen kjente navn her. De fleste bruker Jackrabbit som implementasjon.
Mye enterprise-systemer, men med Sling egner JCR seg ogs&#xE5; for mindre l&#xF8;sninger. Derfor Idium Web.
2pkt
JSR-STANDARDER KAN V&#xC6;RE KRYPTISKE
N&#xD8;KKELEN ER &#xE5; forst&#xE5; HVA CONTENT REPOSITORY er
N&#xE5;r det gjelder JSR-standardene, s&#xE5; kan de v&#xE6;re kryptiske.
[KLIKK]
N&#xF8;kkelen er &#xE5; forst&#xE5; hva et &#x201C;content repository&#x201D; er
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
3pkt
DB og FILSYSTEM - TO FORSKJELLIGE VERDENER
FELLES: LESE- og SKRIVE-TILGANG
JCR: BESTE FRA BEGGE VERDENER
Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener
Men det er et par ting felles: Lese- og skrivetilgang
(Til slutt): JCR tar det beste fra begge verdener
MEN DET ER SELVF&#xD8;LGELIG IKKE ALT
(Klikk en gang til for &#xE5; f&#xE5; g&#xE5; videre fra plakaten)
MEN DET ER SELVF&#xD8;LGELIG IKKE ALT
(Klikk en gang til for &#xE5; f&#xE5; g&#xE5; videre fra plakaten)
I TILLEGG:
Fulltekst-s&#xF8;k
Fri struktur
Versjonering
Flerverdi-felt
Spesifikk rekkef&#xF8;lge
Obervasjon
og alt dette er tilgjengelig gjennom et enkelt Java-API
I TILLEGG:
Fulltekst-s&#xF8;k
Fri struktur
Versjonering
Flerverdi-felt
Spesifikk rekkef&#xF8;lge
Obervasjon
og alt dette er tilgjengelig gjennom et enkelt Java-API
I TILLEGG:
Fulltekst-s&#xF8;k
Fri struktur
Versjonering
Flerverdi-felt
Spesifikk rekkef&#xF8;lge
Obervasjon
og alt dette er tilgjengelig gjennom et enkelt Java-API
I TILLEGG:
Fulltekst-s&#xF8;k
Fri struktur
Versjonering
Flerverdi-felt
Spesifikk rekkef&#xF8;lge
Obervasjon
og alt dette er tilgjengelig gjennom et enkelt Java-API
I TILLEGG:
Fulltekst-s&#xF8;k
Fri struktur
Versjonering
Flerverdi-felt
Spesifikk rekkef&#xF8;lge
Obervasjon
og alt dette er tilgjengelig gjennom et enkelt Java-API
I TILLEGG:
Fulltekst-s&#xF8;k
Fri struktur
Versjonering
Flerverdi-felt
Spesifikk rekkef&#xF8;lge
Obervasjon
og alt dette er tilgjengelig gjennom et enkelt Java-API
I TILLEGG:
Fulltekst-s&#xF8;k
Fri struktur
Versjonering
Flerverdi-felt
Spesifikk rekkef&#xF8;lge
Obervasjon
og alt dette er tilgjengelig gjennom et enkelt Java-API
6pkt
SELVF&#xD8;LGELIG HIERARKI - (ET TRE)
DYP MAN VIL
BRED MAN VIL
NEDERST TIL H&#xD8;YRE: FIL
IKKE VIST: VERSJONERING, S&#xD8;SKEN MED SAMME NAVN
GR&#xD8;NN LEGOGKLOSS = NODE til seinere
S&#xE5;, hvordan ser et repository ut?
Selvf&#xF8;lgelig et hierarki (et tre)
Legg merke til:
- Strukturen kan v&#xE6;re s&#xE5; dyp og bred man vil
- En node kan ha s&#xE5; mange barn man vil
- Noder kan ha forskjellige attributter
- Filnoden nederst til h&#xF8;yre - man kan lagre filer rett i repositoriet
Mange features ikke demonstrert her, som:
- versjonering
- s&#xF8;sken med samme navn
De gr&#xF8;nne legoklossene betyr &#x201C;node&#x201D; - kommer til &#xE5; bruke det seinere
6pkt
SELVF&#xD8;LGELIG HIERARKI - (ET TRE)
DYP MAN VIL
BRED MAN VIL
NEDERST TIL H&#xD8;YRE: FIL
IKKE VIST: VERSJONERING, S&#xD8;SKEN MED SAMME NAVN
GR&#xD8;NN LEGOGKLOSS = NODE til seinere
S&#xE5;, hvordan ser et repository ut?
Selvf&#xF8;lgelig et hierarki (et tre)
Legg merke til:
- Strukturen kan v&#xE6;re s&#xE5; dyp og bred man vil
- En node kan ha s&#xE5; mange barn man vil
- Noder kan ha forskjellige attributter
- Filnoden nederst til h&#xF8;yre - man kan lagre filer rett i repositoriet
Mange features ikke demonstrert her, som:
- versjonering
- s&#xF8;sken med samme navn
De gr&#xF8;nne legoklossene betyr &#x201C;node&#x201D; - kommer til &#xE5; bruke det seinere
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
javax.jcr er JCR-apiet
o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt
session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse
Eksempel p&#xE5; hvordan man henter ut en node.
Tar en node man har, og gir en relativ path til denne.
Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
5pkt
MANGE APP SKAL LEVE *LENGE* - VANSKELIG &#xC5; TA H&#xD8;YDE FOR FREMTIDIGE TYPER DATA
N&#xC5;R MAN IKKE *TRENGER* STRENGE RESTRIKSJONER, B&#xD8;R MAN HELLER IKKE INNF&#xD8;RE DEM
KAN INNF&#xD8;RE RESTRIKSJONER ETTERHVERT
RULES OF DATABASE AGING - ALLE &#x201C;NOT NULL&#x201D; BLIR BORTE
HIERARKI TILSTREKKELIG - MULIG MED KRYSSREFERANSER, MEN UNNG&#xC5; DET
Mange applikasjoner skal leve LENGE, og det er vanskelig &#xE5; ta h&#xF8;yde for fremtidige typer data som skal lagres.
N&#xE5;r man ikke *trenger* &#xE5; sette opp felter fra start, s&#xE5; b&#xF8;r man heller ikke gj&#xF8;re det
Man kan innf&#xF8;re rigide restriksjoner fra start
Rules of Database App Aging: Etterhvert som datasettet blir st&#xF8;rre, blir antallet unntakstilfeller st&#xF8;rre. Alle felter blir etterhvert optional - alle NOT NULL blir borte - TRENGER BEDRE EKSEMPEL:
f.eks. kan ikke feltet &#x201C;stat&#x201D; fylles ut
Et content repository skal leve lenge, og b&#xF8;r kunne h&#xE5;ndtere nye behov etterhvert
Hierarki tilstrekkelig struktur: Det er MULIG &#xE5; lage referanser, men ikke n&#xF8;dvendig, og ofte dumt.
5pkt
MANGE APP SKAL LEVE *LENGE* - VANSKELIG &#xC5; TA H&#xD8;YDE FOR FREMTIDIGE TYPER DATA
N&#xC5;R MAN IKKE *TRENGER* STRENGE RESTRIKSJONER, B&#xD8;R MAN HELLER IKKE INNF&#xD8;RE DEM
KAN INNF&#xD8;RE RESTRIKSJONER ETTERHVERT
RULES OF DATABASE AGING - ALLE &#x201C;NOT NULL&#x201D; BLIR BORTE
HIERARKI TILSTREKKELIG - MULIG MED KRYSSREFERANSER, MEN UNNG&#xC5; DET
Mange applikasjoner skal leve LENGE, og det er vanskelig &#xE5; ta h&#xF8;yde for fremtidige typer data som skal lagres.
N&#xE5;r man ikke *trenger* &#xE5; sette opp felter fra start, s&#xE5; b&#xF8;r man heller ikke gj&#xF8;re det
Man kan innf&#xF8;re rigide restriksjoner fra start
Rules of Database App Aging: Etterhvert som datasettet blir st&#xF8;rre, blir antallet unntakstilfeller st&#xF8;rre. Alle felter blir etterhvert optional - alle NOT NULL blir borte - TRENGER BEDRE EKSEMPEL:
f.eks. kan ikke feltet &#x201C;stat&#x201D; fylles ut
Et content repository skal leve lenge, og b&#xF8;r kunne h&#xE5;ndtere nye behov etterhvert
Hierarki tilstrekkelig struktur: Det er MULIG &#xE5; lage referanser, men ikke n&#xF8;dvendig, og ofte dumt.
5pkt
MANGE APP SKAL LEVE *LENGE* - VANSKELIG &#xC5; TA H&#xD8;YDE FOR FREMTIDIGE TYPER DATA
N&#xC5;R MAN IKKE *TRENGER* STRENGE RESTRIKSJONER, B&#xD8;R MAN HELLER IKKE INNF&#xD8;RE DEM
KAN INNF&#xD8;RE RESTRIKSJONER ETTERHVERT
RULES OF DATABASE AGING - ALLE &#x201C;NOT NULL&#x201D; BLIR BORTE
HIERARKI TILSTREKKELIG - MULIG MED KRYSSREFERANSER, MEN UNNG&#xC5; DET
Mange applikasjoner skal leve LENGE, og det er vanskelig &#xE5; ta h&#xF8;yde for fremtidige typer data som skal lagres.
N&#xE5;r man ikke *trenger* &#xE5; sette opp felter fra start, s&#xE5; b&#xF8;r man heller ikke gj&#xF8;re det
Man kan innf&#xF8;re rigide restriksjoner fra start
Rules of Database App Aging: Etterhvert som datasettet blir st&#xF8;rre, blir antallet unntakstilfeller st&#xF8;rre. Alle felter blir etterhvert optional - alle NOT NULL blir borte - TRENGER BEDRE EKSEMPEL:
f.eks. kan ikke feltet &#x201C;stat&#x201D; fylles ut
Et content repository skal leve lenge, og b&#xF8;r kunne h&#xE5;ndtere nye behov etterhvert
Hierarki tilstrekkelig struktur: Det er MULIG &#xE5; lage referanser, men ikke n&#xF8;dvendig, og ofte dumt.
Blogg-applikasjon: Webapplikasjon for et bloggsystem.
Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster.
Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId.
Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen.
Etterhvert finner man ut at man vil kunne knytte et bilde til en bloggpost. Ny kolonne i tabellen, men vil bare f&#xE5; verdi for nye blogg-innlegg. Gir masse NULL-verdier i gamle rader - alts&#xE5; upraktisk &#xE5; innf&#xF8;re noe restriksjon p&#xE5; feltet (NOT NULL).
Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon.
Legg merke til referansene som opprettholdes av IDer.
Dette fungerer sikkert fint en stund, til FOR EKSEMPEL, man finner ut at man skal &#xE5;pne for kommentarer. Da m&#xE5; databasestrukturen endres igjen.
Blogg-applikasjon: Webapplikasjon for et bloggsystem.
Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster.
Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId.
Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen.
Etterhvert finner man ut at man vil kunne knytte et bilde til en bloggpost. Ny kolonne i tabellen, men vil bare f&#xE5; verdi for nye blogg-innlegg. Gir masse NULL-verdier i gamle rader - alts&#xE5; upraktisk &#xE5; innf&#xF8;re noe restriksjon p&#xE5; feltet (NOT NULL).
Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon.
Legg merke til referansene som opprettholdes av IDer.
Dette fungerer sikkert fint en stund, til FOR EKSEMPEL, man finner ut at man skal &#xE5;pne for kommentarer. Da m&#xE5; databasestrukturen endres igjen.
Blogg-applikasjon: Webapplikasjon for et bloggsystem.
Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster.
Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId.
Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen.
Etterhvert finner man ut at man vil kunne knytte et bilde til en bloggpost. Ny kolonne i tabellen, men vil bare f&#xE5; verdi for nye blogg-innlegg. Gir masse NULL-verdier i gamle rader - alts&#xE5; upraktisk &#xE5; innf&#xF8;re noe restriksjon p&#xE5; feltet (NOT NULL).
Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon.
Legg merke til referansene som opprettholdes av IDer.
Dette fungerer sikkert fint en stund, til FOR EKSEMPEL, man finner ut at man skal &#xE5;pne for kommentarer. Da m&#xE5; databasestrukturen endres igjen.
Blogg-applikasjon: Webapplikasjon for et bloggsystem.
Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster.
Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId.
Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen.
Etterhvert finner man ut at man vil kunne knytte et bilde til en bloggpost. Ny kolonne i tabellen, men vil bare f&#xE5; verdi for nye blogg-innlegg. Gir masse NULL-verdier i gamle rader - alts&#xE5; upraktisk &#xE5; innf&#xF8;re noe restriksjon p&#xE5; feltet (NOT NULL).
Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon.
Legg merke til referansene som opprettholdes av IDer.
Dette fungerer sikkert fint en stund, til FOR EKSEMPEL, man finner ut at man skal &#xE5;pne for kommentarer. Da m&#xE5; databasestrukturen endres igjen.
Blogg-applikasjon: Webapplikasjon for et bloggsystem.
Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster.
Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId.
Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen.
Etterhvert finner man ut at man vil kunne knytte et bilde til en bloggpost. Ny kolonne i tabellen, men vil bare f&#xE5; verdi for nye blogg-innlegg. Gir masse NULL-verdier i gamle rader - alts&#xE5; upraktisk &#xE5; innf&#xF8;re noe restriksjon p&#xE5; feltet (NOT NULL).
Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon.
Legg merke til referansene som opprettholdes av IDer.
Dette fungerer sikkert fint en stund, til FOR EKSEMPEL, man finner ut at man skal &#xE5;pne for kommentarer. Da m&#xE5; databasestrukturen endres igjen.
Blogg-applikasjon: Webapplikasjon for et bloggsystem.
Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster.
Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId.
Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen.
Etterhvert finner man ut at man vil kunne knytte et bilde til en bloggpost. Ny kolonne i tabellen, men vil bare f&#xE5; verdi for nye blogg-innlegg. Gir masse NULL-verdier i gamle rader - alts&#xE5; upraktisk &#xE5; innf&#xF8;re noe restriksjon p&#xE5; feltet (NOT NULL).
Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon.
Legg merke til referansene som opprettholdes av IDer.
Dette fungerer sikkert fint en stund, til FOR EKSEMPEL, man finner ut at man skal &#xE5;pne for kommentarer. Da m&#xE5; databasestrukturen endres igjen.
Blogg-applikasjon: Webapplikasjon for et bloggsystem.
Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster.
Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId.
Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen.
Etterhvert finner man ut at man vil kunne knytte et bilde til en bloggpost. Ny kolonne i tabellen, men vil bare f&#xE5; verdi for nye blogg-innlegg. Gir masse NULL-verdier i gamle rader - alts&#xE5; upraktisk &#xE5; innf&#xF8;re noe restriksjon p&#xE5; feltet (NOT NULL).
Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon.
Legg merke til referansene som opprettholdes av IDer.
Dette fungerer sikkert fint en stund, til FOR EKSEMPEL, man finner ut at man skal &#xE5;pne for kommentarer. Da m&#xE5; databasestrukturen endres igjen.
Blogg-applikasjon: Webapplikasjon for et bloggsystem.
Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster.
Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId.
Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen.
Etterhvert finner man ut at man vil kunne knytte et bilde til en bloggpost. Ny kolonne i tabellen, men vil bare f&#xE5; verdi for nye blogg-innlegg. Gir masse NULL-verdier i gamle rader - alts&#xE5; upraktisk &#xE5; innf&#xF8;re noe restriksjon p&#xE5; feltet (NOT NULL).
Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon.
Legg merke til referansene som opprettholdes av IDer.
Dette fungerer sikkert fint en stund, til FOR EKSEMPEL, man finner ut at man skal &#xE5;pne for kommentarer. Da m&#xE5; databasestrukturen endres igjen.
Blogg-applikasjon: Webapplikasjon for et bloggsystem.
Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster.
Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId.
Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen.
Etterhvert finner man ut at man vil kunne knytte et bilde til en bloggpost. Ny kolonne i tabellen, men vil bare f&#xE5; verdi for nye blogg-innlegg. Gir masse NULL-verdier i gamle rader - alts&#xE5; upraktisk &#xE5; innf&#xF8;re noe restriksjon p&#xE5; feltet (NOT NULL).
Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon.
Legg merke til referansene som opprettholdes av IDer.
Dette fungerer sikkert fint en stund, til FOR EKSEMPEL, man finner ut at man skal &#xE5;pne for kommentarer. Da m&#xE5; databasestrukturen endres igjen.
Blogg-applikasjon: Webapplikasjon for et bloggsystem.
Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster.
Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId.
Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen.
Etterhvert finner man ut at man vil kunne knytte et bilde til en bloggpost. Ny kolonne i tabellen, men vil bare f&#xE5; verdi for nye blogg-innlegg. Gir masse NULL-verdier i gamle rader - alts&#xE5; upraktisk &#xE5; innf&#xF8;re noe restriksjon p&#xE5; feltet (NOT NULL).
Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon.
Legg merke til referansene som opprettholdes av IDer.
Dette fungerer sikkert fint en stund, til FOR EKSEMPEL, man finner ut at man skal &#xE5;pne for kommentarer. Da m&#xE5; databasestrukturen endres igjen.
4pkt
INGEN PRIM&#xC6;RN&#xD8;KLER
INNF&#xD8;RE VEDLEGG - BARE SLENGE P&#xC5; NY NODE
JCR ST&#xD8;TTER FILER SOM INNHOLD - KAN LAGRE FILA DIREKTE
FLERE VEDLEGG - FLERE FILNODER
&#x201C;Vidars blogg&#x201D; er en toppniv&#xE5;-node, &#x201C;First post&#x201D; og &#x201C;Second post&#x201D; er noder direkte under denne.
Slipper n&#xF8;kler i det hele tatt
N&#xE5;r jeg &#xF8;nsker &#xE5; innf&#xF8;re vedlegg, er det bare &#xE5; slenge p&#xE5; en ny node.
Og JCR st&#xF8;tter ogs&#xE5; filer som innhold, s&#xE5; jeg kan lagre fila direkte sammen med de andre dataene - trenger ikke v&#xE6;re en referanse til en fil p&#xE5; disk eller et BLOB-felt.
4pkt
INGEN PRIM&#xC6;RN&#xD8;KLER
INNF&#xD8;RE VEDLEGG - BARE SLENGE P&#xC5; NY NODE
JCR ST&#xD8;TTER FILER SOM INNHOLD - KAN LAGRE FILA DIREKTE
FLERE VEDLEGG - FLERE FILNODER
&#x201C;Vidars blogg&#x201D; er en toppniv&#xE5;-node, &#x201C;First post&#x201D; og &#x201C;Second post&#x201D; er noder direkte under denne.
Slipper n&#xF8;kler i det hele tatt
N&#xE5;r jeg &#xF8;nsker &#xE5; innf&#xF8;re vedlegg, er det bare &#xE5; slenge p&#xE5; en ny node.
Og JCR st&#xF8;tter ogs&#xE5; filer som innhold, s&#xE5; jeg kan lagre fila direkte sammen med de andre dataene - trenger ikke v&#xE6;re en referanse til en fil p&#xE5; disk eller et BLOB-felt.
4pkt
INGEN PRIM&#xC6;RN&#xD8;KLER
INNF&#xD8;RE VEDLEGG - BARE SLENGE P&#xC5; NY NODE
JCR ST&#xD8;TTER FILER SOM INNHOLD - KAN LAGRE FILA DIREKTE
FLERE VEDLEGG - FLERE FILNODER
&#x201C;Vidars blogg&#x201D; er en toppniv&#xE5;-node, &#x201C;First post&#x201D; og &#x201C;Second post&#x201D; er noder direkte under denne.
Slipper n&#xF8;kler i det hele tatt
N&#xE5;r jeg &#xF8;nsker &#xE5; innf&#xF8;re vedlegg, er det bare &#xE5; slenge p&#xE5; en ny node.
Og JCR st&#xF8;tter ogs&#xE5; filer som innhold, s&#xE5; jeg kan lagre fila direkte sammen med de andre dataene - trenger ikke v&#xE6;re en referanse til en fil p&#xE5; disk eller et BLOB-felt.
4pkt
INGEN PRIM&#xC6;RN&#xD8;KLER
INNF&#xD8;RE VEDLEGG - BARE SLENGE P&#xC5; NY NODE
JCR ST&#xD8;TTER FILER SOM INNHOLD - KAN LAGRE FILA DIREKTE
FLERE VEDLEGG - FLERE FILNODER
&#x201C;Vidars blogg&#x201D; er en toppniv&#xE5;-node, &#x201C;First post&#x201D; og &#x201C;Second post&#x201D; er noder direkte under denne.
Slipper n&#xF8;kler i det hele tatt
N&#xE5;r jeg &#xF8;nsker &#xE5; innf&#xF8;re vedlegg, er det bare &#xE5; slenge p&#xE5; en ny node.
Og JCR st&#xF8;tter ogs&#xE5; filer som innhold, s&#xE5; jeg kan lagre fila direkte sammen med de andre dataene - trenger ikke v&#xE6;re en referanse til en fil p&#xE5; disk eller et BLOB-felt.
4pkt
INGEN PRIM&#xC6;RN&#xD8;KLER
INNF&#xD8;RE VEDLEGG - BARE SLENGE P&#xC5; NY NODE
JCR ST&#xD8;TTER FILER SOM INNHOLD - KAN LAGRE FILA DIREKTE
FLERE VEDLEGG - FLERE FILNODER
&#x201C;Vidars blogg&#x201D; er en toppniv&#xE5;-node, &#x201C;First post&#x201D; og &#x201C;Second post&#x201D; er noder direkte under denne.
Slipper n&#xF8;kler i det hele tatt
N&#xE5;r jeg &#xF8;nsker &#xE5; innf&#xF8;re vedlegg, er det bare &#xE5; slenge p&#xE5; en ny node.
Og JCR st&#xF8;tter ogs&#xE5; filer som innhold, s&#xE5; jeg kan lagre fila direkte sammen med de andre dataene - trenger ikke v&#xE6;re en referanse til en fil p&#xE5; disk eller et BLOB-felt.
2 pkt
HVORDAN UTVIKLE EGEN FUNKSJONALITET TIL SIN SLING-APPLIKASJON
OSGi IKKE STRENGT N&#xD8;DVENDIG (MULIG &#xC5; UNNG&#xC5;), MEN KORT SE P&#xC5; DET
Hvordan utvikler man egen funksjonalitet til sin Sling-applikasjon?
OSGi er ikke n&#xF8;dvendig &#xE5; kunne for &#xE5; lage enkle Sling-applikasjoner, men vi skal se kort p&#xE5; det.
2 pkt
HVORDAN UTVIKLE EGEN FUNKSJONALITET TIL SIN SLING-APPLIKASJON
OSGi IKKE STRENGT N&#xD8;DVENDIG (MULIG &#xC5; UNNG&#xC5;), MEN KORT SE P&#xC5; DET
Hvordan utvikler man egen funksjonalitet til sin Sling-applikasjon?
OSGi er ikke n&#xF8;dvendig &#xE5; kunne for &#xE5; lage enkle Sling-applikasjoner, men vi skal se kort p&#xE5; det.
2 pkt
HVORDAN UTVIKLE EGEN FUNKSJONALITET TIL SIN SLING-APPLIKASJON
OSGi IKKE STRENGT N&#xD8;DVENDIG (MULIG &#xC5; UNNG&#xC5;), MEN KORT SE P&#xC5; DET
Hvordan utvikler man egen funksjonalitet til sin Sling-applikasjon?
OSGi er ikke n&#xF8;dvendig &#xE5; kunne for &#xE5; lage enkle Sling-applikasjoner, men vi skal se kort p&#xE5; det.
Dynamic Module System For Java
Open Services Gateway initiative - navnet ikke lenger i bruk
[klikk]
4pkt
FUNKSJONALITET PAKKES I BUNDLES - SKAL SE HVA EN BUNDLE ER
KAN STARTES, STOPPES, OPPGRADERES - HOT-DEPLOY
BUNDLER KAN HA AVHENGIGHETER TIL ANDRE
BUNDLER EKSPORTERER PAKKER TIL ANDRE BUNDLER
Funksjonalitet pakkes i bundles - skal straks se hva en bundle er
Bundle med JCR-innhold: i tillegg til kode - Sling-spesifikt
Dynamic Module System For Java
Open Services Gateway initiative - navnet ikke lenger i bruk
[klikk]
4pkt
FUNKSJONALITET PAKKES I BUNDLES - SKAL SE HVA EN BUNDLE ER
KAN STARTES, STOPPES, OPPGRADERES - HOT-DEPLOY
BUNDLER KAN HA AVHENGIGHETER TIL ANDRE
BUNDLER EKSPORTERER PAKKER TIL ANDRE BUNDLER
Funksjonalitet pakkes i bundles - skal straks se hva en bundle er
Bundle med JCR-innhold: i tillegg til kode - Sling-spesifikt
Dynamic Module System For Java
Open Services Gateway initiative - navnet ikke lenger i bruk
[klikk]
4pkt
FUNKSJONALITET PAKKES I BUNDLES - SKAL SE HVA EN BUNDLE ER
KAN STARTES, STOPPES, OPPGRADERES - HOT-DEPLOY
BUNDLER KAN HA AVHENGIGHETER TIL ANDRE
BUNDLER EKSPORTERER PAKKER TIL ANDRE BUNDLER
Funksjonalitet pakkes i bundles - skal straks se hva en bundle er
Bundle med JCR-innhold: i tillegg til kode - Sling-spesifikt
Dynamic Module System For Java
Open Services Gateway initiative - navnet ikke lenger i bruk
[klikk]
4pkt
FUNKSJONALITET PAKKES I BUNDLES - SKAL SE HVA EN BUNDLE ER
KAN STARTES, STOPPES, OPPGRADERES - HOT-DEPLOY
BUNDLER KAN HA AVHENGIGHETER TIL ANDRE
BUNDLER EKSPORTERER PAKKER TIL ANDRE BUNDLER
Funksjonalitet pakkes i bundles - skal straks se hva en bundle er
Bundle med JCR-innhold: i tillegg til kode - Sling-spesifikt
Dynamic Module System For Java
Open Services Gateway initiative - navnet ikke lenger i bruk
[klikk]
4pkt
FUNKSJONALITET PAKKES I BUNDLES - SKAL SE HVA EN BUNDLE ER
KAN STARTES, STOPPES, OPPGRADERES - HOT-DEPLOY
BUNDLER KAN HA AVHENGIGHETER TIL ANDRE
BUNDLER EKSPORTERER PAKKER TIL ANDRE BUNDLER
Funksjonalitet pakkes i bundles - skal straks se hva en bundle er
Bundle med JCR-innhold: i tillegg til kode - Sling-spesifikt
EN VANLIG JAVA-KLASSE
PR DEF DEL AV EN PAKKE
HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC
CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE
I EN ANNEN PAKKE HAR VI CLASS A
DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1
MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC
1 pkt
DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA
Jeg kan endre implementasjonen i ImplClass s&#xE5; mye jeg vil, fordi den ikke er tilgjengelig utenfor pakka. Package1 er alts&#xE5; en enhet med et interface.
EN VANLIG JAVA-KLASSE
PR DEF DEL AV EN PAKKE
HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC
CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE
I EN ANNEN PAKKE HAR VI CLASS A
DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1
MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC
1 pkt
DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA
Jeg kan endre implementasjonen i ImplClass s&#xE5; mye jeg vil, fordi den ikke er tilgjengelig utenfor pakka. Package1 er alts&#xE5; en enhet med et interface.
EN VANLIG JAVA-KLASSE
PR DEF DEL AV EN PAKKE
HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC
CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE
I EN ANNEN PAKKE HAR VI CLASS A
DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1
MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC
1 pkt
DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA
Jeg kan endre implementasjonen i ImplClass s&#xE5; mye jeg vil, fordi den ikke er tilgjengelig utenfor pakka. Package1 er alts&#xE5; en enhet med et interface.
EN VANLIG JAVA-KLASSE
PR DEF DEL AV EN PAKKE
HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC
CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE
I EN ANNEN PAKKE HAR VI CLASS A
DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1
MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC
1 pkt
DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA
Jeg kan endre implementasjonen i ImplClass s&#xE5; mye jeg vil, fordi den ikke er tilgjengelig utenfor pakka. Package1 er alts&#xE5; en enhet med et interface.
EN VANLIG JAVA-KLASSE
PR DEF DEL AV EN PAKKE
HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC
CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE
I EN ANNEN PAKKE HAR VI CLASS A
DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1
MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC
1 pkt
DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA
Jeg kan endre implementasjonen i ImplClass s&#xE5; mye jeg vil, fordi den ikke er tilgjengelig utenfor pakka. Package1 er alts&#xE5; en enhet med et interface.
EN VANLIG JAVA-KLASSE
PR DEF DEL AV EN PAKKE
HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC
CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE
I EN ANNEN PAKKE HAR VI CLASS A
DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1
MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC
1 pkt
DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA
Jeg kan endre implementasjonen i ImplClass s&#xE5; mye jeg vil, fordi den ikke er tilgjengelig utenfor pakka. Package1 er alts&#xE5; en enhet med et interface.
I EN OSGi-BUNDLE HAR VI FREMDELES KLASSER OG PAKKER
MEN VI PAKKER DISSE I EN BUNDLE
EN BUNDLE *EKSPORTERER* PAKKER
VI INNF&#xD8;RER EN NY BUNDLE
MED EN KLASSE
VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER
BARE DE SOM EKSPLISITT ER EKSPORTERT
DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN
3 pkt
OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle
VI F&#xC5;R ET LAG TIL MED INNKAPSLING
KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE
Betyr at jeg kan herje s&#xE5; mye jeg vil med implementasjonen i Package1, og v&#xE6;re sikker p&#xE5; at det er bakoverkompatibelt
Package1 er usynlig for andre bundler
- m.a.o vi kan ha private klasser
Package2 fungerer som et interface for hele bundle&#x2019;n
Dette betyr at mye kode kan skjules, og man f&#xE5;r veldig rene grensesnitt mellom komponenter.
I EN OSGi-BUNDLE HAR VI FREMDELES KLASSER OG PAKKER
MEN VI PAKKER DISSE I EN BUNDLE
EN BUNDLE *EKSPORTERER* PAKKER
VI INNF&#xD8;RER EN NY BUNDLE
MED EN KLASSE
VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER
BARE DE SOM EKSPLISITT ER EKSPORTERT
DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN
3 pkt
OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle
VI F&#xC5;R ET LAG TIL MED INNKAPSLING
KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE
Betyr at jeg kan herje s&#xE5; mye jeg vil med implementasjonen i Package1, og v&#xE6;re sikker p&#xE5; at det er bakoverkompatibelt
Package1 er usynlig for andre bundler
- m.a.o vi kan ha private klasser
Package2 fungerer som et interface for hele bundle&#x2019;n
Dette betyr at mye kode kan skjules, og man f&#xE5;r veldig rene grensesnitt mellom komponenter.
I EN OSGi-BUNDLE HAR VI FREMDELES KLASSER OG PAKKER
MEN VI PAKKER DISSE I EN BUNDLE
EN BUNDLE *EKSPORTERER* PAKKER
VI INNF&#xD8;RER EN NY BUNDLE
MED EN KLASSE
VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER
BARE DE SOM EKSPLISITT ER EKSPORTERT
DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN
3 pkt
OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle
VI F&#xC5;R ET LAG TIL MED INNKAPSLING
KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE
Betyr at jeg kan herje s&#xE5; mye jeg vil med implementasjonen i Package1, og v&#xE6;re sikker p&#xE5; at det er bakoverkompatibelt
Package1 er usynlig for andre bundler
- m.a.o vi kan ha private klasser
Package2 fungerer som et interface for hele bundle&#x2019;n
Dette betyr at mye kode kan skjules, og man f&#xE5;r veldig rene grensesnitt mellom komponenter.
I EN OSGi-BUNDLE HAR VI FREMDELES KLASSER OG PAKKER
MEN VI PAKKER DISSE I EN BUNDLE
EN BUNDLE *EKSPORTERER* PAKKER
VI INNF&#xD8;RER EN NY BUNDLE
MED EN KLASSE
VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER
BARE DE SOM EKSPLISITT ER EKSPORTERT
DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN
3 pkt
OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle
VI F&#xC5;R ET LAG TIL MED INNKAPSLING
KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE
Betyr at jeg kan herje s&#xE5; mye jeg vil med implementasjonen i Package1, og v&#xE6;re sikker p&#xE5; at det er bakoverkompatibelt
Package1 er usynlig for andre bundler
- m.a.o vi kan ha private klasser
Package2 fungerer som et interface for hele bundle&#x2019;n
Dette betyr at mye kode kan skjules, og man f&#xE5;r veldig rene grensesnitt mellom komponenter.
I EN OSGi-BUNDLE HAR VI FREMDELES KLASSER OG PAKKER
MEN VI PAKKER DISSE I EN BUNDLE
EN BUNDLE *EKSPORTERER* PAKKER
VI INNF&#xD8;RER EN NY BUNDLE
MED EN KLASSE
VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER
BARE DE SOM EKSPLISITT ER EKSPORTERT
DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN
3 pkt
OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle
VI F&#xC5;R ET LAG TIL MED INNKAPSLING
KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE
Betyr at jeg kan herje s&#xE5; mye jeg vil med implementasjonen i Package1, og v&#xE6;re sikker p&#xE5; at det er bakoverkompatibelt
Package1 er usynlig for andre bundler
- m.a.o vi kan ha private klasser
Package2 fungerer som et interface for hele bundle&#x2019;n
Dette betyr at mye kode kan skjules, og man f&#xE5;r veldig rene grensesnitt mellom komponenter.
I EN OSGi-BUNDLE HAR VI FREMDELES KLASSER OG PAKKER
MEN VI PAKKER DISSE I EN BUNDLE
EN BUNDLE *EKSPORTERER* PAKKER
VI INNF&#xD8;RER EN NY BUNDLE
MED EN KLASSE
VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER
BARE DE SOM EKSPLISITT ER EKSPORTERT
DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN
3 pkt
OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle
VI F&#xC5;R ET LAG TIL MED INNKAPSLING
KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE
Betyr at jeg kan herje s&#xE5; mye jeg vil med implementasjonen i Package1, og v&#xE6;re sikker p&#xE5; at det er bakoverkompatibelt
Package1 er usynlig for andre bundler
- m.a.o vi kan ha private klasser
Package2 fungerer som et interface for hele bundle&#x2019;n
Dette betyr at mye kode kan skjules, og man f&#xE5;r veldig rene grensesnitt mellom komponenter.
I EN OSGi-BUNDLE HAR VI FREMDELES KLASSER OG PAKKER
MEN VI PAKKER DISSE I EN BUNDLE
EN BUNDLE *EKSPORTERER* PAKKER
VI INNF&#xD8;RER EN NY BUNDLE
MED EN KLASSE
VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER
BARE DE SOM EKSPLISITT ER EKSPORTERT
DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN
3 pkt
OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle
VI F&#xC5;R ET LAG TIL MED INNKAPSLING
KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE
Betyr at jeg kan herje s&#xE5; mye jeg vil med implementasjonen i Package1, og v&#xE6;re sikker p&#xE5; at det er bakoverkompatibelt
Package1 er usynlig for andre bundler
- m.a.o vi kan ha private klasser
Package2 fungerer som et interface for hele bundle&#x2019;n
Dette betyr at mye kode kan skjules, og man f&#xE5;r veldig rene grensesnitt mellom komponenter.
I EN OSGi-BUNDLE HAR VI FREMDELES KLASSER OG PAKKER
MEN VI PAKKER DISSE I EN BUNDLE
EN BUNDLE *EKSPORTERER* PAKKER
VI INNF&#xD8;RER EN NY BUNDLE
MED EN KLASSE
VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER
BARE DE SOM EKSPLISITT ER EKSPORTERT
DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN
3 pkt
OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle
VI F&#xC5;R ET LAG TIL MED INNKAPSLING
KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE
Betyr at jeg kan herje s&#xE5; mye jeg vil med implementasjonen i Package1, og v&#xE6;re sikker p&#xE5; at det er bakoverkompatibelt
Package1 er usynlig for andre bundler
- m.a.o vi kan ha private klasser
Package2 fungerer som et interface for hele bundle&#x2019;n
Dette betyr at mye kode kan skjules, og man f&#xE5;r veldig rene grensesnitt mellom komponenter.
3pkt
HELE SLING-PLATTFORMEN ER EN SERIE BUNDLES
LETT &#xC5; BYTTE UT: PGA RENE GRENSESNITT
EGNE BUNDLES: DEPENDENCY INJECTION - KOMMER SENERE
Lett &#xE5; bytte ut: Fordi det er s&#xE5; rene grensesnitt
Lett &#xE5; utvide pga komponentmodellen og dependency injection (kommer senere)
3pkt
HELE SLING-PLATTFORMEN ER EN SERIE BUNDLES
LETT &#xC5; BYTTE UT: PGA RENE GRENSESNITT
EGNE BUNDLES: DEPENDENCY INJECTION - KOMMER SENERE
Lett &#xE5; bytte ut: Fordi det er s&#xE5; rene grensesnitt
Lett &#xE5; utvide pga komponentmodellen og dependency injection (kommer senere)
3pkt
HELE SLING-PLATTFORMEN ER EN SERIE BUNDLES
LETT &#xC5; BYTTE UT: PGA RENE GRENSESNITT
EGNE BUNDLES: DEPENDENCY INJECTION - KOMMER SENERE
Lett &#xE5; bytte ut: Fordi det er s&#xE5; rene grensesnitt
Lett &#xE5; utvide pga komponentmodellen og dependency injection (kommer senere)
4pkt
EGNE INNHOLDSTILBYDERE - VIRTUELT RESSURSTRE, SENERE
EGNE SERVLETER
INNHOLD
JACKRABBIT-PLUGIN-MODULER, f.eks. TILGANGSKONTROLL
Egne innholdstilbydere - ref. til virtuelt ressurstre, kommer senere
Plugin-moduler til Jackrabbit: F.eks. tilgangskontroll
4pkt
EGNE INNHOLDSTILBYDERE - VIRTUELT RESSURSTRE, SENERE
EGNE SERVLETER
INNHOLD
JACKRABBIT-PLUGIN-MODULER, f.eks. TILGANGSKONTROLL
Egne innholdstilbydere - ref. til virtuelt ressurstre, kommer senere
Plugin-moduler til Jackrabbit: F.eks. tilgangskontroll
4pkt
EGNE INNHOLDSTILBYDERE - VIRTUELT RESSURSTRE, SENERE
EGNE SERVLETER
INNHOLD
JACKRABBIT-PLUGIN-MODULER, f.eks. TILGANGSKONTROLL
Egne innholdstilbydere - ref. til virtuelt ressurstre, kommer senere
Plugin-moduler til Jackrabbit: F.eks. tilgangskontroll
4pkt
EGNE INNHOLDSTILBYDERE - VIRTUELT RESSURSTRE, SENERE
EGNE SERVLETER
INNHOLD
JACKRABBIT-PLUGIN-MODULER, f.eks. TILGANGSKONTROLL
Egne innholdstilbydere - ref. til virtuelt ressurstre, kommer senere
Plugin-moduler til Jackrabbit: F.eks. tilgangskontroll
REST
REST
REST
5pkt
MANGE VET
REPRESENTIONAL STATE TRANSFER
ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG
INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING
ENKLE HTTP-METODER
(les opp hvert punkt)
Sikkert mange som vet hva REST er og st&#xE5;r for
All state holdes av klienten:
Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen
Det eneste som er STATE, er egentlig URLen
Unng&#xE5;r server-side sessions: Ingen cookie med sessionId
Lettere &#xE5; implementere clustering
5pkt
MANGE VET
REPRESENTIONAL STATE TRANSFER
ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG
INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING
ENKLE HTTP-METODER
(les opp hvert punkt)
Sikkert mange som vet hva REST er og st&#xE5;r for
All state holdes av klienten:
Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen
Det eneste som er STATE, er egentlig URLen
Unng&#xE5;r server-side sessions: Ingen cookie med sessionId
Lettere &#xE5; implementere clustering
5pkt
MANGE VET
REPRESENTIONAL STATE TRANSFER
ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG
INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING
ENKLE HTTP-METODER
(les opp hvert punkt)
Sikkert mange som vet hva REST er og st&#xE5;r for
All state holdes av klienten:
Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen
Det eneste som er STATE, er egentlig URLen
Unng&#xE5;r server-side sessions: Ingen cookie med sessionId
Lettere &#xE5; implementere clustering
5pkt
MANGE VET
REPRESENTIONAL STATE TRANSFER
ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG
INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING
ENKLE HTTP-METODER
(les opp hvert punkt)
Sikkert mange som vet hva REST er og st&#xE5;r for
All state holdes av klienten:
Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen
Det eneste som er STATE, er egentlig URLen
Unng&#xE5;r server-side sessions: Ingen cookie med sessionId
Lettere &#xE5; implementere clustering
5pkt
MANGE VET
REPRESENTIONAL STATE TRANSFER
ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG
INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING
ENKLE HTTP-METODER
(les opp hvert punkt)
Sikkert mange som vet hva REST er og st&#xE5;r for
All state holdes av klienten:
Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen
Det eneste som er STATE, er egentlig URLen
Unng&#xE5;r server-side sessions: Ingen cookie med sessionId
Lettere &#xE5; implementere clustering
5pkt
MANGE VET
REPRESENTIONAL STATE TRANSFER
ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG
INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING
ENKLE HTTP-METODER
(les opp hvert punkt)
Sikkert mange som vet hva REST er og st&#xE5;r for
All state holdes av klienten:
Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen
Det eneste som er STATE, er egentlig URLen
Unng&#xE5;r server-side sessions: Ingen cookie med sessionId
Lettere &#xE5; implementere clustering
5pkt
MANGE VET
REPRESENTIONAL STATE TRANSFER
ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG
INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING
ENKLE HTTP-METODER
(les opp hvert punkt)
Sikkert mange som vet hva REST er og st&#xE5;r for
All state holdes av klienten:
Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen
Det eneste som er STATE, er egentlig URLen
Unng&#xE5;r server-side sessions: Ingen cookie med sessionId
Lettere &#xE5; implementere clustering
5pkt
MANGE VET
REPRESENTIONAL STATE TRANSFER
ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG
INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING
ENKLE HTTP-METODER
(les opp hvert punkt)
Sikkert mange som vet hva REST er og st&#xE5;r for
All state holdes av klienten:
Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen
Det eneste som er STATE, er egentlig URLen
Unng&#xE5;r server-side sessions: Ingen cookie med sessionId
Lettere &#xE5; implementere clustering
4pkt ++
URL PEKER TIL *RESSURS* IKKE METODE
EKSEMPEL: URL besudlet med METODENAVN
VIL HA FORSKJELLIGE METODENAVN TIL F.EKS. SLETTE ARTIKKEL ELLER OPPDATERE
STYGT ID-FELT
6pkt
ANDRE EKSEMPEL: URL er ADRESSE TIL RESSURS SOM ETTERSP&#xD8;RRES
METODEN ER HTTP GET - PUBLICSHOW er IMPLISITT
OPPDATERE RESSURS: HTTP PUT til SAMME ADRESSE
INGEN QUERY-STRING - INFORMASJON i SELVE URLen
URLen er MENNESKELIG LESBAR - INNBYR TIL TOLKNING og NAVIGASJON
KAN FINNE ARTIKKELENS KATEGORI UTFRA URLen
I det f&#xF8;rste eksempelet er URLen besudlet med metodenavn (&#x201C;Article.publicShow&#x201D;)
Man vil ha forskjellige metodenavn etter hva som skal gj&#xF8;res, f.eks. slette en artikkel, eller oppdatere den.
Stygt ID-felt
I det andre eksempelet er URLen en adresse til ressursen som ettersp&#xF8;rres
Metoden er HTTP GET
Hvis ressursen skal oppdateres, sender man en HTTP PUT til samme adresse
Man ser at query-stringen er borte, informasjonen flyttet inn i URLen
Vi har plutselig f&#xE5;tt en menneskelig lesbar URL, som innbyr til tolking og navigasjon
4pkt ++
URL PEKER TIL *RESSURS* IKKE METODE
EKSEMPEL: URL besudlet med METODENAVN
VIL HA FORSKJELLIGE METODENAVN TIL F.EKS. SLETTE ARTIKKEL ELLER OPPDATERE
STYGT ID-FELT
6pkt
ANDRE EKSEMPEL: URL er ADRESSE TIL RESSURS SOM ETTERSP&#xD8;RRES
METODEN ER HTTP GET - PUBLICSHOW er IMPLISITT
OPPDATERE RESSURS: HTTP PUT til SAMME ADRESSE
INGEN QUERY-STRING - INFORMASJON i SELVE URLen
URLen er MENNESKELIG LESBAR - INNBYR TIL TOLKNING og NAVIGASJON
KAN FINNE ARTIKKELENS KATEGORI UTFRA URLen
I det f&#xF8;rste eksempelet er URLen besudlet med metodenavn (&#x201C;Article.publicShow&#x201D;)
Man vil ha forskjellige metodenavn etter hva som skal gj&#xF8;res, f.eks. slette en artikkel, eller oppdatere den.
Stygt ID-felt
I det andre eksempelet er URLen en adresse til ressursen som ettersp&#xF8;rres
Metoden er HTTP GET
Hvis ressursen skal oppdateres, sender man en HTTP PUT til samme adresse
Man ser at query-stringen er borte, informasjonen flyttet inn i URLen
Vi har plutselig f&#xE5;tt en menneskelig lesbar URL, som innbyr til tolking og navigasjon
4pkt ++
URL PEKER TIL *RESSURS* IKKE METODE
EKSEMPEL: URL besudlet med METODENAVN
VIL HA FORSKJELLIGE METODENAVN TIL F.EKS. SLETTE ARTIKKEL ELLER OPPDATERE
STYGT ID-FELT
6pkt
ANDRE EKSEMPEL: URL er ADRESSE TIL RESSURS SOM ETTERSP&#xD8;RRES
METODEN ER HTTP GET - PUBLICSHOW er IMPLISITT
OPPDATERE RESSURS: HTTP PUT til SAMME ADRESSE
INGEN QUERY-STRING - INFORMASJON i SELVE URLen
URLen er MENNESKELIG LESBAR - INNBYR TIL TOLKNING og NAVIGASJON
KAN FINNE ARTIKKELENS KATEGORI UTFRA URLen
I det f&#xF8;rste eksempelet er URLen besudlet med metodenavn (&#x201C;Article.publicShow&#x201D;)
Man vil ha forskjellige metodenavn etter hva som skal gj&#xF8;res, f.eks. slette en artikkel, eller oppdatere den.
Stygt ID-felt
I det andre eksempelet er URLen en adresse til ressursen som ettersp&#xF8;rres
Metoden er HTTP GET
Hvis ressursen skal oppdateres, sender man en HTTP PUT til samme adresse
Man ser at query-stringen er borte, informasjonen flyttet inn i URLen
Vi har plutselig f&#xE5;tt en menneskelig lesbar URL, som innbyr til tolking og navigasjon
4pkt ++
URL PEKER TIL *RESSURS* IKKE METODE
EKSEMPEL: URL besudlet med METODENAVN
VIL HA FORSKJELLIGE METODENAVN TIL F.EKS. SLETTE ARTIKKEL ELLER OPPDATERE
STYGT ID-FELT
6pkt
ANDRE EKSEMPEL: URL er ADRESSE TIL RESSURS SOM ETTERSP&#xD8;RRES
METODEN ER HTTP GET - PUBLICSHOW er IMPLISITT
OPPDATERE RESSURS: HTTP PUT til SAMME ADRESSE
INGEN QUERY-STRING - INFORMASJON i SELVE URLen
URLen er MENNESKELIG LESBAR - INNBYR TIL TOLKNING og NAVIGASJON
KAN FINNE ARTIKKELENS KATEGORI UTFRA URLen
I det f&#xF8;rste eksempelet er URLen besudlet med metodenavn (&#x201C;Article.publicShow&#x201D;)
Man vil ha forskjellige metodenavn etter hva som skal gj&#xF8;res, f.eks. slette en artikkel, eller oppdatere den.
Stygt ID-felt
I det andre eksempelet er URLen en adresse til ressursen som ettersp&#xF8;rres
Metoden er HTTP GET
Hvis ressursen skal oppdateres, sender man en HTTP PUT til samme adresse
Man ser at query-stringen er borte, informasjonen flyttet inn i URLen
Vi har plutselig f&#xE5;tt en menneskelig lesbar URL, som innbyr til tolking og navigasjon
4pkt ++
URL PEKER TIL *RESSURS* IKKE METODE
EKSEMPEL: URL besudlet med METODENAVN
VIL HA FORSKJELLIGE METODENAVN TIL F.EKS. SLETTE ARTIKKEL ELLER OPPDATERE
STYGT ID-FELT
6pkt
ANDRE EKSEMPEL: URL er ADRESSE TIL RESSURS SOM ETTERSP&#xD8;RRES
METODEN ER HTTP GET - PUBLICSHOW er IMPLISITT
OPPDATERE RESSURS: HTTP PUT til SAMME ADRESSE
INGEN QUERY-STRING - INFORMASJON i SELVE URLen
URLen er MENNESKELIG LESBAR - INNBYR TIL TOLKNING og NAVIGASJON
KAN FINNE ARTIKKELENS KATEGORI UTFRA URLen
I det f&#xF8;rste eksempelet er URLen besudlet med metodenavn (&#x201C;Article.publicShow&#x201D;)
Man vil ha forskjellige metodenavn etter hva som skal gj&#xF8;res, f.eks. slette en artikkel, eller oppdatere den.
Stygt ID-felt
I det andre eksempelet er URLen en adresse til ressursen som ettersp&#xF8;rres
Metoden er HTTP GET
Hvis ressursen skal oppdateres, sender man en HTTP PUT til samme adresse
Man ser at query-stringen er borte, informasjonen flyttet inn i URLen
Vi har plutselig f&#xE5;tt en menneskelig lesbar URL, som innbyr til tolking og navigasjon
2pkt ++
P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER
BEVIS
4 pkt ++
LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP
HVER OPERASJON = EGEN SERVLET
GET liste med ordre til en webshop
POST ny ordre, SERVEREN SVARER
8pkt
REST-BASERT SYSTEM
GET til en PATH hvor ORDRE ER LAGRET
POST til SAMME URL (men med &#x201C;/&#x201D; til slutt)
SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500
LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET
HENTE DETALJER med GET
DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE
SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL
N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til
201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error)
Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
2pkt ++
P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER
BEVIS
4 pkt ++
LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP
HVER OPERASJON = EGEN SERVLET
GET liste med ordre til en webshop
POST ny ordre, SERVEREN SVARER
8pkt
REST-BASERT SYSTEM
GET til en PATH hvor ORDRE ER LAGRET
POST til SAMME URL (men med &#x201C;/&#x201D; til slutt)
SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500
LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET
HENTE DETALJER med GET
DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE
SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL
N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til
201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error)
Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
2pkt ++
P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER
BEVIS
4 pkt ++
LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP
HVER OPERASJON = EGEN SERVLET
GET liste med ordre til en webshop
POST ny ordre, SERVEREN SVARER
8pkt
REST-BASERT SYSTEM
GET til en PATH hvor ORDRE ER LAGRET
POST til SAMME URL (men med &#x201C;/&#x201D; til slutt)
SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500
LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET
HENTE DETALJER med GET
DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE
SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL
N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til
201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error)
Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
2pkt ++
P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER
BEVIS
4 pkt ++
LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP
HVER OPERASJON = EGEN SERVLET
GET liste med ordre til en webshop
POST ny ordre, SERVEREN SVARER
8pkt
REST-BASERT SYSTEM
GET til en PATH hvor ORDRE ER LAGRET
POST til SAMME URL (men med &#x201C;/&#x201D; til slutt)
SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500
LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET
HENTE DETALJER med GET
DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE
SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL
N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til
201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error)
Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
2pkt ++
P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER
BEVIS
4 pkt ++
LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP
HVER OPERASJON = EGEN SERVLET
GET liste med ordre til en webshop
POST ny ordre, SERVEREN SVARER
8pkt
REST-BASERT SYSTEM
GET til en PATH hvor ORDRE ER LAGRET
POST til SAMME URL (men med &#x201C;/&#x201D; til slutt)
SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500
LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET
HENTE DETALJER med GET
DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE
SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL
N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til
201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error)
Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
2pkt ++
P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER
BEVIS
4 pkt ++
LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP
HVER OPERASJON = EGEN SERVLET
GET liste med ordre til en webshop
POST ny ordre, SERVEREN SVARER
8pkt
REST-BASERT SYSTEM
GET til en PATH hvor ORDRE ER LAGRET
POST til SAMME URL (men med &#x201C;/&#x201D; til slutt)
SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500
LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET
HENTE DETALJER med GET
DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE
SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL
N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til
201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error)
Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
2pkt ++
P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER
BEVIS
4 pkt ++
LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP
HVER OPERASJON = EGEN SERVLET
GET liste med ordre til en webshop
POST ny ordre, SERVEREN SVARER
8pkt
REST-BASERT SYSTEM
GET til en PATH hvor ORDRE ER LAGRET
POST til SAMME URL (men med &#x201C;/&#x201D; til slutt)
SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500
LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET
HENTE DETALJER med GET
DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE
SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL
N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til
201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error)
Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
2pkt ++
P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER
BEVIS
4 pkt ++
LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP
HVER OPERASJON = EGEN SERVLET
GET liste med ordre til en webshop
POST ny ordre, SERVEREN SVARER
8pkt
REST-BASERT SYSTEM
GET til en PATH hvor ORDRE ER LAGRET
POST til SAMME URL (men med &#x201C;/&#x201D; til slutt)
SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500
LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET
HENTE DETALJER med GET
DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE
SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL
N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til
201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error)
Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
N&#xE5; har vi v&#xE6;rt gjennom disse grunnprinsippene, s&#xE5; skal vi se hvordan Sling bygger p&#xE5; dem.
N&#xE5; har vi v&#xE6;rt gjennom disse grunnprinsippene, s&#xE5; skal vi se hvordan Sling bygger p&#xE5; dem.
N&#xE5; har vi v&#xE6;rt gjennom disse grunnprinsippene, s&#xE5; skal vi se hvordan Sling bygger p&#xE5; dem.
N&#xE5; har vi v&#xE6;rt gjennom disse grunnprinsippene, s&#xE5; skal vi se hvordan Sling bygger p&#xE5; dem.
N&#xE5; har vi v&#xE6;rt gjennom disse grunnprinsippene, s&#xE5; skal vi se hvordan Sling bygger p&#xE5; dem.
N&#xE5; har vi v&#xE6;rt gjennom disse grunnprinsippene, s&#xE5; skal vi se hvordan Sling bygger p&#xE5; dem.
N&#xE5; har vi v&#xE6;rt gjennom disse grunnprinsippene, s&#xE5; skal vi se hvordan Sling bygger p&#xE5; dem.
3 pkt
G&#xC5;TT OPP FOR DERE AT SLING ER ET HTTP-REST-API til JCR
ET HTTP-API i TILLEGG til JAVA-APIET
MEN DET ER IKKE ALT
Det har kanskje g&#xE5;tt opp for dere at Sling gir oss et HTTP-REST-API til JCR
... s&#xE5; vi f&#xE5;r et HTTP-API, i tillegg til JCR-java-APIet.
... men det er ikke alt
4pkt
IKKE BEGRENSA TIL JCR-REPOSITORIET
KAN PODE INN EGEN SERVLET
FILMAPPE
DATABASE-SYSTEM
Vi er ikke begrensa til JCR-repositoriet
4pkt
IKKE BEGRENSA TIL JCR-REPOSITORIET
KAN PODE INN EGEN SERVLET
FILMAPPE
DATABASE-SYSTEM
Vi er ikke begrensa til JCR-repositoriet
4pkt
IKKE BEGRENSA TIL JCR-REPOSITORIET
KAN PODE INN EGEN SERVLET
FILMAPPE
DATABASE-SYSTEM
Vi er ikke begrensa til JCR-repositoriet
4pkt
IKKE BEGRENSA TIL JCR-REPOSITORIET
KAN PODE INN EGEN SERVLET
FILMAPPE
DATABASE-SYSTEM
Vi er ikke begrensa til JCR-repositoriet
3pkt
KAN ALTS&#xC5; HA DETTE
ET TRE HVOR JCR-noder, SERVLETer, FILMAPPER, og ANNET lever som GODE NABOER
KAN PLUGGE INN SIN EGEN LEGACY DB-APP ved &#xE5; IMPLEMENTERE ET INTERFACE
Man kan alts&#xE5; ha dette - et tre hvor JCR-noder, servleter, filmapper og annet lever som gode naboer
Ved &#xE5; implementere Resource-interfacet kan man ogs&#xE5; plugge inn sin egen legacy database-applikasjon.
1pkt
VI BRUKER BEGREPET &#x201C;RESSURS&#x201D; - DEFINISJON
Hva er en &#x201C;ressurs&#x201D;?
4pkt
EN RESSURS HAR NOEN GITTE EGENSKAPER
PATH
- for JCR-noder: pathen til noden
TYPE
- for JCR-noder: en bestemt property
METADATA
4pkt
EN RESSURS HAR NOEN GITTE EGENSKAPER
PATH
- for JCR-noder: pathen til noden
TYPE
- for JCR-noder: en bestemt property
METADATA
4pkt
EN RESSURS HAR NOEN GITTE EGENSKAPER
PATH
- for JCR-noder: pathen til noden
TYPE
- for JCR-noder: en bestemt property
METADATA
5pkt
ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE
URLen er PATH til NODEN
REPOSITORIET fra BLOGG-eksempelet
DENNE REQUESTEN
RESOLVES TIL DENNE NODEN
Det er enkelt &#xE5; resolve en URL til en JCR-node
URLen er i virkeligheten en path til noden
Vi tar fram mini-repositoriet fra blogg-eksempelet
S&#xE5; f&#xE5;r vi inn denne requesten
... som resolves til denne noden
5pkt
ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE
URLen er PATH til NODEN
REPOSITORIET fra BLOGG-eksempelet
DENNE REQUESTEN
RESOLVES TIL DENNE NODEN
Det er enkelt &#xE5; resolve en URL til en JCR-node
URLen er i virkeligheten en path til noden
Vi tar fram mini-repositoriet fra blogg-eksempelet
S&#xE5; f&#xE5;r vi inn denne requesten
... som resolves til denne noden
5pkt
ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE
URLen er PATH til NODEN
REPOSITORIET fra BLOGG-eksempelet
DENNE REQUESTEN
RESOLVES TIL DENNE NODEN
Det er enkelt &#xE5; resolve en URL til en JCR-node
URLen er i virkeligheten en path til noden
Vi tar fram mini-repositoriet fra blogg-eksempelet
S&#xE5; f&#xE5;r vi inn denne requesten
... som resolves til denne noden
5pkt
ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE
URLen er PATH til NODEN
REPOSITORIET fra BLOGG-eksempelet
DENNE REQUESTEN
RESOLVES TIL DENNE NODEN
Det er enkelt &#xE5; resolve en URL til en JCR-node
URLen er i virkeligheten en path til noden
Vi tar fram mini-repositoriet fra blogg-eksempelet
S&#xE5; f&#xE5;r vi inn denne requesten
... som resolves til denne noden
5pkt
ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE
URLen er PATH til NODEN
REPOSITORIET fra BLOGG-eksempelet
DENNE REQUESTEN
RESOLVES TIL DENNE NODEN
Det er enkelt &#xE5; resolve en URL til en JCR-node
URLen er i virkeligheten en path til noden
Vi tar fram mini-repositoriet fra blogg-eksempelet
S&#xE5; f&#xE5;r vi inn denne requesten
... som resolves til denne noden
5pkt
ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE
URLen er PATH til NODEN
REPOSITORIET fra BLOGG-eksempelet
DENNE REQUESTEN
RESOLVES TIL DENNE NODEN
Det er enkelt &#xE5; resolve en URL til en JCR-node
URLen er i virkeligheten en path til noden
Vi tar fram mini-repositoriet fra blogg-eksempelet
S&#xE5; f&#xE5;r vi inn denne requesten
... som resolves til denne noden
2pkt ++
DET VAR RESSURSER
MEN RESSURSER IKKE TIL NYTTE HVIS DEN IKKE KAN VISES FRAM - f.eks. p&#xE5; en WEBSIDE
3pkt
KAN RENDRE EN RESSURS MED EN SERVLET eller SCRIPT
RESSURSTYPEN BESTEMMER HVILKEN SERVLET/SCRIPT SOM VELGES
SERVLETER/SCRIPTS finnes i SAMME VIRTUELLE RESSURSTRE som INNHOLDET
Det var ressurser. Men en ressurs er ikke s&#xE6;rlig til nytte hvis den ikke kan vises - vises p&#xE5; en webside.
2pkt ++
DET VAR RESSURSER
MEN RESSURSER IKKE TIL NYTTE HVIS DEN IKKE KAN VISES FRAM - f.eks. p&#xE5; en WEBSIDE
3pkt
KAN RENDRE EN RESSURS MED EN SERVLET eller SCRIPT
RESSURSTYPEN BESTEMMER HVILKEN SERVLET/SCRIPT SOM VELGES
SERVLETER/SCRIPTS finnes i SAMME VIRTUELLE RESSURSTRE som INNHOLDET
Det var ressurser. Men en ressurs er ikke s&#xE6;rlig til nytte hvis den ikke kan vises - vises p&#xE5; en webside.
2pkt ++
DET VAR RESSURSER
MEN RESSURSER IKKE TIL NYTTE HVIS DEN IKKE KAN VISES FRAM - f.eks. p&#xE5; en WEBSIDE
3pkt
KAN RENDRE EN RESSURS MED EN SERVLET eller SCRIPT
RESSURSTYPEN BESTEMMER HVILKEN SERVLET/SCRIPT SOM VELGES
SERVLETER/SCRIPTS finnes i SAMME VIRTUELLE RESSURSTRE som INNHOLDET
Det var ressurser. Men en ressurs er ikke s&#xE6;rlig til nytte hvis den ikke kan vises - vises p&#xE5; en webside.
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
EN SLING-URL ser S&#xC5;NN UT
PATH til RESSURSEN
LEGG MERKE TIL PROPERTYEN NEDERST
EXTENSION
MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
4 pkt
EN PLATTFORM ER VEL OG BRA
VIL GJERNE BYGGE EGEN FUNKSJONALITET OPP&#xC5;
OSGi-BUNDLER ER JAR-filer med NOGO ATT&#xC5;T
S&#xC5;: HOT-DEPLOY til en SLING-INSTANS
INN: En plattform er vel og bra, men det er jo bare nettopp en plattform.
Du vil gjerne bygge din egen funksjonalitet opp&#xE5;.
OSGi-bundler er .jar-filer med noggo att&#xE5;t
4 pkt
EN PLATTFORM ER VEL OG BRA
VIL GJERNE BYGGE EGEN FUNKSJONALITET OPP&#xC5;
OSGi-BUNDLER ER JAR-filer med NOGO ATT&#xC5;T
S&#xC5;: HOT-DEPLOY til en SLING-INSTANS
INN: En plattform er vel og bra, men det er jo bare nettopp en plattform.
Du vil gjerne bygge din egen funksjonalitet opp&#xE5;.
OSGi-bundler er .jar-filer med noggo att&#xE5;t
3pkt++
HVORDAN DEPLOYE EGEN SERVLET
DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT
SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES
[KLIKK]
5pkt++
&#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil
KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN
JAVADOC-NESERYNK
VI ANGIR EN PATH
LEGG MERKE TIL pathS
[KLIKK]
3pkt++
VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet
F&#xC5;R WRAPPET request-objekt
TILGANG TIL Resource
2pkt
SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart
ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION
[NESTE SLIDE]
S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet?
Dette er en helt vanlig servlet som ikke gj&#xF8;r stort.
For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon.
[KLIKK]
Her angir vi path&#x2019;en til hvor servleten skal registreres i ressurs-treet. Vi husker at Sling ser under /apps for &#xE5; finne servlet&#x2019;er til rendering.
Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather.
Noen rynker nok litt p&#xE5; nesa av at man setter disse propertiene i en javadoc-kommentar, men javadoc-annotasjonene blir prosessert av en Maven-plugin ved kompilering. Dette genererer en xml-fil (IKKE web.xml) som pakkes i jar-en, og plukkes opp av OSGi-rammeverket.
Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv.
Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;.
[KLIKK]
Eller vi kan gj&#xF8;re det p&#xE5; denne m&#xE5;ten: Ved &#xE5; angi noen bestemte properties, blir serveren registrert p&#xE5; passende steder.
N&#xE5;r bundlen med servlet&#x2019;en deployes, dvs lastes opp til en Sling-instans, s&#xE5; startes den automatisk, og begynner &#xE5; svare p&#xE5; requester.
Man kan ogs&#xE5; un-deploye bundelen, oppdatere den med en ny versjon, osv, uten &#xE5; starte applikasjonen p&#xE5; nytt - takket v&#xE6;re OSGi.
[KLIKK]
Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet.
Da f&#xE5;r man et request-objekt med tilgang til ressursen.
Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
3pkt++
HVORDAN DEPLOYE EGEN SERVLET
DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT
SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES
[KLIKK]
5pkt++
&#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil
KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN
JAVADOC-NESERYNK
VI ANGIR EN PATH
LEGG MERKE TIL pathS
[KLIKK]
3pkt++
VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet
F&#xC5;R WRAPPET request-objekt
TILGANG TIL Resource
2pkt
SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart
ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION
[NESTE SLIDE]
S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet?
Dette er en helt vanlig servlet som ikke gj&#xF8;r stort.
For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon.
[KLIKK]
Her angir vi path&#x2019;en til hvor servleten skal registreres i ressurs-treet. Vi husker at Sling ser under /apps for &#xE5; finne servlet&#x2019;er til rendering.
Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather.
Noen rynker nok litt p&#xE5; nesa av at man setter disse propertiene i en javadoc-kommentar, men javadoc-annotasjonene blir prosessert av en Maven-plugin ved kompilering. Dette genererer en xml-fil (IKKE web.xml) som pakkes i jar-en, og plukkes opp av OSGi-rammeverket.
Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv.
Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;.
[KLIKK]
Eller vi kan gj&#xF8;re det p&#xE5; denne m&#xE5;ten: Ved &#xE5; angi noen bestemte properties, blir serveren registrert p&#xE5; passende steder.
N&#xE5;r bundlen med servlet&#x2019;en deployes, dvs lastes opp til en Sling-instans, s&#xE5; startes den automatisk, og begynner &#xE5; svare p&#xE5; requester.
Man kan ogs&#xE5; un-deploye bundelen, oppdatere den med en ny versjon, osv, uten &#xE5; starte applikasjonen p&#xE5; nytt - takket v&#xE6;re OSGi.
[KLIKK]
Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet.
Da f&#xE5;r man et request-objekt med tilgang til ressursen.
Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
3pkt++
HVORDAN DEPLOYE EGEN SERVLET
DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT
SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES
[KLIKK]
5pkt++
&#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil
KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN
JAVADOC-NESERYNK
VI ANGIR EN PATH
LEGG MERKE TIL pathS
[KLIKK]
3pkt++
VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet
F&#xC5;R WRAPPET request-objekt
TILGANG TIL Resource
2pkt
SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart
ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION
[NESTE SLIDE]
S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet?
Dette er en helt vanlig servlet som ikke gj&#xF8;r stort.
For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon.
[KLIKK]
Her angir vi path&#x2019;en til hvor servleten skal registreres i ressurs-treet. Vi husker at Sling ser under /apps for &#xE5; finne servlet&#x2019;er til rendering.
Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather.
Noen rynker nok litt p&#xE5; nesa av at man setter disse propertiene i en javadoc-kommentar, men javadoc-annotasjonene blir prosessert av en Maven-plugin ved kompilering. Dette genererer en xml-fil (IKKE web.xml) som pakkes i jar-en, og plukkes opp av OSGi-rammeverket.
Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv.
Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;.
[KLIKK]
Eller vi kan gj&#xF8;re det p&#xE5; denne m&#xE5;ten: Ved &#xE5; angi noen bestemte properties, blir serveren registrert p&#xE5; passende steder.
N&#xE5;r bundlen med servlet&#x2019;en deployes, dvs lastes opp til en Sling-instans, s&#xE5; startes den automatisk, og begynner &#xE5; svare p&#xE5; requester.
Man kan ogs&#xE5; un-deploye bundelen, oppdatere den med en ny versjon, osv, uten &#xE5; starte applikasjonen p&#xE5; nytt - takket v&#xE6;re OSGi.
[KLIKK]
Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet.
Da f&#xE5;r man et request-objekt med tilgang til ressursen.
Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
3pkt++
HVORDAN DEPLOYE EGEN SERVLET
DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT
SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES
[KLIKK]
5pkt++
&#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil
KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN
JAVADOC-NESERYNK
VI ANGIR EN PATH
LEGG MERKE TIL pathS
[KLIKK]
3pkt++
VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet
F&#xC5;R WRAPPET request-objekt
TILGANG TIL Resource
2pkt
SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart
ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION
[NESTE SLIDE]
S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet?
Dette er en helt vanlig servlet som ikke gj&#xF8;r stort.
For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon.
[KLIKK]
Her angir vi path&#x2019;en til hvor servleten skal registreres i ressurs-treet. Vi husker at Sling ser under /apps for &#xE5; finne servlet&#x2019;er til rendering.
Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather.
Noen rynker nok litt p&#xE5; nesa av at man setter disse propertiene i en javadoc-kommentar, men javadoc-annotasjonene blir prosessert av en Maven-plugin ved kompilering. Dette genererer en xml-fil (IKKE web.xml) som pakkes i jar-en, og plukkes opp av OSGi-rammeverket.
Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv.
Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;.
[KLIKK]
Eller vi kan gj&#xF8;re det p&#xE5; denne m&#xE5;ten: Ved &#xE5; angi noen bestemte properties, blir serveren registrert p&#xE5; passende steder.
N&#xE5;r bundlen med servlet&#x2019;en deployes, dvs lastes opp til en Sling-instans, s&#xE5; startes den automatisk, og begynner &#xE5; svare p&#xE5; requester.
Man kan ogs&#xE5; un-deploye bundelen, oppdatere den med en ny versjon, osv, uten &#xE5; starte applikasjonen p&#xE5; nytt - takket v&#xE6;re OSGi.
[KLIKK]
Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet.
Da f&#xE5;r man et request-objekt med tilgang til ressursen.
Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
3pkt++
HVORDAN DEPLOYE EGEN SERVLET
DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT
SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES
[KLIKK]
5pkt++
&#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil
KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN
JAVADOC-NESERYNK
VI ANGIR EN PATH
LEGG MERKE TIL pathS
[KLIKK]
3pkt++
VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet
F&#xC5;R WRAPPET request-objekt
TILGANG TIL Resource
2pkt
SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart
ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION
[NESTE SLIDE]
S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet?
Dette er en helt vanlig servlet som ikke gj&#xF8;r stort.
For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon.
[KLIKK]
Her angir vi path&#x2019;en til hvor servleten skal registreres i ressurs-treet. Vi husker at Sling ser under /apps for &#xE5; finne servlet&#x2019;er til rendering.
Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather.
Noen rynker nok litt p&#xE5; nesa av at man setter disse propertiene i en javadoc-kommentar, men javadoc-annotasjonene blir prosessert av en Maven-plugin ved kompilering. Dette genererer en xml-fil (IKKE web.xml) som pakkes i jar-en, og plukkes opp av OSGi-rammeverket.
Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv.
Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;.
[KLIKK]
Eller vi kan gj&#xF8;re det p&#xE5; denne m&#xE5;ten: Ved &#xE5; angi noen bestemte properties, blir serveren registrert p&#xE5; passende steder.
N&#xE5;r bundlen med servlet&#x2019;en deployes, dvs lastes opp til en Sling-instans, s&#xE5; startes den automatisk, og begynner &#xE5; svare p&#xE5; requester.
Man kan ogs&#xE5; un-deploye bundelen, oppdatere den med en ny versjon, osv, uten &#xE5; starte applikasjonen p&#xE5; nytt - takket v&#xE6;re OSGi.
[KLIKK]
Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet.
Da f&#xE5;r man et request-objekt med tilgang til ressursen.
Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
3pkt++
HVORDAN DEPLOYE EGEN SERVLET
DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT
SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES
[KLIKK]
5pkt++
&#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil
KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN
JAVADOC-NESERYNK
VI ANGIR EN PATH
LEGG MERKE TIL pathS
[KLIKK]
3pkt++
VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet
F&#xC5;R WRAPPET request-objekt
TILGANG TIL Resource
2pkt
SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart
ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION
[NESTE SLIDE]
S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet?
Dette er en helt vanlig servlet som ikke gj&#xF8;r stort.
For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon.
[KLIKK]
Her angir vi path&#x2019;en til hvor servleten skal registreres i ressurs-treet. Vi husker at Sling ser under /apps for &#xE5; finne servlet&#x2019;er til rendering.
Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather.
Noen rynker nok litt p&#xE5; nesa av at man setter disse propertiene i en javadoc-kommentar, men javadoc-annotasjonene blir prosessert av en Maven-plugin ved kompilering. Dette genererer en xml-fil (IKKE web.xml) som pakkes i jar-en, og plukkes opp av OSGi-rammeverket.
Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv.
Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;.
[KLIKK]
Eller vi kan gj&#xF8;re det p&#xE5; denne m&#xE5;ten: Ved &#xE5; angi noen bestemte properties, blir serveren registrert p&#xE5; passende steder.
N&#xE5;r bundlen med servlet&#x2019;en deployes, dvs lastes opp til en Sling-instans, s&#xE5; startes den automatisk, og begynner &#xE5; svare p&#xE5; requester.
Man kan ogs&#xE5; un-deploye bundelen, oppdatere den med en ny versjon, osv, uten &#xE5; starte applikasjonen p&#xE5; nytt - takket v&#xE6;re OSGi.
[KLIKK]
Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet.
Da f&#xE5;r man et request-objekt med tilgang til ressursen.
Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
3pkt++
HVORDAN DEPLOYE EGEN SERVLET
DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT
SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES
[KLIKK]
5pkt++
&#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil
KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN
JAVADOC-NESERYNK
VI ANGIR EN PATH
LEGG MERKE TIL pathS
[KLIKK]
3pkt++
VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet
F&#xC5;R WRAPPET request-objekt
TILGANG TIL Resource
2pkt
SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart
ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION
[NESTE SLIDE]
S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet?
Dette er en helt vanlig servlet som ikke gj&#xF8;r stort.
For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon.
[KLIKK]
Her angir vi path&#x2019;en til hvor servleten skal registreres i ressurs-treet. Vi husker at Sling ser under /apps for &#xE5; finne servlet&#x2019;er til rendering.
Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather.
Noen rynker nok litt p&#xE5; nesa av at man setter disse propertiene i en javadoc-kommentar, men javadoc-annotasjonene blir prosessert av en Maven-plugin ved kompilering. Dette genererer en xml-fil (IKKE web.xml) som pakkes i jar-en, og plukkes opp av OSGi-rammeverket.
Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv.
Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;.
[KLIKK]
Eller vi kan gj&#xF8;re det p&#xE5; denne m&#xE5;ten: Ved &#xE5; angi noen bestemte properties, blir serveren registrert p&#xE5; passende steder.
N&#xE5;r bundlen med servlet&#x2019;en deployes, dvs lastes opp til en Sling-instans, s&#xE5; startes den automatisk, og begynner &#xE5; svare p&#xE5; requester.
Man kan ogs&#xE5; un-deploye bundelen, oppdatere den med en ny versjon, osv, uten &#xE5; starte applikasjonen p&#xE5; nytt - takket v&#xE6;re OSGi.
[KLIKK]
Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet.
Da f&#xE5;r man et request-objekt med tilgang til ressursen.
Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
3pkt++
HVORDAN DEPLOYE EGEN SERVLET
DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT
SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES
[KLIKK]
5pkt++
&#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil
KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN
JAVADOC-NESERYNK
VI ANGIR EN PATH
LEGG MERKE TIL pathS
[KLIKK]
3pkt++
VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet
F&#xC5;R WRAPPET request-objekt
TILGANG TIL Resource
2pkt
SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart
ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION
[NESTE SLIDE]
S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet?
Dette er en helt vanlig servlet som ikke gj&#xF8;r stort.
For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon.
[KLIKK]
Her angir vi path&#x2019;en til hvor servleten skal registreres i ressurs-treet. Vi husker at Sling ser under /apps for &#xE5; finne servlet&#x2019;er til rendering.
Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather.
Noen rynker nok litt p&#xE5; nesa av at man setter disse propertiene i en javadoc-kommentar, men javadoc-annotasjonene blir prosessert av en Maven-plugin ved kompilering. Dette genererer en xml-fil (IKKE web.xml) som pakkes i jar-en, og plukkes opp av OSGi-rammeverket.
Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv.
Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;.
[KLIKK]
Eller vi kan gj&#xF8;re det p&#xE5; denne m&#xE5;ten: Ved &#xE5; angi noen bestemte properties, blir serveren registrert p&#xE5; passende steder.
N&#xE5;r bundlen med servlet&#x2019;en deployes, dvs lastes opp til en Sling-instans, s&#xE5; startes den automatisk, og begynner &#xE5; svare p&#xE5; requester.
Man kan ogs&#xE5; un-deploye bundelen, oppdatere den med en ny versjon, osv, uten &#xE5; starte applikasjonen p&#xE5; nytt - takket v&#xE6;re OSGi.
[KLIKK]
Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet.
Da f&#xE5;r man et request-objekt med tilgang til ressursen.
Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
3pkt++
HVORDAN DEPLOYE EGEN SERVLET
DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT
SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES
[KLIKK]
5pkt++
&#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil
KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN
JAVADOC-NESERYNK
VI ANGIR EN PATH
LEGG MERKE TIL pathS
[KLIKK]
3pkt++
VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet
F&#xC5;R WRAPPET request-objekt
TILGANG TIL Resource
2pkt
SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart
ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION
[NESTE SLIDE]
S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet?
Dette er en helt vanlig servlet som ikke gj&#xF8;r stort.
For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon.
[KLIKK]
Her angir vi path&#x2019;en til hvor servleten skal registreres i ressurs-treet. Vi husker at Sling ser under /apps for &#xE5; finne servlet&#x2019;er til rendering.
Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather.
Noen rynker nok litt p&#xE5; nesa av at man setter disse propertiene i en javadoc-kommentar, men javadoc-annotasjonene blir prosessert av en Maven-plugin ved kompilering. Dette genererer en xml-fil (IKKE web.xml) som pakkes i jar-en, og plukkes opp av OSGi-rammeverket.
Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv.
Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;.
[KLIKK]
Eller vi kan gj&#xF8;re det p&#xE5; denne m&#xE5;ten: Ved &#xE5; angi noen bestemte properties, blir serveren registrert p&#xE5; passende steder.
N&#xE5;r bundlen med servlet&#x2019;en deployes, dvs lastes opp til en Sling-instans, s&#xE5; startes den automatisk, og begynner &#xE5; svare p&#xE5; requester.
Man kan ogs&#xE5; un-deploye bundelen, oppdatere den med en ny versjon, osv, uten &#xE5; starte applikasjonen p&#xE5; nytt - takket v&#xE6;re OSGi.
[KLIKK]
Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet.
Da f&#xE5;r man et request-objekt med tilgang til ressursen.
Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
3pkt++
HVORDAN DEPLOYE EGEN SERVLET
DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT
SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES
[KLIKK]
5pkt++
&#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil
KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN
JAVADOC-NESERYNK
VI ANGIR EN PATH
LEGG MERKE TIL pathS
[KLIKK]
3pkt++
VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet
F&#xC5;R WRAPPET request-objekt
TILGANG TIL Resource
2pkt
SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart
ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION
[NESTE SLIDE]
S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet?
Dette er en helt vanlig servlet som ikke gj&#xF8;r stort.
For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon.
[KLIKK]
Her angir vi path&#x2019;en til hvor servleten skal registreres i ressurs-treet. Vi husker at Sling ser under /apps for &#xE5; finne servlet&#x2019;er til rendering.
Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather.
Noen rynker nok litt p&#xE5; nesa av at man setter disse propertiene i en javadoc-kommentar, men javadoc-annotasjonene blir prosessert av en Maven-plugin ved kompilering. Dette genererer en xml-fil (IKKE web.xml) som pakkes i jar-en, og plukkes opp av OSGi-rammeverket.
Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv.
Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;.
[KLIKK]
Eller vi kan gj&#xF8;re det p&#xE5; denne m&#xE5;ten: Ved &#xE5; angi noen bestemte properties, blir serveren registrert p&#xE5; passende steder.
N&#xE5;r bundlen med servlet&#x2019;en deployes, dvs lastes opp til en Sling-instans, s&#xE5; startes den automatisk, og begynner &#xE5; svare p&#xE5; requester.
Man kan ogs&#xE5; un-deploye bundelen, oppdatere den med en ny versjon, osv, uten &#xE5; starte applikasjonen p&#xE5; nytt - takket v&#xE6;re OSGi.
[KLIKK]
Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet.
Da f&#xE5;r man et request-objekt med tilgang til ressursen.
Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
3pkt++
HVORDAN DEPLOYE EGEN SERVLET
DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT
SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES
[KLIKK]
5pkt++
&#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil
KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN
JAVADOC-NESERYNK
VI ANGIR EN PATH
LEGG MERKE TIL pathS
[KLIKK]
3pkt++
VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet
F&#xC5;R WRAPPET request-objekt
TILGANG TIL Resource
2pkt
SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart
ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION
[NESTE SLIDE]
S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet?
Dette er en helt vanlig servlet som ikke gj&#xF8;r stort.
For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon.
[KLIKK]
Her angir vi path&#x2019;en til hvor servleten skal registreres i ressurs-treet. Vi husker at Sling ser under /apps for &#xE5; finne servlet&#x2019;er til rendering.
Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather.
Noen rynker nok litt p&#xE5; nesa av at man setter disse propertiene i en javadoc-kommentar, men javadoc-annotasjonene blir prosessert av en Maven-plugin ved kompilering. Dette genererer en xml-fil (IKKE web.xml) som pakkes i jar-en, og plukkes opp av OSGi-rammeverket.
Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv.
Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;.
[KLIKK]
Eller vi kan gj&#xF8;re det p&#xE5; denne m&#xE5;ten: Ved &#xE5; angi noen bestemte properties, blir serveren registrert p&#xE5; passende steder.
N&#xE5;r bundlen med servlet&#x2019;en deployes, dvs lastes opp til en Sling-instans, s&#xE5; startes den automatisk, og begynner &#xE5; svare p&#xE5; requester.
Man kan ogs&#xE5; un-deploye bundelen, oppdatere den med en ny versjon, osv, uten &#xE5; starte applikasjonen p&#xE5; nytt - takket v&#xE6;re OSGi.
[KLIKK]
Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet.
Da f&#xE5;r man et request-objekt med tilgang til ressursen.
Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
[KLIKK]
3pkt
SCR.REFERENCE gir tilgang til KJ&#xD8;RENDE KOMPONENTER
NOK &#xE5; deklarere VARIABLEN - Maven-plugin&#x2019;en GJ&#xD8;R RESTEN
N&#xC5;R SERVLETen KJ&#xD8;RER, er REPOSITORY-variabelen tilgjengelig
Man kan f&#xE5; instanser av kj&#xF8;rende komponenter ved &#xE5; bruke scr.reference
Det er nok &#xE5; deklarere variabelen. Maven-SCR-plugin&#x2019;en tar seg av resten.
N&#xE5;r servleten kj&#xF8;rer, er repository tilgjengelig.
[KLIKK]
3pkt
SCR.REFERENCE gir tilgang til KJ&#xD8;RENDE KOMPONENTER
NOK &#xE5; deklarere VARIABLEN - Maven-plugin&#x2019;en GJ&#xD8;R RESTEN
N&#xC5;R SERVLETen KJ&#xD8;RER, er REPOSITORY-variabelen tilgjengelig
Man kan f&#xE5; instanser av kj&#xF8;rende komponenter ved &#xE5; bruke scr.reference
Det er nok &#xE5; deklarere variabelen. Maven-SCR-plugin&#x2019;en tar seg av resten.
N&#xE5;r servleten kj&#xF8;rer, er repository tilgjengelig.
[KLIKK]
3pkt
SCR.REFERENCE gir tilgang til KJ&#xD8;RENDE KOMPONENTER
NOK &#xE5; deklarere VARIABLEN - Maven-plugin&#x2019;en GJ&#xD8;R RESTEN
N&#xC5;R SERVLETen KJ&#xD8;RER, er REPOSITORY-variabelen tilgjengelig
Man kan f&#xE5; instanser av kj&#xF8;rende komponenter ved &#xE5; bruke scr.reference
Det er nok &#xE5; deklarere variabelen. Maven-SCR-plugin&#x2019;en tar seg av resten.
N&#xE5;r servleten kj&#xF8;rer, er repository tilgjengelig.
1pkt ++
ANDRE KOMPONENTER man vil TENKES &#xC5; UTVIKLE
3pkt++
[KLIKK FOR HVER BULLET]
SERVLET-FILTRE
AUTENTISERINGS-MEKANISMER feks. OpenID
RESOURCE PROVIDERE - f.eks. data fra ANNEN APPLIKASJON
1pkt
[KLIKK]
UANSETT: HOT-DEPLOY
Andre komponenter man kan tenkes &#xE5; ville utvikle
[KLIKK FOR HVER BULLET]
Autentiserings-mekanismer: F.eks. OpenID
Resource providere: Gj&#xF8;r ressurser tilgjengelig, f.eks. det legacy database-systemet
Uansett hva man lager, pakker man dem som OSGi-bundler og deployer til serveren.
Hot-deploy, start, stopp, oppdatering ...
Prikk-prikk-prikk: Vi har f.eks. noe data som skal caches i applikasjonen v&#xE5;r. Cachen er implementert som en OSGi-komponent. Det betyr at vi kan bytte cache-implementasjon uten &#xE5; ta ned serveren. Vi bare deployer ny kode.
1pkt ++
ANDRE KOMPONENTER man vil TENKES &#xC5; UTVIKLE
3pkt++
[KLIKK FOR HVER BULLET]
SERVLET-FILTRE
AUTENTISERINGS-MEKANISMER feks. OpenID
RESOURCE PROVIDERE - f.eks. data fra ANNEN APPLIKASJON
1pkt
[KLIKK]
UANSETT: HOT-DEPLOY
Andre komponenter man kan tenkes &#xE5; ville utvikle
[KLIKK FOR HVER BULLET]
Autentiserings-mekanismer: F.eks. OpenID
Resource providere: Gj&#xF8;r ressurser tilgjengelig, f.eks. det legacy database-systemet
Uansett hva man lager, pakker man dem som OSGi-bundler og deployer til serveren.
Hot-deploy, start, stopp, oppdatering ...
Prikk-prikk-prikk: Vi har f.eks. noe data som skal caches i applikasjonen v&#xE5;r. Cachen er implementert som en OSGi-komponent. Det betyr at vi kan bytte cache-implementasjon uten &#xE5; ta ned serveren. Vi bare deployer ny kode.
1pkt ++
ANDRE KOMPONENTER man vil TENKES &#xC5; UTVIKLE
3pkt++
[KLIKK FOR HVER BULLET]
SERVLET-FILTRE
AUTENTISERINGS-MEKANISMER feks. OpenID
RESOURCE PROVIDERE - f.eks. data fra ANNEN APPLIKASJON
1pkt
[KLIKK]
UANSETT: HOT-DEPLOY
Andre komponenter man kan tenkes &#xE5; ville utvikle
[KLIKK FOR HVER BULLET]
Autentiserings-mekanismer: F.eks. OpenID
Resource providere: Gj&#xF8;r ressurser tilgjengelig, f.eks. det legacy database-systemet
Uansett hva man lager, pakker man dem som OSGi-bundler og deployer til serveren.
Hot-deploy, start, stopp, oppdatering ...
Prikk-prikk-prikk: Vi har f.eks. noe data som skal caches i applikasjonen v&#xE5;r. Cachen er implementert som en OSGi-komponent. Det betyr at vi kan bytte cache-implementasjon uten &#xE5; ta ned serveren. Vi bare deployer ny kode.
1pkt ++
ANDRE KOMPONENTER man vil TENKES &#xC5; UTVIKLE
3pkt++
[KLIKK FOR HVER BULLET]
SERVLET-FILTRE
AUTENTISERINGS-MEKANISMER feks. OpenID
RESOURCE PROVIDERE - f.eks. data fra ANNEN APPLIKASJON
1pkt
[KLIKK]
UANSETT: HOT-DEPLOY
Andre komponenter man kan tenkes &#xE5; ville utvikle
[KLIKK FOR HVER BULLET]
Autentiserings-mekanismer: F.eks. OpenID
Resource providere: Gj&#xF8;r ressurser tilgjengelig, f.eks. det legacy database-systemet
Uansett hva man lager, pakker man dem som OSGi-bundler og deployer til serveren.
Hot-deploy, start, stopp, oppdatering ...
Prikk-prikk-prikk: Vi har f.eks. noe data som skal caches i applikasjonen v&#xE5;r. Cachen er implementert som en OSGi-komponent. Det betyr at vi kan bytte cache-implementasjon uten &#xE5; ta ned serveren. Vi bare deployer ny kode.
1pkt ++
ANDRE KOMPONENTER man vil TENKES &#xC5; UTVIKLE
3pkt++
[KLIKK FOR HVER BULLET]
SERVLET-FILTRE
AUTENTISERINGS-MEKANISMER feks. OpenID
RESOURCE PROVIDERE - f.eks. data fra ANNEN APPLIKASJON
1pkt
[KLIKK]
UANSETT: HOT-DEPLOY
Andre komponenter man kan tenkes &#xE5; ville utvikle
[KLIKK FOR HVER BULLET]
Autentiserings-mekanismer: F.eks. OpenID
Resource providere: Gj&#xF8;r ressurser tilgjengelig, f.eks. det legacy database-systemet
Uansett hva man lager, pakker man dem som OSGi-bundler og deployer til serveren.
Hot-deploy, start, stopp, oppdatering ...
Prikk-prikk-prikk: Vi har f.eks. noe data som skal caches i applikasjonen v&#xE5;r. Cachen er implementert som en OSGi-komponent. Det betyr at vi kan bytte cache-implementasjon uten &#xE5; ta ned serveren. Vi bare deployer ny kode.
2pkt ++
SCRIPTS i stedet for SERVLETer
RASKERE &#xE5; UTVIKLE
[KLIKK]
4pkt
SLING har mange INNEBYGDE SCRIPT-motorer
[KLIKK]
ECMA-Script = Server-side JAVASCRIPT
[KLIKK]
JSR-223 - JAVA SCRIPTING fra JAVA 6
KAN PLUGGE INN EGNE
... scripts i stedet for servlet&#x2019;er
ECMAScript bedre kjent som JavaScript, men n&#xE5; snakker vi om server-side
JSR-223: Alle scriptspr&#xE5;k som st&#xF8;ttes gjennom Java Scripting
2pkt ++
SCRIPTS i stedet for SERVLETer
RASKERE &#xE5; UTVIKLE
[KLIKK]
4pkt
SLING har mange INNEBYGDE SCRIPT-motorer
[KLIKK]
ECMA-Script = Server-side JAVASCRIPT
[KLIKK]
JSR-223 - JAVA SCRIPTING fra JAVA 6
KAN PLUGGE INN EGNE
... scripts i stedet for servlet&#x2019;er
ECMAScript bedre kjent som JavaScript, men n&#xE5; snakker vi om server-side
JSR-223: Alle scriptspr&#xE5;k som st&#xF8;ttes gjennom Java Scripting
2pkt ++
SCRIPTS i stedet for SERVLETer
RASKERE &#xE5; UTVIKLE
[KLIKK]
4pkt
SLING har mange INNEBYGDE SCRIPT-motorer
[KLIKK]
ECMA-Script = Server-side JAVASCRIPT
[KLIKK]
JSR-223 - JAVA SCRIPTING fra JAVA 6
KAN PLUGGE INN EGNE
... scripts i stedet for servlet&#x2019;er
ECMAScript bedre kjent som JavaScript, men n&#xE5; snakker vi om server-side
JSR-223: Alle scriptspr&#xE5;k som st&#xF8;ttes gjennom Java Scripting
2pkt ++
SCRIPTS i stedet for SERVLETer
RASKERE &#xE5; UTVIKLE
[KLIKK]
4pkt
SLING har mange INNEBYGDE SCRIPT-motorer
[KLIKK]
ECMA-Script = Server-side JAVASCRIPT
[KLIKK]
JSR-223 - JAVA SCRIPTING fra JAVA 6
KAN PLUGGE INN EGNE
... scripts i stedet for servlet&#x2019;er
ECMAScript bedre kjent som JavaScript, men n&#xE5; snakker vi om server-side
JSR-223: Alle scriptspr&#xE5;k som st&#xF8;ttes gjennom Java Scripting
2pkt ++
SCRIPTS i stedet for SERVLETer
RASKERE &#xE5; UTVIKLE
[KLIKK]
4pkt
SLING har mange INNEBYGDE SCRIPT-motorer
[KLIKK]
ECMA-Script = Server-side JAVASCRIPT
[KLIKK]
JSR-223 - JAVA SCRIPTING fra JAVA 6
KAN PLUGGE INN EGNE
... scripts i stedet for servlet&#x2019;er
ECMAScript bedre kjent som JavaScript, men n&#xE5; snakker vi om server-side
JSR-223: Alle scriptspr&#xE5;k som st&#xF8;ttes gjennom Java Scripting
2pkt
RASKEST UTVIKLING - INGEN KOMPILERING, DEPLOYING
SCRIPTs lagres i REPOSITORIET
Raskeste - slipper &#xE5; kompilere, deploye etc - man lagrer rett i repositoriet. Kort roundtrip.
5pkt
BLOGGPOST-NODE
EKSEMPEL-SCRIPT i ESP - SERVER SIDE JAVASCRIPT
CURRENTNODE
SKRIV UT PROPERTIES med mindre-enn-prosent-erlik
SLING.INCLUDE
Dette er noden som er forespurt i requesten
Vi plasserer
Forklar ESP
currentNode er noden som er spurt etter i requesten
Skriver ut enkelt-properties - med mindre-enn-prosent-erlik
sling.include - inkluderer resultatet av en annen request. Gj&#xF8;r det mulig &#xE5; dele opp kode i flere skriptfiler.
5pkt
BLOGGPOST-NODE
EKSEMPEL-SCRIPT i ESP - SERVER SIDE JAVASCRIPT
CURRENTNODE
SKRIV UT PROPERTIES med mindre-enn-prosent-erlik
SLING.INCLUDE
Dette er noden som er forespurt i requesten
Vi plasserer
Forklar ESP
currentNode er noden som er spurt etter i requesten
Skriver ut enkelt-properties - med mindre-enn-prosent-erlik
sling.include - inkluderer resultatet av en annen request. Gj&#xF8;r det mulig &#xE5; dele opp kode i flere skriptfiler.
5pkt
BLOGGPOST-NODE
EKSEMPEL-SCRIPT i ESP - SERVER SIDE JAVASCRIPT
CURRENTNODE
SKRIV UT PROPERTIES med mindre-enn-prosent-erlik
SLING.INCLUDE
Dette er noden som er forespurt i requesten
Vi plasserer
Forklar ESP
currentNode er noden som er spurt etter i requesten
Skriver ut enkelt-properties - med mindre-enn-prosent-erlik
sling.include - inkluderer resultatet av en annen request. Gj&#xF8;r det mulig &#xE5; dele opp kode i flere skriptfiler.
BYTT TIL TERMINAL
For &#xE5; demonstrere tydelig skal vi bruke tekst-http-klienten curl
Vis hvordan man oppretter og henter en node:
-F angir et parameter man poster
curl -F title=hello http://admin:admin@localhost:8888/foo
=> 200 OK
curl http://admin:admin@localhost:8888/foo.tidy.json
NESTEN s&#xE5; hele koden kan TWITRES
4 pkt
HTTP-metode POST
FELTNAVN blir PROPERTIES p&#xE5; NODEN
TITLE-feltet BEHANDLES SPESIELT, BLIR NAVN
:REDIRECT
POST - HTTP-metode for &#xE5; lagre nytt innhold
Feltnavnene blir properties p&#xE5; noden
TITLE-feltet behandles spesielt, og blir node-navnet
:redirect forteller Post-servleten at vi skal redirectes til den ny-opprettede noden
2pkt
SLING.JS - JAVASCRIPT-BIBLIOTEK som f&#xF8;lger med SLING
SLING.WIZARD() POPULERER skjemafeltene via JSON
sling.js er et javascript-bibliotek som f&#xF8;lger med Sling
Sling.wizard() s&#xF8;rger for &#xE5; populere skjemafeltene med verdier fra noden via JSON
2 pkt
SLING.GETCONTENT henter noder fra ANGITT NODE og 2 NIV&#xC5;ER NED
DOCUMENT.WRITE skriver ut TITTEL fra NODER hentet fra JSON
BYTT TIL TextWrangler
Sling.getContent henter noder fra angitt node og 2 niv&#xE5;er ned
Vis at fila ligger i webdav, &#xE5;pne den
G&#xE5; til http://localhost:8888/content/blog/*.html
Fyll ut skjemaet
Lagre
5pkt
NOEN F&#xD8;LER SEG SNYTT?
BILDESKALERING
RSS-FEED
KOMMENTARER
ADMINISTRASJONS-GRENSESNITT
BYTT TIL Firefox
Synes du dette var for simpelt?
OK, da legger vi til dette:
5pkt
NOEN F&#xD8;LER SEG SNYTT?
BILDESKALERING
RSS-FEED
KOMMENTARER
ADMINISTRASJONS-GRENSESNITT
BYTT TIL Firefox
Synes du dette var for simpelt?
OK, da legger vi til dette:
5pkt
NOEN F&#xD8;LER SEG SNYTT?
BILDESKALERING
RSS-FEED
KOMMENTARER
ADMINISTRASJONS-GRENSESNITT
BYTT TIL Firefox
Synes du dette var for simpelt?
OK, da legger vi til dette:
5pkt
NOEN F&#xD8;LER SEG SNYTT?
BILDESKALERING
RSS-FEED
KOMMENTARER
ADMINISTRASJONS-GRENSESNITT
BYTT TIL Firefox
Synes du dette var for simpelt?
OK, da legger vi til dette:
5pkt
NOEN F&#xD8;LER SEG SNYTT?
BILDESKALERING
RSS-FEED
KOMMENTARER
ADMINISTRASJONS-GRENSESNITT
BYTT TIL Firefox
Synes du dette var for simpelt?
OK, da legger vi til dette:
5pkt
HVA SKJEDDE HER?
DISSE SCRIPTENE og ET PAR JAVAKLASSER
SCRIPTENE ligger i REPOSITORIET
Java-klassene I EN BUNDLE
SE N&#xC6;RMERE p&#xE5; JAVA-klassene
5pkt
HVA SKJEDDE HER?
DISSE SCRIPTENE og ET PAR JAVAKLASSER
SCRIPTENE ligger i REPOSITORIET
Java-klassene I EN BUNDLE
SE N&#xC6;RMERE p&#xE5; JAVA-klassene
5pkt
HVA SKJEDDE HER?
DISSE SCRIPTENE og ET PAR JAVAKLASSER
SCRIPTENE ligger i REPOSITORIET
Java-klassene I EN BUNDLE
SE N&#xC6;RMERE p&#xE5; JAVA-klassene
1 pkt
BRUKER JCR-feature OBSERVATION = EventListener
5 pkt
N&#xC5;R KOMPONENTEN AKTIVERES
HENTE OBSERVATIONMANAGER
LEGGE OSS TIL SOM EVENTLISTENER
FOR Event.NODE_ADDED
UNDER en bestemt PATH
4 pkt
IMPLEMENTERE METODE onEvent
F&#xC5; PATH til NY NODE
LAG THUMBNAILS (createThumbnails)
UNNG&#xC5; EVIG L&#xD8;KKE med !event.getPath(&#x201C;thumbnails&#x201D;)
Event-listeneren er registrert p&#xE5; repository-niv&#xE5;et
Dvs den vil trigge uansett hvordan noder blir opprettet, trenger ikke v&#xE6;re fra web-grensesnittet (f.eks. WebDav)
JCR-FUNKSJONALITET: WebDAV, OBSERVATION
SLING-SNACKS: Script-MAPPING, REST
Pakk koden i en bundle og deploy til serveren - applikasjonen kj&#xF8;rer
JCR-FUNKSJONALITET: WebDAV, OBSERVATION
SLING-SNACKS: Script-MAPPING, REST
Pakk koden i en bundle og deploy til serveren - applikasjonen kj&#xF8;rer
JCR-FUNKSJONALITET: WebDAV, OBSERVATION
SLING-SNACKS: Script-MAPPING, REST
Pakk koden i en bundle og deploy til serveren - applikasjonen kj&#xF8;rer
ER DETTE NOE FOR DEG?
6 pkt++
N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD?
P&#xC5;STAND:
[KLIKK]
JA
INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen
I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD.
Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER
[KLIKK]
2 pkt++
VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER
BONUS-FEATURES
FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart
[NESTE SLIDE]
F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA.
Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i
Etter at vi hadde snakket om hierarki i stedet for RDBMS:
Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon)
Man er s&#xE5; vant til &#xE5; m&#xE5;tte definere felter og kolonner at det er vanskelig &#xE5; tenke anderledes. RDBMS bare fordelaktig hvis man absolutt M&#xC5; ha strenge restriksjoner.
Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja!
CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser.
Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold.
Hierarki - har du noen gang laget en s&#xE5;nn tabell?
Hva n&#xE5;r en mappe skal ha flere foreldre?
Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert?
Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
ER DETTE NOE FOR DEG?
6 pkt++
N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD?
P&#xC5;STAND:
[KLIKK]
JA
INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen
I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD.
Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER
[KLIKK]
2 pkt++
VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER
BONUS-FEATURES
FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart
[NESTE SLIDE]
F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA.
Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i
Etter at vi hadde snakket om hierarki i stedet for RDBMS:
Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon)
Man er s&#xE5; vant til &#xE5; m&#xE5;tte definere felter og kolonner at det er vanskelig &#xE5; tenke anderledes. RDBMS bare fordelaktig hvis man absolutt M&#xC5; ha strenge restriksjoner.
Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja!
CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser.
Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold.
Hierarki - har du noen gang laget en s&#xE5;nn tabell?
Hva n&#xE5;r en mappe skal ha flere foreldre?
Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert?
Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
ER DETTE NOE FOR DEG?
6 pkt++
N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD?
P&#xC5;STAND:
[KLIKK]
JA
INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen
I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD.
Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER
[KLIKK]
2 pkt++
VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER
BONUS-FEATURES
FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart
[NESTE SLIDE]
F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA.
Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i
Etter at vi hadde snakket om hierarki i stedet for RDBMS:
Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon)
Man er s&#xE5; vant til &#xE5; m&#xE5;tte definere felter og kolonner at det er vanskelig &#xE5; tenke anderledes. RDBMS bare fordelaktig hvis man absolutt M&#xC5; ha strenge restriksjoner.
Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja!
CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser.
Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold.
Hierarki - har du noen gang laget en s&#xE5;nn tabell?
Hva n&#xE5;r en mappe skal ha flere foreldre?
Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert?
Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
ER DETTE NOE FOR DEG?
6 pkt++
N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD?
P&#xC5;STAND:
[KLIKK]
JA
INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen
I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD.
Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER
[KLIKK]
2 pkt++
VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER
BONUS-FEATURES
FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart
[NESTE SLIDE]
F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA.
Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i
Etter at vi hadde snakket om hierarki i stedet for RDBMS:
Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon)
Man er s&#xE5; vant til &#xE5; m&#xE5;tte definere felter og kolonner at det er vanskelig &#xE5; tenke anderledes. RDBMS bare fordelaktig hvis man absolutt M&#xC5; ha strenge restriksjoner.
Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja!
CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser.
Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold.
Hierarki - har du noen gang laget en s&#xE5;nn tabell?
Hva n&#xE5;r en mappe skal ha flere foreldre?
Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert?
Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
ER DETTE NOE FOR DEG?
6 pkt++
N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD?
P&#xC5;STAND:
[KLIKK]
JA
INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen
I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD.
Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER
[KLIKK]
2 pkt++
VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER
BONUS-FEATURES
FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart
[NESTE SLIDE]
F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA.
Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i
Etter at vi hadde snakket om hierarki i stedet for RDBMS:
Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon)
Man er s&#xE5; vant til &#xE5; m&#xE5;tte definere felter og kolonner at det er vanskelig &#xE5; tenke anderledes. RDBMS bare fordelaktig hvis man absolutt M&#xC5; ha strenge restriksjoner.
Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja!
CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser.
Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold.
Hierarki - har du noen gang laget en s&#xE5;nn tabell?
Hva n&#xE5;r en mappe skal ha flere foreldre?
Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert?
Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
ER DETTE NOE FOR DEG?
6 pkt++
N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD?
P&#xC5;STAND:
[KLIKK]
JA
INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen
I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD.
Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER
[KLIKK]
2 pkt++
VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER
BONUS-FEATURES
FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart
[NESTE SLIDE]
F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA.
Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i
Etter at vi hadde snakket om hierarki i stedet for RDBMS:
Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon)
Man er s&#xE5; vant til &#xE5; m&#xE5;tte definere felter og kolonner at det er vanskelig &#xE5; tenke anderledes. RDBMS bare fordelaktig hvis man absolutt M&#xC5; ha strenge restriksjoner.
Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja!
CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser.
Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold.
Hierarki - har du noen gang laget en s&#xE5;nn tabell?
Hva n&#xE5;r en mappe skal ha flere foreldre?
Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert?
Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
ER DETTE NOE FOR DEG?
6 pkt++
N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD?
P&#xC5;STAND:
[KLIKK]
JA
INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen
I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD.
Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER
[KLIKK]
2 pkt++
VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER
BONUS-FEATURES
FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart
[NESTE SLIDE]
F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA.
Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i
Etter at vi hadde snakket om hierarki i stedet for RDBMS:
Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon)
Man er s&#xE5; vant til &#xE5; m&#xE5;tte definere felter og kolonner at det er vanskelig &#xE5; tenke anderledes. RDBMS bare fordelaktig hvis man absolutt M&#xC5; ha strenge restriksjoner.
Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja!
CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser.
Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold.
Hierarki - har du noen gang laget en s&#xE5;nn tabell?
Hva n&#xE5;r en mappe skal ha flere foreldre?
Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert?
Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
ER DETTE NOE FOR DEG?
6 pkt++
N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD?
P&#xC5;STAND:
[KLIKK]
JA
INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen
I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD.
Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER
[KLIKK]
2 pkt++
VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER
BONUS-FEATURES
FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart
[NESTE SLIDE]
F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA.
Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i
Etter at vi hadde snakket om hierarki i stedet for RDBMS:
Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon)
Man er s&#xE5; vant til &#xE5; m&#xE5;tte definere felter og kolonner at det er vanskelig &#xE5; tenke anderledes. RDBMS bare fordelaktig hvis man absolutt M&#xC5; ha strenge restriksjoner.
Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja!
CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser.
Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold.
Hierarki - har du noen gang laget en s&#xE5;nn tabell?
Hva n&#xE5;r en mappe skal ha flere foreldre?
Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert?
Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
(Forutsatt at man har Maven installert)
SJEKKE UT
SETT MINNE (trenger ofte mer minne for &#xE5; bygge, ikke for &#xE5; kj&#xF8;re)
BYGG (kan ogs&#xE5; bygge uten Maven)
TILGJENGELIG UNDER HELE JAVAZONE - SP&#xD8;R OM HJELP
(Forutsatt at man har Maven installert)
SJEKKE UT
SETT MINNE (trenger ofte mer minne for &#xE5; bygge, ikke for &#xE5; kj&#xF8;re)
BYGG (kan ogs&#xE5; bygge uten Maven)
TILGJENGELIG UNDER HELE JAVAZONE - SP&#xD8;R OM HJELP
(Forutsatt at man har Maven installert)
SJEKKE UT
SETT MINNE (trenger ofte mer minne for &#xE5; bygge, ikke for &#xE5; kj&#xF8;re)
BYGG (kan ogs&#xE5; bygge uten Maven)
TILGJENGELIG UNDER HELE JAVAZONE - SP&#xD8;R OM HJELP
(Forutsatt at man har Maven installert)
SJEKKE UT
SETT MINNE (trenger ofte mer minne for &#xE5; bygge, ikke for &#xE5; kj&#xF8;re)
BYGG (kan ogs&#xE5; bygge uten Maven)
TILGJENGELIG UNDER HELE JAVAZONE - SP&#xD8;R OM HJELP
5 pkt
SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS
PLUGG INN egne BUNDLER
UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER
ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
5 pkt
SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS
PLUGG INN egne BUNDLER
UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER
ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
5 pkt
SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS
PLUGG INN egne BUNDLER
UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER
ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
5 pkt
SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS
PLUGG INN egne BUNDLER
UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER
ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
5 pkt
SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS
PLUGG INN egne BUNDLER
UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER
ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
5 pkt
SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS
PLUGG INN egne BUNDLER
UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER
ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
5 pkt
SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS
PLUGG INN egne BUNDLER
UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER
ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
5 pkt
SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS
PLUGG INN egne BUNDLER
UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER
ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
AVSLUTTER med LINKER til de som vil VITE MER
4 pkt
HJEMMESIDE til PROSJEKTET
15-MINUTTERS INTRO
MAILINGLISTE
HJEMMESIDE for JACKRABBIT jcr-IMPLEMENTASJON
SP&#xD8;RSM&#xC5;L?
For de som har lyst til &#xE5; vite mer:
Wiki&#x2019;en - et slags springbrett til hjemmesida, men med mye bra halvferdig stoff
Veldig bra mailingliste - aktive deltakere, f&#xE5;r raskt svar