Apache Sling presentation at JavaZone 2009
Upcoming SlideShare
Loading in...5
×
 

Apache Sling presentation at JavaZone 2009

on

  • 3,359 views

 

Statistics

Views

Total Views
3,359
Views on SlideShare
2,124
Embed Views
1,235

Actions

Likes
0
Downloads
44
Comments
0

3 Embeds 1,235

http://blog.dreamcss.com 1190
http://translate.googleusercontent.com 39
http://www.slideshare.net 6

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 7 pkt <br /> DEFINISJON <br /> JCR <br /> OSGi <br /> REST <br /> SLING TILF&#xD8;RER <br /> DEMO <br /> NOE FOR DEG <br /> <br /> <br /> <br /> F&#xF8;rst en definisjon av hva Sling er <br /> S&#xE5; til Java Content Repository, som Sling bygger p&#xE5; <br /> OSGi og REST er ogs&#xE5; viktige begreper <br /> S&#xE5; g&#xE5;r vi grundigere inn p&#xE5; hva Sling tilbyr <br /> S&#xE5; en demo av en applikasjon <br /> Til slutt ser vi p&#xE5; hvilke problemer Sling l&#xF8;ser
  • Klikk for hver bullet <br /> 3 pkt <br /> UTVIKLER I IDIUM <br /> BASERT P&#xC5; SLING <br /> COMMITTER <br /> <br /> <br /> <br /> <br /> <br /> <br /> Committer - kan bidra til prosjektet og p&#xE5;virke det
  • Klikk for hver bullet <br /> 3 pkt <br /> UTVIKLER I IDIUM <br /> BASERT P&#xC5; SLING <br /> COMMITTER <br /> <br /> <br /> <br /> <br /> <br /> <br /> Committer - kan bidra til prosjektet og p&#xE5;virke det
  • Klikk for hver bullet <br /> 3 pkt <br /> UTVIKLER I IDIUM <br /> BASERT P&#xC5; SLING <br /> COMMITTER <br /> <br /> <br /> <br /> <br /> <br /> <br /> Committer - kan bidra til prosjektet og p&#xE5;virke det
  • Hva er det_ vi skal snakke om <br /> [KLIKK] <br /> 3pkt <br /> &#x201C;the simplest device for delivering content very fast&#x201D; st&#xE5;r det i PR-materiellet <br /> 4 pkt <br /> ENKELT, RASKT, INNHOLD <br /> DEFINERE INNHOLD SEINERE <br /> <br /> <br /> <br /> WEB-RAMMEVERK DEDIKERT TIL JCR <br /> <br /> <br /> <br /> APACHE LICENSE <br /> <br /> <br /> <br /> - det dreier seg alts&#xE5; om *innhold*, definisjon seinere <br /> - den raskeste m&#xE5;ten &#xE5; utvikle innholdsbaserte applikasjoner <br /> <br /> <br /> <br /> Apache-prosjekt = &#xE5;pen kildekode, Apache License er en av de aller frieste lisensene
  • Hva er det_ vi skal snakke om <br /> [KLIKK] <br /> 3pkt <br /> &#x201C;the simplest device for delivering content very fast&#x201D; st&#xE5;r det i PR-materiellet <br /> 4 pkt <br /> ENKELT, RASKT, INNHOLD <br /> DEFINERE INNHOLD SEINERE <br /> <br /> <br /> <br /> WEB-RAMMEVERK DEDIKERT TIL JCR <br /> <br /> <br /> <br /> APACHE LICENSE <br /> <br /> <br /> <br /> - det dreier seg alts&#xE5; om *innhold*, definisjon seinere <br /> - den raskeste m&#xE5;ten &#xE5; utvikle innholdsbaserte applikasjoner <br /> <br /> <br /> <br /> Apache-prosjekt = &#xE5;pen kildekode, Apache License er en av de aller frieste lisensene
  • Hva er det_ vi skal snakke om <br /> [KLIKK] <br /> 3pkt <br /> &#x201C;the simplest device for delivering content very fast&#x201D; st&#xE5;r det i PR-materiellet <br /> 4 pkt <br /> ENKELT, RASKT, INNHOLD <br /> DEFINERE INNHOLD SEINERE <br /> <br /> <br /> <br /> WEB-RAMMEVERK DEDIKERT TIL JCR <br /> <br /> <br /> <br /> APACHE LICENSE <br /> <br /> <br /> <br /> - det dreier seg alts&#xE5; om *innhold*, definisjon seinere <br /> - den raskeste m&#xE5;ten &#xE5; utvikle innholdsbaserte applikasjoner <br /> <br /> <br /> <br /> Apache-prosjekt = &#xE5;pen kildekode, Apache License er en av de aller frieste lisensene
  • Hva er det_ vi skal snakke om <br /> [KLIKK] <br /> 3pkt <br /> &#x201C;the simplest device for delivering content very fast&#x201D; st&#xE5;r det i PR-materiellet <br /> 4 pkt <br /> ENKELT, RASKT, INNHOLD <br /> DEFINERE INNHOLD SEINERE <br /> <br /> <br /> <br /> WEB-RAMMEVERK DEDIKERT TIL JCR <br /> <br /> <br /> <br /> APACHE LICENSE <br /> <br /> <br /> <br /> - det dreier seg alts&#xE5; om *innhold*, definisjon seinere <br /> - den raskeste m&#xE5;ten &#xE5; utvikle innholdsbaserte applikasjoner <br /> <br /> <br /> <br /> Apache-prosjekt = &#xE5;pen kildekode, Apache License er en av de aller frieste lisensene
  • Hva er det_ vi skal snakke om <br /> [KLIKK] <br /> 3pkt <br /> &#x201C;the simplest device for delivering content very fast&#x201D; st&#xE5;r det i PR-materiellet <br /> 4 pkt <br /> ENKELT, RASKT, INNHOLD <br /> DEFINERE INNHOLD SEINERE <br /> <br /> <br /> <br /> WEB-RAMMEVERK DEDIKERT TIL JCR <br /> <br /> <br /> <br /> APACHE LICENSE <br /> <br /> <br /> <br /> - det dreier seg alts&#xE5; om *innhold*, definisjon seinere <br /> - den raskeste m&#xE5;ten &#xE5; utvikle innholdsbaserte applikasjoner <br /> <br /> <br /> <br /> Apache-prosjekt = &#xE5;pen kildekode, Apache License er en av de aller frieste lisensene
  • Sling er en plattform, som igjen er ... <br /> <br /> <br /> <br /> 3pkt <br /> BYGD P&#xC5; JCR <br /> basert p&#xE5; REST <br /> drevet av OSGi <br /> <br /> <br /> <br /> ... og vi skal se p&#xE5; disse delene
  • Sling er en plattform, som igjen er ... <br /> <br /> <br /> <br /> 3pkt <br /> BYGD P&#xC5; JCR <br /> basert p&#xE5; REST <br /> drevet av OSGi <br /> <br /> <br /> <br /> ... og vi skal se p&#xE5; disse delene
  • Sling er en plattform, som igjen er ... <br /> <br /> <br /> <br /> 3pkt <br /> BYGD P&#xC5; JCR <br /> basert p&#xE5; REST <br /> drevet av OSGi <br /> <br /> <br /> <br /> ... og vi skal se p&#xE5; disse delene
  • Tre standarder som Sling bygger p&#xE5;. F&#xF8;rst: <br /> JCR - Java Content Repository
  • Tre standarder som Sling bygger p&#xE5;. F&#xF8;rst: <br /> JCR - Java Content Repository
  • Tre standarder som Sling bygger p&#xE5;. F&#xF8;rst: <br /> JCR - Java Content Repository
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 5 pkt <br /> JSR-170: JCR 1.0 <br /> JSR-283: JCR 2.0 - ferd med &#xE5; bli ferdigstilt <br /> <br /> <br /> <br /> 5pkt <br /> JCR 1.0 og 2.0 <br /> STORE FIRMAER ST&#xD8;TTER <br /> HIERARKISK DATABASE <br /> NODER OG ATTRIBUTTER, ikke TABELLER OG KOLONNER <br /> RIKE DATATYPER <br /> <br /> <br /> <br /> ... alts&#xE5; vedtatte Java-standarder, med noen store firmaer bak <br /> [KLIKK] <br /> <br /> <br /> <br /> Hierarki - ikke tabeller / kolonner <br /> <br /> <br /> <br /> Kommer tilbake til datatyper/-struktur
  • 4 pkt <br /> FLERE FORSKJELLIGE IMPLEMENTASJONER AV JCR-STANDARDEN <br /> NYTT: OpenJCR <br /> APACHE JACKRABBIT ER REFERANSEIMPL, og shippes med Sling <br /> DE FLESTE BYGD P&#xC5; JACKRABBIT <br /> <br /> <br /> <br /> Apache Jackrabbit er referanseimplementasjonen, og den som shippes med Sling <br /> Microsoft Sharepoint - via connector fra Day <br /> <br /> <br /> <br /> Mange av disse er bygd p&#xE5; Jackrabbit, men utvidet med propriet&#xE6;r funksjonalitet
  • 4 pkt <br /> FLERE FORSKJELLIGE IMPLEMENTASJONER AV JCR-STANDARDEN <br /> NYTT: OpenJCR <br /> APACHE JACKRABBIT ER REFERANSEIMPL, og shippes med Sling <br /> DE FLESTE BYGD P&#xC5; JACKRABBIT <br /> <br /> <br /> <br /> Apache Jackrabbit er referanseimplementasjonen, og den som shippes med Sling <br /> Microsoft Sharepoint - via connector fra Day <br /> <br /> <br /> <br /> Mange av disse er bygd p&#xE5; Jackrabbit, men utvidet med propriet&#xE6;r funksjonalitet
  • 2pkt <br /> NOEN KJENTE NAVN, bl.a. NORSKE <br /> MYE ENTERPRISE, men SLING EGNER SEG OGS&#xC5; FOR MINDRE L&#xD8;SNINGER => ref kolibri <br /> <br /> <br /> <br /> Antakelig noen kjente navn her. De fleste bruker Jackrabbit som implementasjon. <br /> <br /> <br /> <br /> Mye enterprise-systemer, men med Sling egner JCR seg ogs&#xE5; for mindre l&#xF8;sninger. Derfor Idium Web.
  • 2pkt <br /> JSR-STANDARDER KAN V&#xC6;RE KRYPTISKE <br /> N&#xD8;KKELEN ER &#xE5; forst&#xE5; HVA CONTENT REPOSITORY er <br /> <br /> <br /> <br /> N&#xE5;r det gjelder JSR-standardene, s&#xE5; kan de v&#xE6;re kryptiske. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> N&#xF8;kkelen er &#xE5; forst&#xE5; hva et &#x201C;content repository&#x201D; er
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • 3pkt <br /> DB og FILSYSTEM - TO FORSKJELLIGE VERDENER <br /> FELLES: LESE- og SKRIVE-TILGANG <br /> JCR: BESTE FRA BEGGE VERDENER <br /> <br /> <br /> <br /> Database og filsystem - vi er vant til &#xE5; se p&#xE5; det som to forskjellige verdener <br /> Men det er et par ting felles: Lese- og skrivetilgang <br /> <br /> <br /> <br /> (Til slutt): JCR tar det beste fra begge verdener
  • MEN DET ER SELVF&#xD8;LGELIG IKKE ALT <br /> <br /> <br /> <br /> (Klikk en gang til for &#xE5; f&#xE5; g&#xE5; videre fra plakaten)
  • MEN DET ER SELVF&#xD8;LGELIG IKKE ALT <br /> <br /> <br /> <br /> (Klikk en gang til for &#xE5; f&#xE5; g&#xE5; videre fra plakaten)
  • I TILLEGG: <br /> <br /> <br /> <br /> Fulltekst-s&#xF8;k <br /> Fri struktur <br /> Versjonering <br /> Flerverdi-felt <br /> Spesifikk rekkef&#xF8;lge <br /> Obervasjon <br /> og alt dette er tilgjengelig gjennom et enkelt Java-API
  • I TILLEGG: <br /> <br /> <br /> <br /> Fulltekst-s&#xF8;k <br /> Fri struktur <br /> Versjonering <br /> Flerverdi-felt <br /> Spesifikk rekkef&#xF8;lge <br /> Obervasjon <br /> og alt dette er tilgjengelig gjennom et enkelt Java-API
  • I TILLEGG: <br /> <br /> <br /> <br /> Fulltekst-s&#xF8;k <br /> Fri struktur <br /> Versjonering <br /> Flerverdi-felt <br /> Spesifikk rekkef&#xF8;lge <br /> Obervasjon <br /> og alt dette er tilgjengelig gjennom et enkelt Java-API
  • I TILLEGG: <br /> <br /> <br /> <br /> Fulltekst-s&#xF8;k <br /> Fri struktur <br /> Versjonering <br /> Flerverdi-felt <br /> Spesifikk rekkef&#xF8;lge <br /> Obervasjon <br /> og alt dette er tilgjengelig gjennom et enkelt Java-API
  • I TILLEGG: <br /> <br /> <br /> <br /> Fulltekst-s&#xF8;k <br /> Fri struktur <br /> Versjonering <br /> Flerverdi-felt <br /> Spesifikk rekkef&#xF8;lge <br /> Obervasjon <br /> og alt dette er tilgjengelig gjennom et enkelt Java-API
  • I TILLEGG: <br /> <br /> <br /> <br /> Fulltekst-s&#xF8;k <br /> Fri struktur <br /> Versjonering <br /> Flerverdi-felt <br /> Spesifikk rekkef&#xF8;lge <br /> Obervasjon <br /> og alt dette er tilgjengelig gjennom et enkelt Java-API
  • I TILLEGG: <br /> <br /> <br /> <br /> Fulltekst-s&#xF8;k <br /> Fri struktur <br /> Versjonering <br /> Flerverdi-felt <br /> Spesifikk rekkef&#xF8;lge <br /> Obervasjon <br /> og alt dette er tilgjengelig gjennom et enkelt Java-API
  • 6pkt <br /> SELVF&#xD8;LGELIG HIERARKI - (ET TRE) <br /> DYP MAN VIL <br /> BRED MAN VIL <br /> NEDERST TIL H&#xD8;YRE: FIL <br /> IKKE VIST: VERSJONERING, S&#xD8;SKEN MED SAMME NAVN <br /> GR&#xD8;NN LEGOGKLOSS = NODE til seinere <br /> <br /> <br /> <br /> S&#xE5;, hvordan ser et repository ut? <br /> <br /> <br /> <br /> Selvf&#xF8;lgelig et hierarki (et tre) <br /> <br /> <br /> <br /> Legg merke til: <br /> - Strukturen kan v&#xE6;re s&#xE5; dyp og bred man vil <br /> - En node kan ha s&#xE5; mange barn man vil <br /> - Noder kan ha forskjellige attributter <br /> - Filnoden nederst til h&#xF8;yre - man kan lagre filer rett i repositoriet <br /> Mange features ikke demonstrert her, som: <br /> - versjonering <br /> - s&#xF8;sken med samme navn <br /> <br /> <br /> <br /> De gr&#xF8;nne legoklossene betyr &#x201C;node&#x201D; - kommer til &#xE5; bruke det seinere
  • 6pkt <br /> SELVF&#xD8;LGELIG HIERARKI - (ET TRE) <br /> DYP MAN VIL <br /> BRED MAN VIL <br /> NEDERST TIL H&#xD8;YRE: FIL <br /> IKKE VIST: VERSJONERING, S&#xD8;SKEN MED SAMME NAVN <br /> GR&#xD8;NN LEGOGKLOSS = NODE til seinere <br /> <br /> <br /> <br /> S&#xE5;, hvordan ser et repository ut? <br /> <br /> <br /> <br /> Selvf&#xF8;lgelig et hierarki (et tre) <br /> <br /> <br /> <br /> Legg merke til: <br /> - Strukturen kan v&#xE6;re s&#xE5; dyp og bred man vil <br /> - En node kan ha s&#xE5; mange barn man vil <br /> - Noder kan ha forskjellige attributter <br /> - Filnoden nederst til h&#xF8;yre - man kan lagre filer rett i repositoriet <br /> Mange features ikke demonstrert her, som: <br /> - versjonering <br /> - s&#xF8;sken med samme navn <br /> <br /> <br /> <br /> De gr&#xF8;nne legoklossene betyr &#x201C;node&#x201D; - kommer til &#xE5; bruke det seinere
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • javax.jcr er JCR-apiet <br /> o.a.j.c.TR er fra JackRabbit-implementasjonen i bl&#xE5;tt <br /> <br /> <br /> <br /> session.save() lagrer alle endringer s&#xE5; langt, man jobber alts&#xE5; i sin sandkasse <br /> <br /> <br /> <br /> Eksempel p&#xE5; hvordan man henter ut en node. <br /> Tar en node man har, og gir en relativ path til denne. <br /> <br /> <br /> <br /> Kan ogs&#xE5; gj&#xF8;res med sp&#xF8;rring: XPath eller SQL
  • 5pkt <br /> MANGE APP SKAL LEVE *LENGE* - VANSKELIG &#xC5; TA H&#xD8;YDE FOR FREMTIDIGE TYPER DATA <br /> N&#xC5;R MAN IKKE *TRENGER* STRENGE RESTRIKSJONER, B&#xD8;R MAN HELLER IKKE INNF&#xD8;RE DEM <br /> KAN INNF&#xD8;RE RESTRIKSJONER ETTERHVERT <br /> RULES OF DATABASE AGING - ALLE &#x201C;NOT NULL&#x201D; BLIR BORTE <br /> HIERARKI TILSTREKKELIG - MULIG MED KRYSSREFERANSER, MEN UNNG&#xC5; DET <br /> <br /> <br /> <br /> Mange applikasjoner skal leve LENGE, og det er vanskelig &#xE5; ta h&#xF8;yde for fremtidige typer data som skal lagres. <br /> <br /> <br /> <br /> N&#xE5;r man ikke *trenger* &#xE5; sette opp felter fra start, s&#xE5; b&#xF8;r man heller ikke gj&#xF8;re det <br /> Man kan innf&#xF8;re rigide restriksjoner fra start <br /> 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: <br /> f.eks. kan ikke feltet &#x201C;stat&#x201D; fylles ut <br /> Et content repository skal leve lenge, og b&#xF8;r kunne h&#xE5;ndtere nye behov etterhvert <br /> <br /> <br /> <br /> Hierarki tilstrekkelig struktur: Det er MULIG &#xE5; lage referanser, men ikke n&#xF8;dvendig, og ofte dumt.
  • 5pkt <br /> MANGE APP SKAL LEVE *LENGE* - VANSKELIG &#xC5; TA H&#xD8;YDE FOR FREMTIDIGE TYPER DATA <br /> N&#xC5;R MAN IKKE *TRENGER* STRENGE RESTRIKSJONER, B&#xD8;R MAN HELLER IKKE INNF&#xD8;RE DEM <br /> KAN INNF&#xD8;RE RESTRIKSJONER ETTERHVERT <br /> RULES OF DATABASE AGING - ALLE &#x201C;NOT NULL&#x201D; BLIR BORTE <br /> HIERARKI TILSTREKKELIG - MULIG MED KRYSSREFERANSER, MEN UNNG&#xC5; DET <br /> <br /> <br /> <br /> Mange applikasjoner skal leve LENGE, og det er vanskelig &#xE5; ta h&#xF8;yde for fremtidige typer data som skal lagres. <br /> <br /> <br /> <br /> N&#xE5;r man ikke *trenger* &#xE5; sette opp felter fra start, s&#xE5; b&#xF8;r man heller ikke gj&#xF8;re det <br /> Man kan innf&#xF8;re rigide restriksjoner fra start <br /> 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: <br /> f.eks. kan ikke feltet &#x201C;stat&#x201D; fylles ut <br /> Et content repository skal leve lenge, og b&#xF8;r kunne h&#xE5;ndtere nye behov etterhvert <br /> <br /> <br /> <br /> Hierarki tilstrekkelig struktur: Det er MULIG &#xE5; lage referanser, men ikke n&#xF8;dvendig, og ofte dumt.
  • 5pkt <br /> MANGE APP SKAL LEVE *LENGE* - VANSKELIG &#xC5; TA H&#xD8;YDE FOR FREMTIDIGE TYPER DATA <br /> N&#xC5;R MAN IKKE *TRENGER* STRENGE RESTRIKSJONER, B&#xD8;R MAN HELLER IKKE INNF&#xD8;RE DEM <br /> KAN INNF&#xD8;RE RESTRIKSJONER ETTERHVERT <br /> RULES OF DATABASE AGING - ALLE &#x201C;NOT NULL&#x201D; BLIR BORTE <br /> HIERARKI TILSTREKKELIG - MULIG MED KRYSSREFERANSER, MEN UNNG&#xC5; DET <br /> <br /> <br /> <br /> Mange applikasjoner skal leve LENGE, og det er vanskelig &#xE5; ta h&#xF8;yde for fremtidige typer data som skal lagres. <br /> <br /> <br /> <br /> N&#xE5;r man ikke *trenger* &#xE5; sette opp felter fra start, s&#xE5; b&#xF8;r man heller ikke gj&#xF8;re det <br /> Man kan innf&#xF8;re rigide restriksjoner fra start <br /> 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: <br /> f.eks. kan ikke feltet &#x201C;stat&#x201D; fylles ut <br /> Et content repository skal leve lenge, og b&#xF8;r kunne h&#xE5;ndtere nye behov etterhvert <br /> <br /> <br /> <br /> Hierarki tilstrekkelig struktur: Det er MULIG &#xE5; lage referanser, men ikke n&#xF8;dvendig, og ofte dumt.
  • Blogg-applikasjon: Webapplikasjon for et bloggsystem. <br /> <br /> <br /> <br /> Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster. <br /> Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId. <br /> Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen. <br /> <br /> <br /> <br /> 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). <br /> <br /> <br /> <br /> Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon. <br /> Legg merke til referansene som opprettholdes av IDer. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster. <br /> Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId. <br /> Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen. <br /> <br /> <br /> <br /> 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). <br /> <br /> <br /> <br /> Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon. <br /> Legg merke til referansene som opprettholdes av IDer. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster. <br /> Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId. <br /> Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen. <br /> <br /> <br /> <br /> 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). <br /> <br /> <br /> <br /> Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon. <br /> Legg merke til referansene som opprettholdes av IDer. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster. <br /> Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId. <br /> Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen. <br /> <br /> <br /> <br /> 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). <br /> <br /> <br /> <br /> Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon. <br /> Legg merke til referansene som opprettholdes av IDer. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster. <br /> Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId. <br /> Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen. <br /> <br /> <br /> <br /> 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). <br /> <br /> <br /> <br /> Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon. <br /> Legg merke til referansene som opprettholdes av IDer. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster. <br /> Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId. <br /> Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen. <br /> <br /> <br /> <br /> 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). <br /> <br /> <br /> <br /> Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon. <br /> Legg merke til referansene som opprettholdes av IDer. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster. <br /> Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId. <br /> Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen. <br /> <br /> <br /> <br /> 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). <br /> <br /> <br /> <br /> Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon. <br /> Legg merke til referansene som opprettholdes av IDer. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster. <br /> Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId. <br /> Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen. <br /> <br /> <br /> <br /> 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). <br /> <br /> <br /> <br /> Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon. <br /> Legg merke til referansene som opprettholdes av IDer. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster. <br /> Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId. <br /> Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen. <br /> <br /> <br /> <br /> 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). <br /> <br /> <br /> <br /> Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon. <br /> Legg merke til referansene som opprettholdes av IDer. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Man skal kunne ha flere blogger. En blogg skal kunne ha flere poster. <br /> Hver tabell har en ID-kolonne. En post er linket til en blogg vhja bloggId. <br /> Det fungerer fint lenge, man f&#xE5;r mange blogginnlegg i databasen. <br /> <br /> <br /> <br /> 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). <br /> <br /> <br /> <br /> Etterhvert finner man ut at man vil kunne ha flere bilder til en bloggpost. Kolonnen droppes, ny tabell innf&#xF8;res, ny relasjon. <br /> Legg merke til referansene som opprettholdes av IDer. <br /> <br /> <br /> <br /> 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 <br /> INGEN PRIM&#xC6;RN&#xD8;KLER <br /> INNF&#xD8;RE VEDLEGG - BARE SLENGE P&#xC5; NY NODE <br /> JCR ST&#xD8;TTER FILER SOM INNHOLD - KAN LAGRE FILA DIREKTE <br /> FLERE VEDLEGG - FLERE FILNODER <br /> <br /> <br /> <br /> &#x201C;Vidars blogg&#x201D; er en toppniv&#xE5;-node, &#x201C;First post&#x201D; og &#x201C;Second post&#x201D; er noder direkte under denne. <br /> Slipper n&#xF8;kler i det hele tatt <br /> <br /> <br /> <br /> N&#xE5;r jeg &#xF8;nsker &#xE5; innf&#xF8;re vedlegg, er det bare &#xE5; slenge p&#xE5; en ny node. <br /> 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 <br /> INGEN PRIM&#xC6;RN&#xD8;KLER <br /> INNF&#xD8;RE VEDLEGG - BARE SLENGE P&#xC5; NY NODE <br /> JCR ST&#xD8;TTER FILER SOM INNHOLD - KAN LAGRE FILA DIREKTE <br /> FLERE VEDLEGG - FLERE FILNODER <br /> <br /> <br /> <br /> &#x201C;Vidars blogg&#x201D; er en toppniv&#xE5;-node, &#x201C;First post&#x201D; og &#x201C;Second post&#x201D; er noder direkte under denne. <br /> Slipper n&#xF8;kler i det hele tatt <br /> <br /> <br /> <br /> N&#xE5;r jeg &#xF8;nsker &#xE5; innf&#xF8;re vedlegg, er det bare &#xE5; slenge p&#xE5; en ny node. <br /> 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 <br /> INGEN PRIM&#xC6;RN&#xD8;KLER <br /> INNF&#xD8;RE VEDLEGG - BARE SLENGE P&#xC5; NY NODE <br /> JCR ST&#xD8;TTER FILER SOM INNHOLD - KAN LAGRE FILA DIREKTE <br /> FLERE VEDLEGG - FLERE FILNODER <br /> <br /> <br /> <br /> &#x201C;Vidars blogg&#x201D; er en toppniv&#xE5;-node, &#x201C;First post&#x201D; og &#x201C;Second post&#x201D; er noder direkte under denne. <br /> Slipper n&#xF8;kler i det hele tatt <br /> <br /> <br /> <br /> N&#xE5;r jeg &#xF8;nsker &#xE5; innf&#xF8;re vedlegg, er det bare &#xE5; slenge p&#xE5; en ny node. <br /> 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 <br /> INGEN PRIM&#xC6;RN&#xD8;KLER <br /> INNF&#xD8;RE VEDLEGG - BARE SLENGE P&#xC5; NY NODE <br /> JCR ST&#xD8;TTER FILER SOM INNHOLD - KAN LAGRE FILA DIREKTE <br /> FLERE VEDLEGG - FLERE FILNODER <br /> <br /> <br /> <br /> &#x201C;Vidars blogg&#x201D; er en toppniv&#xE5;-node, &#x201C;First post&#x201D; og &#x201C;Second post&#x201D; er noder direkte under denne. <br /> Slipper n&#xF8;kler i det hele tatt <br /> <br /> <br /> <br /> N&#xE5;r jeg &#xF8;nsker &#xE5; innf&#xF8;re vedlegg, er det bare &#xE5; slenge p&#xE5; en ny node. <br /> 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 <br /> INGEN PRIM&#xC6;RN&#xD8;KLER <br /> INNF&#xD8;RE VEDLEGG - BARE SLENGE P&#xC5; NY NODE <br /> JCR ST&#xD8;TTER FILER SOM INNHOLD - KAN LAGRE FILA DIREKTE <br /> FLERE VEDLEGG - FLERE FILNODER <br /> <br /> <br /> <br /> &#x201C;Vidars blogg&#x201D; er en toppniv&#xE5;-node, &#x201C;First post&#x201D; og &#x201C;Second post&#x201D; er noder direkte under denne. <br /> Slipper n&#xF8;kler i det hele tatt <br /> <br /> <br /> <br /> N&#xE5;r jeg &#xF8;nsker &#xE5; innf&#xF8;re vedlegg, er det bare &#xE5; slenge p&#xE5; en ny node. <br /> 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 <br /> HVORDAN UTVIKLE EGEN FUNKSJONALITET TIL SIN SLING-APPLIKASJON <br /> OSGi IKKE STRENGT N&#xD8;DVENDIG (MULIG &#xC5; UNNG&#xC5;), MEN KORT SE P&#xC5; DET <br /> <br /> <br /> <br /> <br /> <br /> <br /> Hvordan utvikler man egen funksjonalitet til sin Sling-applikasjon? <br /> <br /> <br /> <br /> OSGi er ikke n&#xF8;dvendig &#xE5; kunne for &#xE5; lage enkle Sling-applikasjoner, men vi skal se kort p&#xE5; det.
  • 2 pkt <br /> HVORDAN UTVIKLE EGEN FUNKSJONALITET TIL SIN SLING-APPLIKASJON <br /> OSGi IKKE STRENGT N&#xD8;DVENDIG (MULIG &#xC5; UNNG&#xC5;), MEN KORT SE P&#xC5; DET <br /> <br /> <br /> <br /> <br /> <br /> <br /> Hvordan utvikler man egen funksjonalitet til sin Sling-applikasjon? <br /> <br /> <br /> <br /> OSGi er ikke n&#xF8;dvendig &#xE5; kunne for &#xE5; lage enkle Sling-applikasjoner, men vi skal se kort p&#xE5; det.
  • 2 pkt <br /> HVORDAN UTVIKLE EGEN FUNKSJONALITET TIL SIN SLING-APPLIKASJON <br /> OSGi IKKE STRENGT N&#xD8;DVENDIG (MULIG &#xC5; UNNG&#xC5;), MEN KORT SE P&#xC5; DET <br /> <br /> <br /> <br /> <br /> <br /> <br /> Hvordan utvikler man egen funksjonalitet til sin Sling-applikasjon? <br /> <br /> <br /> <br /> 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 <br /> <br /> <br /> <br /> Open Services Gateway initiative - navnet ikke lenger i bruk <br /> <br /> <br /> <br /> [klikk] <br /> <br /> <br /> <br /> 4pkt <br /> FUNKSJONALITET PAKKES I BUNDLES - SKAL SE HVA EN BUNDLE ER <br /> KAN STARTES, STOPPES, OPPGRADERES - HOT-DEPLOY <br /> BUNDLER KAN HA AVHENGIGHETER TIL ANDRE <br /> BUNDLER EKSPORTERER PAKKER TIL ANDRE BUNDLER <br /> <br /> <br /> <br /> Funksjonalitet pakkes i bundles - skal straks se hva en bundle er <br /> Bundle med JCR-innhold: i tillegg til kode - Sling-spesifikt
  • Dynamic Module System For Java <br /> <br /> <br /> <br /> Open Services Gateway initiative - navnet ikke lenger i bruk <br /> <br /> <br /> <br /> [klikk] <br /> <br /> <br /> <br /> 4pkt <br /> FUNKSJONALITET PAKKES I BUNDLES - SKAL SE HVA EN BUNDLE ER <br /> KAN STARTES, STOPPES, OPPGRADERES - HOT-DEPLOY <br /> BUNDLER KAN HA AVHENGIGHETER TIL ANDRE <br /> BUNDLER EKSPORTERER PAKKER TIL ANDRE BUNDLER <br /> <br /> <br /> <br /> Funksjonalitet pakkes i bundles - skal straks se hva en bundle er <br /> Bundle med JCR-innhold: i tillegg til kode - Sling-spesifikt
  • Dynamic Module System For Java <br /> <br /> <br /> <br /> Open Services Gateway initiative - navnet ikke lenger i bruk <br /> <br /> <br /> <br /> [klikk] <br /> <br /> <br /> <br /> 4pkt <br /> FUNKSJONALITET PAKKES I BUNDLES - SKAL SE HVA EN BUNDLE ER <br /> KAN STARTES, STOPPES, OPPGRADERES - HOT-DEPLOY <br /> BUNDLER KAN HA AVHENGIGHETER TIL ANDRE <br /> BUNDLER EKSPORTERER PAKKER TIL ANDRE BUNDLER <br /> <br /> <br /> <br /> Funksjonalitet pakkes i bundles - skal straks se hva en bundle er <br /> Bundle med JCR-innhold: i tillegg til kode - Sling-spesifikt
  • Dynamic Module System For Java <br /> <br /> <br /> <br /> Open Services Gateway initiative - navnet ikke lenger i bruk <br /> <br /> <br /> <br /> [klikk] <br /> <br /> <br /> <br /> 4pkt <br /> FUNKSJONALITET PAKKES I BUNDLES - SKAL SE HVA EN BUNDLE ER <br /> KAN STARTES, STOPPES, OPPGRADERES - HOT-DEPLOY <br /> BUNDLER KAN HA AVHENGIGHETER TIL ANDRE <br /> BUNDLER EKSPORTERER PAKKER TIL ANDRE BUNDLER <br /> <br /> <br /> <br /> Funksjonalitet pakkes i bundles - skal straks se hva en bundle er <br /> Bundle med JCR-innhold: i tillegg til kode - Sling-spesifikt
  • Dynamic Module System For Java <br /> <br /> <br /> <br /> Open Services Gateway initiative - navnet ikke lenger i bruk <br /> <br /> <br /> <br /> [klikk] <br /> <br /> <br /> <br /> 4pkt <br /> FUNKSJONALITET PAKKES I BUNDLES - SKAL SE HVA EN BUNDLE ER <br /> KAN STARTES, STOPPES, OPPGRADERES - HOT-DEPLOY <br /> BUNDLER KAN HA AVHENGIGHETER TIL ANDRE <br /> BUNDLER EKSPORTERER PAKKER TIL ANDRE BUNDLER <br /> <br /> <br /> <br /> Funksjonalitet pakkes i bundles - skal straks se hva en bundle er <br /> Bundle med JCR-innhold: i tillegg til kode - Sling-spesifikt
  • EN VANLIG JAVA-KLASSE <br /> PR DEF DEL AV EN PAKKE <br /> HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC <br /> CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE <br /> I EN ANNEN PAKKE HAR VI CLASS A <br /> DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1 <br /> MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC <br /> <br /> <br /> <br /> 1 pkt <br /> DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA <br /> <br /> <br /> <br /> <br /> 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 <br /> PR DEF DEL AV EN PAKKE <br /> HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC <br /> CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE <br /> I EN ANNEN PAKKE HAR VI CLASS A <br /> DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1 <br /> MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC <br /> <br /> <br /> <br /> 1 pkt <br /> DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA <br /> <br /> <br /> <br /> <br /> 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 <br /> PR DEF DEL AV EN PAKKE <br /> HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC <br /> CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE <br /> I EN ANNEN PAKKE HAR VI CLASS A <br /> DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1 <br /> MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC <br /> <br /> <br /> <br /> 1 pkt <br /> DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA <br /> <br /> <br /> <br /> <br /> 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 <br /> PR DEF DEL AV EN PAKKE <br /> HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC <br /> CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE <br /> I EN ANNEN PAKKE HAR VI CLASS A <br /> DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1 <br /> MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC <br /> <br /> <br /> <br /> 1 pkt <br /> DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA <br /> <br /> <br /> <br /> <br /> 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 <br /> PR DEF DEL AV EN PAKKE <br /> HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC <br /> CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE <br /> I EN ANNEN PAKKE HAR VI CLASS A <br /> DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1 <br /> MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC <br /> <br /> <br /> <br /> 1 pkt <br /> DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA <br /> <br /> <br /> <br /> <br /> 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 <br /> PR DEF DEL AV EN PAKKE <br /> HVOR DET FINNES EN ANNEN KLASSE SOM ER PUBLIC <br /> CLASSB HAR TILGANG TIL IMPLCLASS FORDI DE ER I SAMME PAKKE <br /> I EN ANNEN PAKKE HAR VI CLASS A <br /> DENNE HAR TILGANG TIL PUBLIC-KLASSENE I PACKAGE1 <br /> MEN IKKE TIL KLASSER SOM IKKE ER PUBLIC <br /> <br /> <br /> <br /> 1 pkt <br /> DETTE KAN VI FRA F&#xD8;R, DET ER VANLIG INNKAPSLING I JAVA <br /> <br /> <br /> <br /> <br /> 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 <br /> MEN VI PAKKER DISSE I EN BUNDLE <br /> EN BUNDLE *EKSPORTERER* PAKKER <br /> VI INNF&#xD8;RER EN NY BUNDLE <br /> MED EN KLASSE <br /> VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER <br /> BARE DE SOM EKSPLISITT ER EKSPORTERT <br /> DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN <br /> <br /> <br /> <br /> 3 pkt <br /> OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle <br /> VI F&#xC5;R ET LAG TIL MED INNKAPSLING <br /> KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE <br /> <br /> <br /> <br /> <br /> <br /> <br /> 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 <br /> Package1 er usynlig for andre bundler <br /> - m.a.o vi kan ha private klasser <br /> Package2 fungerer som et interface for hele bundle&#x2019;n <br /> <br /> <br /> <br /> 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 <br /> MEN VI PAKKER DISSE I EN BUNDLE <br /> EN BUNDLE *EKSPORTERER* PAKKER <br /> VI INNF&#xD8;RER EN NY BUNDLE <br /> MED EN KLASSE <br /> VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER <br /> BARE DE SOM EKSPLISITT ER EKSPORTERT <br /> DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN <br /> <br /> <br /> <br /> 3 pkt <br /> OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle <br /> VI F&#xC5;R ET LAG TIL MED INNKAPSLING <br /> KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE <br /> <br /> <br /> <br /> <br /> <br /> <br /> 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 <br /> Package1 er usynlig for andre bundler <br /> - m.a.o vi kan ha private klasser <br /> Package2 fungerer som et interface for hele bundle&#x2019;n <br /> <br /> <br /> <br /> 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 <br /> MEN VI PAKKER DISSE I EN BUNDLE <br /> EN BUNDLE *EKSPORTERER* PAKKER <br /> VI INNF&#xD8;RER EN NY BUNDLE <br /> MED EN KLASSE <br /> VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER <br /> BARE DE SOM EKSPLISITT ER EKSPORTERT <br /> DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN <br /> <br /> <br /> <br /> 3 pkt <br /> OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle <br /> VI F&#xC5;R ET LAG TIL MED INNKAPSLING <br /> KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE <br /> <br /> <br /> <br /> <br /> <br /> <br /> 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 <br /> Package1 er usynlig for andre bundler <br /> - m.a.o vi kan ha private klasser <br /> Package2 fungerer som et interface for hele bundle&#x2019;n <br /> <br /> <br /> <br /> 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 <br /> MEN VI PAKKER DISSE I EN BUNDLE <br /> EN BUNDLE *EKSPORTERER* PAKKER <br /> VI INNF&#xD8;RER EN NY BUNDLE <br /> MED EN KLASSE <br /> VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER <br /> BARE DE SOM EKSPLISITT ER EKSPORTERT <br /> DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN <br /> <br /> <br /> <br /> 3 pkt <br /> OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle <br /> VI F&#xC5;R ET LAG TIL MED INNKAPSLING <br /> KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE <br /> <br /> <br /> <br /> <br /> <br /> <br /> 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 <br /> Package1 er usynlig for andre bundler <br /> - m.a.o vi kan ha private klasser <br /> Package2 fungerer som et interface for hele bundle&#x2019;n <br /> <br /> <br /> <br /> 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 <br /> MEN VI PAKKER DISSE I EN BUNDLE <br /> EN BUNDLE *EKSPORTERER* PAKKER <br /> VI INNF&#xD8;RER EN NY BUNDLE <br /> MED EN KLASSE <br /> VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER <br /> BARE DE SOM EKSPLISITT ER EKSPORTERT <br /> DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN <br /> <br /> <br /> <br /> 3 pkt <br /> OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle <br /> VI F&#xC5;R ET LAG TIL MED INNKAPSLING <br /> KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE <br /> <br /> <br /> <br /> <br /> <br /> <br /> 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 <br /> Package1 er usynlig for andre bundler <br /> - m.a.o vi kan ha private klasser <br /> Package2 fungerer som et interface for hele bundle&#x2019;n <br /> <br /> <br /> <br /> 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 <br /> MEN VI PAKKER DISSE I EN BUNDLE <br /> EN BUNDLE *EKSPORTERER* PAKKER <br /> VI INNF&#xD8;RER EN NY BUNDLE <br /> MED EN KLASSE <br /> VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER <br /> BARE DE SOM EKSPLISITT ER EKSPORTERT <br /> DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN <br /> <br /> <br /> <br /> 3 pkt <br /> OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle <br /> VI F&#xC5;R ET LAG TIL MED INNKAPSLING <br /> KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE <br /> <br /> <br /> <br /> <br /> <br /> <br /> 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 <br /> Package1 er usynlig for andre bundler <br /> - m.a.o vi kan ha private klasser <br /> Package2 fungerer som et interface for hele bundle&#x2019;n <br /> <br /> <br /> <br /> 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 <br /> MEN VI PAKKER DISSE I EN BUNDLE <br /> EN BUNDLE *EKSPORTERER* PAKKER <br /> VI INNF&#xD8;RER EN NY BUNDLE <br /> MED EN KLASSE <br /> VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER <br /> BARE DE SOM EKSPLISITT ER EKSPORTERT <br /> DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN <br /> <br /> <br /> <br /> 3 pkt <br /> OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle <br /> VI F&#xC5;R ET LAG TIL MED INNKAPSLING <br /> KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE <br /> <br /> <br /> <br /> <br /> <br /> <br /> 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 <br /> Package1 er usynlig for andre bundler <br /> - m.a.o vi kan ha private klasser <br /> Package2 fungerer som et interface for hele bundle&#x2019;n <br /> <br /> <br /> <br /> 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 <br /> MEN VI PAKKER DISSE I EN BUNDLE <br /> EN BUNDLE *EKSPORTERER* PAKKER <br /> VI INNF&#xD8;RER EN NY BUNDLE <br /> MED EN KLASSE <br /> VI HAR IKKE TILGANG TIL PAKKER I ANDRE BUNDLER <br /> BARE DE SOM EKSPLISITT ER EKSPORTERT <br /> DVS AT PACKAGE1 ER USYNLIG FOR OMVERDENEN <br /> <br /> <br /> <br /> 3 pkt <br /> OG AT PACKAGE2 FUNGERER SOM ET INTERFACE FOR HELE MyBundle <br /> VI F&#xC5;R ET LAG TIL MED INNKAPSLING <br /> KAN HERJE MED PACKAGE1 UTEN &#xC5; BRYTE ANNEN KODE <br /> <br /> <br /> <br /> <br /> <br /> <br /> 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 <br /> Package1 er usynlig for andre bundler <br /> - m.a.o vi kan ha private klasser <br /> Package2 fungerer som et interface for hele bundle&#x2019;n <br /> <br /> <br /> <br /> Dette betyr at mye kode kan skjules, og man f&#xE5;r veldig rene grensesnitt mellom komponenter.
  • 3pkt <br /> HELE SLING-PLATTFORMEN ER EN SERIE BUNDLES <br /> LETT &#xC5; BYTTE UT: PGA RENE GRENSESNITT <br /> EGNE BUNDLES: DEPENDENCY INJECTION - KOMMER SENERE <br /> Lett &#xE5; bytte ut: Fordi det er s&#xE5; rene grensesnitt <br /> <br /> <br /> <br /> Lett &#xE5; utvide pga komponentmodellen og dependency injection (kommer senere)
  • 3pkt <br /> HELE SLING-PLATTFORMEN ER EN SERIE BUNDLES <br /> LETT &#xC5; BYTTE UT: PGA RENE GRENSESNITT <br /> EGNE BUNDLES: DEPENDENCY INJECTION - KOMMER SENERE <br /> Lett &#xE5; bytte ut: Fordi det er s&#xE5; rene grensesnitt <br /> <br /> <br /> <br /> Lett &#xE5; utvide pga komponentmodellen og dependency injection (kommer senere)
  • 3pkt <br /> HELE SLING-PLATTFORMEN ER EN SERIE BUNDLES <br /> LETT &#xC5; BYTTE UT: PGA RENE GRENSESNITT <br /> EGNE BUNDLES: DEPENDENCY INJECTION - KOMMER SENERE <br /> Lett &#xE5; bytte ut: Fordi det er s&#xE5; rene grensesnitt <br /> <br /> <br /> <br /> Lett &#xE5; utvide pga komponentmodellen og dependency injection (kommer senere)
  • 4pkt <br /> EGNE INNHOLDSTILBYDERE - VIRTUELT RESSURSTRE, SENERE <br /> EGNE SERVLETER <br /> INNHOLD <br /> JACKRABBIT-PLUGIN-MODULER, f.eks. TILGANGSKONTROLL <br /> <br /> <br /> <br /> <br /> <br /> <br /> Egne innholdstilbydere - ref. til virtuelt ressurstre, kommer senere <br /> Plugin-moduler til Jackrabbit: F.eks. tilgangskontroll
  • 4pkt <br /> EGNE INNHOLDSTILBYDERE - VIRTUELT RESSURSTRE, SENERE <br /> EGNE SERVLETER <br /> INNHOLD <br /> JACKRABBIT-PLUGIN-MODULER, f.eks. TILGANGSKONTROLL <br /> <br /> <br /> <br /> <br /> <br /> <br /> Egne innholdstilbydere - ref. til virtuelt ressurstre, kommer senere <br /> Plugin-moduler til Jackrabbit: F.eks. tilgangskontroll
  • 4pkt <br /> EGNE INNHOLDSTILBYDERE - VIRTUELT RESSURSTRE, SENERE <br /> EGNE SERVLETER <br /> INNHOLD <br /> JACKRABBIT-PLUGIN-MODULER, f.eks. TILGANGSKONTROLL <br /> <br /> <br /> <br /> <br /> <br /> <br /> Egne innholdstilbydere - ref. til virtuelt ressurstre, kommer senere <br /> Plugin-moduler til Jackrabbit: F.eks. tilgangskontroll
  • 4pkt <br /> EGNE INNHOLDSTILBYDERE - VIRTUELT RESSURSTRE, SENERE <br /> EGNE SERVLETER <br /> INNHOLD <br /> JACKRABBIT-PLUGIN-MODULER, f.eks. TILGANGSKONTROLL <br /> <br /> <br /> <br /> <br /> <br /> <br /> Egne innholdstilbydere - ref. til virtuelt ressurstre, kommer senere <br /> Plugin-moduler til Jackrabbit: F.eks. tilgangskontroll
  • REST
  • REST
  • REST
  • 5pkt <br /> MANGE VET <br /> REPRESENTIONAL STATE TRANSFER <br /> ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG <br /> INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING <br /> ENKLE HTTP-METODER <br /> (les opp hvert punkt) <br /> <br /> <br /> <br /> Sikkert mange som vet hva REST er og st&#xE5;r for <br /> All state holdes av klienten: <br /> Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen <br /> Det eneste som er STATE, er egentlig URLen <br /> <br /> <br /> <br /> Unng&#xE5;r server-side sessions: Ingen cookie med sessionId <br /> Lettere &#xE5; implementere clustering
  • 5pkt <br /> MANGE VET <br /> REPRESENTIONAL STATE TRANSFER <br /> ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG <br /> INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING <br /> ENKLE HTTP-METODER <br /> (les opp hvert punkt) <br /> <br /> <br /> <br /> Sikkert mange som vet hva REST er og st&#xE5;r for <br /> All state holdes av klienten: <br /> Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen <br /> Det eneste som er STATE, er egentlig URLen <br /> <br /> <br /> <br /> Unng&#xE5;r server-side sessions: Ingen cookie med sessionId <br /> Lettere &#xE5; implementere clustering
  • 5pkt <br /> MANGE VET <br /> REPRESENTIONAL STATE TRANSFER <br /> ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG <br /> INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING <br /> ENKLE HTTP-METODER <br /> (les opp hvert punkt) <br /> <br /> <br /> <br /> Sikkert mange som vet hva REST er og st&#xE5;r for <br /> All state holdes av klienten: <br /> Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen <br /> Det eneste som er STATE, er egentlig URLen <br /> <br /> <br /> <br /> Unng&#xE5;r server-side sessions: Ingen cookie med sessionId <br /> Lettere &#xE5; implementere clustering
  • 5pkt <br /> MANGE VET <br /> REPRESENTIONAL STATE TRANSFER <br /> ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG <br /> INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING <br /> ENKLE HTTP-METODER <br /> (les opp hvert punkt) <br /> <br /> <br /> <br /> Sikkert mange som vet hva REST er og st&#xE5;r for <br /> All state holdes av klienten: <br /> Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen <br /> Det eneste som er STATE, er egentlig URLen <br /> <br /> <br /> <br /> Unng&#xE5;r server-side sessions: Ingen cookie med sessionId <br /> Lettere &#xE5; implementere clustering
  • 5pkt <br /> MANGE VET <br /> REPRESENTIONAL STATE TRANSFER <br /> ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG <br /> INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING <br /> ENKLE HTTP-METODER <br /> (les opp hvert punkt) <br /> <br /> <br /> <br /> Sikkert mange som vet hva REST er og st&#xE5;r for <br /> All state holdes av klienten: <br /> Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen <br /> Det eneste som er STATE, er egentlig URLen <br /> <br /> <br /> <br /> Unng&#xE5;r server-side sessions: Ingen cookie med sessionId <br /> Lettere &#xE5; implementere clustering
  • 5pkt <br /> MANGE VET <br /> REPRESENTIONAL STATE TRANSFER <br /> ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG <br /> INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING <br /> ENKLE HTTP-METODER <br /> (les opp hvert punkt) <br /> <br /> <br /> <br /> Sikkert mange som vet hva REST er og st&#xE5;r for <br /> All state holdes av klienten: <br /> Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen <br /> Det eneste som er STATE, er egentlig URLen <br /> <br /> <br /> <br /> Unng&#xE5;r server-side sessions: Ingen cookie med sessionId <br /> Lettere &#xE5; implementere clustering
  • 5pkt <br /> MANGE VET <br /> REPRESENTIONAL STATE TRANSFER <br /> ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG <br /> INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING <br /> ENKLE HTTP-METODER <br /> (les opp hvert punkt) <br /> <br /> <br /> <br /> Sikkert mange som vet hva REST er og st&#xE5;r for <br /> All state holdes av klienten: <br /> Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen <br /> Det eneste som er STATE, er egentlig URLen <br /> <br /> <br /> <br /> Unng&#xE5;r server-side sessions: Ingen cookie med sessionId <br /> Lettere &#xE5; implementere clustering
  • 5pkt <br /> MANGE VET <br /> REPRESENTIONAL STATE TRANSFER <br /> ALL STATE HOLDER AV KLIENTEN - SAMME GET-REQUEST GIR SAMME RESULTAT HVER GANG <br /> INGEN SERVER-SIDE SESSIONS - INGEN SESSION-ID-COOKIE - ENKEL CLUSTERING <br /> ENKLE HTTP-METODER <br /> (les opp hvert punkt) <br /> <br /> <br /> <br /> Sikkert mange som vet hva REST er og st&#xE5;r for <br /> All state holdes av klienten: <br /> Den samme GET-requesten skal gi samme resultat hver gang - uavhengig av hva klienten har foretatt seg tidligere i sesjonen <br /> Det eneste som er STATE, er egentlig URLen <br /> <br /> <br /> <br /> Unng&#xE5;r server-side sessions: Ingen cookie med sessionId <br /> Lettere &#xE5; implementere clustering
  • 4pkt ++ <br /> URL PEKER TIL *RESSURS* IKKE METODE <br /> EKSEMPEL: URL besudlet med METODENAVN <br /> VIL HA FORSKJELLIGE METODENAVN TIL F.EKS. SLETTE ARTIKKEL ELLER OPPDATERE <br /> STYGT ID-FELT <br /> <br /> <br /> <br /> 6pkt <br /> ANDRE EKSEMPEL: URL er ADRESSE TIL RESSURS SOM ETTERSP&#xD8;RRES <br /> METODEN ER HTTP GET - PUBLICSHOW er IMPLISITT <br /> OPPDATERE RESSURS: HTTP PUT til SAMME ADRESSE <br /> INGEN QUERY-STRING - INFORMASJON i SELVE URLen <br /> URLen er MENNESKELIG LESBAR - INNBYR TIL TOLKNING og NAVIGASJON <br /> KAN FINNE ARTIKKELENS KATEGORI UTFRA URLen <br /> <br /> <br /> <br /> I det f&#xF8;rste eksempelet er URLen besudlet med metodenavn (&#x201C;Article.publicShow&#x201D;) <br /> Man vil ha forskjellige metodenavn etter hva som skal gj&#xF8;res, f.eks. slette en artikkel, eller oppdatere den. <br /> Stygt ID-felt <br /> <br /> <br /> <br /> I det andre eksempelet er URLen en adresse til ressursen som ettersp&#xF8;rres <br /> Metoden er HTTP GET <br /> Hvis ressursen skal oppdateres, sender man en HTTP PUT til samme adresse <br /> <br /> <br /> <br /> Man ser at query-stringen er borte, informasjonen flyttet inn i URLen <br /> Vi har plutselig f&#xE5;tt en menneskelig lesbar URL, som innbyr til tolking og navigasjon
  • 4pkt ++ <br /> URL PEKER TIL *RESSURS* IKKE METODE <br /> EKSEMPEL: URL besudlet med METODENAVN <br /> VIL HA FORSKJELLIGE METODENAVN TIL F.EKS. SLETTE ARTIKKEL ELLER OPPDATERE <br /> STYGT ID-FELT <br /> <br /> <br /> <br /> 6pkt <br /> ANDRE EKSEMPEL: URL er ADRESSE TIL RESSURS SOM ETTERSP&#xD8;RRES <br /> METODEN ER HTTP GET - PUBLICSHOW er IMPLISITT <br /> OPPDATERE RESSURS: HTTP PUT til SAMME ADRESSE <br /> INGEN QUERY-STRING - INFORMASJON i SELVE URLen <br /> URLen er MENNESKELIG LESBAR - INNBYR TIL TOLKNING og NAVIGASJON <br /> KAN FINNE ARTIKKELENS KATEGORI UTFRA URLen <br /> <br /> <br /> <br /> I det f&#xF8;rste eksempelet er URLen besudlet med metodenavn (&#x201C;Article.publicShow&#x201D;) <br /> Man vil ha forskjellige metodenavn etter hva som skal gj&#xF8;res, f.eks. slette en artikkel, eller oppdatere den. <br /> Stygt ID-felt <br /> <br /> <br /> <br /> I det andre eksempelet er URLen en adresse til ressursen som ettersp&#xF8;rres <br /> Metoden er HTTP GET <br /> Hvis ressursen skal oppdateres, sender man en HTTP PUT til samme adresse <br /> <br /> <br /> <br /> Man ser at query-stringen er borte, informasjonen flyttet inn i URLen <br /> Vi har plutselig f&#xE5;tt en menneskelig lesbar URL, som innbyr til tolking og navigasjon
  • 4pkt ++ <br /> URL PEKER TIL *RESSURS* IKKE METODE <br /> EKSEMPEL: URL besudlet med METODENAVN <br /> VIL HA FORSKJELLIGE METODENAVN TIL F.EKS. SLETTE ARTIKKEL ELLER OPPDATERE <br /> STYGT ID-FELT <br /> <br /> <br /> <br /> 6pkt <br /> ANDRE EKSEMPEL: URL er ADRESSE TIL RESSURS SOM ETTERSP&#xD8;RRES <br /> METODEN ER HTTP GET - PUBLICSHOW er IMPLISITT <br /> OPPDATERE RESSURS: HTTP PUT til SAMME ADRESSE <br /> INGEN QUERY-STRING - INFORMASJON i SELVE URLen <br /> URLen er MENNESKELIG LESBAR - INNBYR TIL TOLKNING og NAVIGASJON <br /> KAN FINNE ARTIKKELENS KATEGORI UTFRA URLen <br /> <br /> <br /> <br /> I det f&#xF8;rste eksempelet er URLen besudlet med metodenavn (&#x201C;Article.publicShow&#x201D;) <br /> Man vil ha forskjellige metodenavn etter hva som skal gj&#xF8;res, f.eks. slette en artikkel, eller oppdatere den. <br /> Stygt ID-felt <br /> <br /> <br /> <br /> I det andre eksempelet er URLen en adresse til ressursen som ettersp&#xF8;rres <br /> Metoden er HTTP GET <br /> Hvis ressursen skal oppdateres, sender man en HTTP PUT til samme adresse <br /> <br /> <br /> <br /> Man ser at query-stringen er borte, informasjonen flyttet inn i URLen <br /> Vi har plutselig f&#xE5;tt en menneskelig lesbar URL, som innbyr til tolking og navigasjon
  • 4pkt ++ <br /> URL PEKER TIL *RESSURS* IKKE METODE <br /> EKSEMPEL: URL besudlet med METODENAVN <br /> VIL HA FORSKJELLIGE METODENAVN TIL F.EKS. SLETTE ARTIKKEL ELLER OPPDATERE <br /> STYGT ID-FELT <br /> <br /> <br /> <br /> 6pkt <br /> ANDRE EKSEMPEL: URL er ADRESSE TIL RESSURS SOM ETTERSP&#xD8;RRES <br /> METODEN ER HTTP GET - PUBLICSHOW er IMPLISITT <br /> OPPDATERE RESSURS: HTTP PUT til SAMME ADRESSE <br /> INGEN QUERY-STRING - INFORMASJON i SELVE URLen <br /> URLen er MENNESKELIG LESBAR - INNBYR TIL TOLKNING og NAVIGASJON <br /> KAN FINNE ARTIKKELENS KATEGORI UTFRA URLen <br /> <br /> <br /> <br /> I det f&#xF8;rste eksempelet er URLen besudlet med metodenavn (&#x201C;Article.publicShow&#x201D;) <br /> Man vil ha forskjellige metodenavn etter hva som skal gj&#xF8;res, f.eks. slette en artikkel, eller oppdatere den. <br /> Stygt ID-felt <br /> <br /> <br /> <br /> I det andre eksempelet er URLen en adresse til ressursen som ettersp&#xF8;rres <br /> Metoden er HTTP GET <br /> Hvis ressursen skal oppdateres, sender man en HTTP PUT til samme adresse <br /> <br /> <br /> <br /> Man ser at query-stringen er borte, informasjonen flyttet inn i URLen <br /> Vi har plutselig f&#xE5;tt en menneskelig lesbar URL, som innbyr til tolking og navigasjon
  • 4pkt ++ <br /> URL PEKER TIL *RESSURS* IKKE METODE <br /> EKSEMPEL: URL besudlet med METODENAVN <br /> VIL HA FORSKJELLIGE METODENAVN TIL F.EKS. SLETTE ARTIKKEL ELLER OPPDATERE <br /> STYGT ID-FELT <br /> <br /> <br /> <br /> 6pkt <br /> ANDRE EKSEMPEL: URL er ADRESSE TIL RESSURS SOM ETTERSP&#xD8;RRES <br /> METODEN ER HTTP GET - PUBLICSHOW er IMPLISITT <br /> OPPDATERE RESSURS: HTTP PUT til SAMME ADRESSE <br /> INGEN QUERY-STRING - INFORMASJON i SELVE URLen <br /> URLen er MENNESKELIG LESBAR - INNBYR TIL TOLKNING og NAVIGASJON <br /> KAN FINNE ARTIKKELENS KATEGORI UTFRA URLen <br /> <br /> <br /> <br /> I det f&#xF8;rste eksempelet er URLen besudlet med metodenavn (&#x201C;Article.publicShow&#x201D;) <br /> Man vil ha forskjellige metodenavn etter hva som skal gj&#xF8;res, f.eks. slette en artikkel, eller oppdatere den. <br /> Stygt ID-felt <br /> <br /> <br /> <br /> I det andre eksempelet er URLen en adresse til ressursen som ettersp&#xF8;rres <br /> Metoden er HTTP GET <br /> Hvis ressursen skal oppdateres, sender man en HTTP PUT til samme adresse <br /> <br /> <br /> <br /> Man ser at query-stringen er borte, informasjonen flyttet inn i URLen <br /> Vi har plutselig f&#xE5;tt en menneskelig lesbar URL, som innbyr til tolking og navigasjon
  • 2pkt ++ <br /> P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER <br /> BEVIS <br /> <br /> <br /> <br /> 4 pkt ++ <br /> LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP <br /> HVER OPERASJON = EGEN SERVLET <br /> GET liste med ordre til en webshop <br /> POST ny ordre, SERVEREN SVARER <br /> <br /> <br /> <br /> 8pkt <br /> REST-BASERT SYSTEM <br /> GET til en PATH hvor ORDRE ER LAGRET <br /> POST til SAMME URL (men med &#x201C;/&#x201D; til slutt) <br /> SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500 <br /> LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET <br /> HENTE DETALJER med GET <br /> DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE <br /> SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL <br /> <br /> <br /> <br /> N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til <br /> 201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error) <br /> Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
  • 2pkt ++ <br /> P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER <br /> BEVIS <br /> <br /> <br /> <br /> 4 pkt ++ <br /> LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP <br /> HVER OPERASJON = EGEN SERVLET <br /> GET liste med ordre til en webshop <br /> POST ny ordre, SERVEREN SVARER <br /> <br /> <br /> <br /> 8pkt <br /> REST-BASERT SYSTEM <br /> GET til en PATH hvor ORDRE ER LAGRET <br /> POST til SAMME URL (men med &#x201C;/&#x201D; til slutt) <br /> SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500 <br /> LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET <br /> HENTE DETALJER med GET <br /> DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE <br /> SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL <br /> <br /> <br /> <br /> N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til <br /> 201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error) <br /> Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
  • 2pkt ++ <br /> P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER <br /> BEVIS <br /> <br /> <br /> <br /> 4 pkt ++ <br /> LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP <br /> HVER OPERASJON = EGEN SERVLET <br /> GET liste med ordre til en webshop <br /> POST ny ordre, SERVEREN SVARER <br /> <br /> <br /> <br /> 8pkt <br /> REST-BASERT SYSTEM <br /> GET til en PATH hvor ORDRE ER LAGRET <br /> POST til SAMME URL (men med &#x201C;/&#x201D; til slutt) <br /> SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500 <br /> LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET <br /> HENTE DETALJER med GET <br /> DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE <br /> SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL <br /> <br /> <br /> <br /> N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til <br /> 201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error) <br /> Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
  • 2pkt ++ <br /> P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER <br /> BEVIS <br /> <br /> <br /> <br /> 4 pkt ++ <br /> LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP <br /> HVER OPERASJON = EGEN SERVLET <br /> GET liste med ordre til en webshop <br /> POST ny ordre, SERVEREN SVARER <br /> <br /> <br /> <br /> 8pkt <br /> REST-BASERT SYSTEM <br /> GET til en PATH hvor ORDRE ER LAGRET <br /> POST til SAMME URL (men med &#x201C;/&#x201D; til slutt) <br /> SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500 <br /> LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET <br /> HENTE DETALJER med GET <br /> DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE <br /> SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL <br /> <br /> <br /> <br /> N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til <br /> 201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error) <br /> Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
  • 2pkt ++ <br /> P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER <br /> BEVIS <br /> <br /> <br /> <br /> 4 pkt ++ <br /> LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP <br /> HVER OPERASJON = EGEN SERVLET <br /> GET liste med ordre til en webshop <br /> POST ny ordre, SERVEREN SVARER <br /> <br /> <br /> <br /> 8pkt <br /> REST-BASERT SYSTEM <br /> GET til en PATH hvor ORDRE ER LAGRET <br /> POST til SAMME URL (men med &#x201C;/&#x201D; til slutt) <br /> SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500 <br /> LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET <br /> HENTE DETALJER med GET <br /> DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE <br /> SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL <br /> <br /> <br /> <br /> N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til <br /> 201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error) <br /> Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
  • 2pkt ++ <br /> P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER <br /> BEVIS <br /> <br /> <br /> <br /> 4 pkt ++ <br /> LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP <br /> HVER OPERASJON = EGEN SERVLET <br /> GET liste med ordre til en webshop <br /> POST ny ordre, SERVEREN SVARER <br /> <br /> <br /> <br /> 8pkt <br /> REST-BASERT SYSTEM <br /> GET til en PATH hvor ORDRE ER LAGRET <br /> POST til SAMME URL (men med &#x201C;/&#x201D; til slutt) <br /> SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500 <br /> LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET <br /> HENTE DETALJER med GET <br /> DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE <br /> SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL <br /> <br /> <br /> <br /> N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til <br /> 201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error) <br /> Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
  • 2pkt ++ <br /> P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER <br /> BEVIS <br /> <br /> <br /> <br /> 4 pkt ++ <br /> LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP <br /> HVER OPERASJON = EGEN SERVLET <br /> GET liste med ordre til en webshop <br /> POST ny ordre, SERVEREN SVARER <br /> <br /> <br /> <br /> 8pkt <br /> REST-BASERT SYSTEM <br /> GET til en PATH hvor ORDRE ER LAGRET <br /> POST til SAMME URL (men med &#x201C;/&#x201D; til slutt) <br /> SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500 <br /> LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET <br /> HENTE DETALJER med GET <br /> DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE <br /> SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL <br /> <br /> <br /> <br /> N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til <br /> 201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error) <br /> Sender ogs&#xE5; en Location-header, som ved redirect, for &#xE5; fortelle hvor ordren finnes
  • 2pkt ++ <br /> P&#xC5;STAND: ALT KAN UTTRYKKES MED HTTP-METODER <br /> BEVIS <br /> <br /> <br /> <br /> 4 pkt ++ <br /> LISTE MED OPERASJONER i et IKKE-REST-BASERT WEBSHOP <br /> HVER OPERASJON = EGEN SERVLET <br /> GET liste med ordre til en webshop <br /> POST ny ordre, SERVEREN SVARER <br /> <br /> <br /> <br /> 8pkt <br /> REST-BASERT SYSTEM <br /> GET til en PATH hvor ORDRE ER LAGRET <br /> POST til SAMME URL (men med &#x201C;/&#x201D; til slutt) <br /> SERVEREN SVARER 201 CREATED - OFFISIELL HTTP-RESPONS-KODE - SML 500 <br /> LOCATION for &#xE5; vise HVOR ORDREN ER OPPRETTET <br /> HENTE DETALJER med GET <br /> DELETE for &#xE5; SLETTE, PUT for &#xE5; OPPDATERE <br /> SAMME URL HELE VEIEN, BRUKER HTTP-METODER FOR &#xC5; VISE HVA VI VIL <br /> <br /> <br /> <br /> N&#xF8;kkelen er &#xE5; ha et fornuftig sted &#xE5; poste det til <br /> 201 Created - offisiell HTTP-response-kode (s&#xE5;nn som den mer kjente 404, eller 500 Internal Server Error) <br /> 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 <br /> G&#xC5;TT OPP FOR DERE AT SLING ER ET HTTP-REST-API til JCR <br /> ET HTTP-API i TILLEGG til JAVA-APIET <br /> MEN DET ER IKKE ALT <br /> <br /> <br /> <br /> <br /> <br /> <br /> Det har kanskje g&#xE5;tt opp for dere at Sling gir oss et HTTP-REST-API til JCR <br /> <br /> <br /> <br /> ... s&#xE5; vi f&#xE5;r et HTTP-API, i tillegg til JCR-java-APIet. <br /> <br /> <br /> <br /> ... men det er ikke alt
  • 4pkt <br /> IKKE BEGRENSA TIL JCR-REPOSITORIET <br /> KAN PODE INN EGEN SERVLET <br /> FILMAPPE <br /> DATABASE-SYSTEM <br /> <br /> <br /> <br /> Vi er ikke begrensa til JCR-repositoriet
  • 4pkt <br /> IKKE BEGRENSA TIL JCR-REPOSITORIET <br /> KAN PODE INN EGEN SERVLET <br /> FILMAPPE <br /> DATABASE-SYSTEM <br /> <br /> <br /> <br /> Vi er ikke begrensa til JCR-repositoriet
  • 4pkt <br /> IKKE BEGRENSA TIL JCR-REPOSITORIET <br /> KAN PODE INN EGEN SERVLET <br /> FILMAPPE <br /> DATABASE-SYSTEM <br /> <br /> <br /> <br /> Vi er ikke begrensa til JCR-repositoriet
  • 4pkt <br /> IKKE BEGRENSA TIL JCR-REPOSITORIET <br /> KAN PODE INN EGEN SERVLET <br /> FILMAPPE <br /> DATABASE-SYSTEM <br /> <br /> <br /> <br /> Vi er ikke begrensa til JCR-repositoriet
  • 3pkt <br /> KAN ALTS&#xC5; HA DETTE <br /> ET TRE HVOR JCR-noder, SERVLETer, FILMAPPER, og ANNET lever som GODE NABOER <br /> KAN PLUGGE INN SIN EGEN LEGACY DB-APP ved &#xE5; IMPLEMENTERE ET INTERFACE <br /> <br /> <br /> <br /> <br /> <br /> <br /> Man kan alts&#xE5; ha dette - et tre hvor JCR-noder, servleter, filmapper og annet lever som gode naboer <br /> <br /> <br /> <br /> Ved &#xE5; implementere Resource-interfacet kan man ogs&#xE5; plugge inn sin egen legacy database-applikasjon.
  • 1pkt <br /> VI BRUKER BEGREPET &#x201C;RESSURS&#x201D; - DEFINISJON <br /> <br /> <br /> <br /> Hva er en &#x201C;ressurs&#x201D;?
  • 4pkt <br /> EN RESSURS HAR NOEN GITTE EGENSKAPER <br /> PATH <br /> - for JCR-noder: pathen til noden <br /> TYPE <br /> - for JCR-noder: en bestemt property <br /> METADATA
  • 4pkt <br /> EN RESSURS HAR NOEN GITTE EGENSKAPER <br /> PATH <br /> - for JCR-noder: pathen til noden <br /> TYPE <br /> - for JCR-noder: en bestemt property <br /> METADATA
  • 4pkt <br /> EN RESSURS HAR NOEN GITTE EGENSKAPER <br /> PATH <br /> - for JCR-noder: pathen til noden <br /> TYPE <br /> - for JCR-noder: en bestemt property <br /> METADATA
  • 5pkt <br /> ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE <br /> URLen er PATH til NODEN <br /> REPOSITORIET fra BLOGG-eksempelet <br /> DENNE REQUESTEN <br /> RESOLVES TIL DENNE NODEN <br /> <br /> <br /> <br /> Det er enkelt &#xE5; resolve en URL til en JCR-node <br /> URLen er i virkeligheten en path til noden <br /> <br /> <br /> <br /> Vi tar fram mini-repositoriet fra blogg-eksempelet <br /> S&#xE5; f&#xE5;r vi inn denne requesten <br /> ... som resolves til denne noden
  • 5pkt <br /> ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE <br /> URLen er PATH til NODEN <br /> REPOSITORIET fra BLOGG-eksempelet <br /> DENNE REQUESTEN <br /> RESOLVES TIL DENNE NODEN <br /> <br /> <br /> <br /> Det er enkelt &#xE5; resolve en URL til en JCR-node <br /> URLen er i virkeligheten en path til noden <br /> <br /> <br /> <br /> Vi tar fram mini-repositoriet fra blogg-eksempelet <br /> S&#xE5; f&#xE5;r vi inn denne requesten <br /> ... som resolves til denne noden
  • 5pkt <br /> ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE <br /> URLen er PATH til NODEN <br /> REPOSITORIET fra BLOGG-eksempelet <br /> DENNE REQUESTEN <br /> RESOLVES TIL DENNE NODEN <br /> <br /> <br /> <br /> Det er enkelt &#xE5; resolve en URL til en JCR-node <br /> URLen er i virkeligheten en path til noden <br /> <br /> <br /> <br /> Vi tar fram mini-repositoriet fra blogg-eksempelet <br /> S&#xE5; f&#xE5;r vi inn denne requesten <br /> ... som resolves til denne noden
  • 5pkt <br /> ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE <br /> URLen er PATH til NODEN <br /> REPOSITORIET fra BLOGG-eksempelet <br /> DENNE REQUESTEN <br /> RESOLVES TIL DENNE NODEN <br /> <br /> <br /> <br /> Det er enkelt &#xE5; resolve en URL til en JCR-node <br /> URLen er i virkeligheten en path til noden <br /> <br /> <br /> <br /> Vi tar fram mini-repositoriet fra blogg-eksempelet <br /> S&#xE5; f&#xE5;r vi inn denne requesten <br /> ... som resolves til denne noden
  • 5pkt <br /> ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE <br /> URLen er PATH til NODEN <br /> REPOSITORIET fra BLOGG-eksempelet <br /> DENNE REQUESTEN <br /> RESOLVES TIL DENNE NODEN <br /> <br /> <br /> <br /> Det er enkelt &#xE5; resolve en URL til en JCR-node <br /> URLen er i virkeligheten en path til noden <br /> <br /> <br /> <br /> Vi tar fram mini-repositoriet fra blogg-eksempelet <br /> S&#xE5; f&#xE5;r vi inn denne requesten <br /> ... som resolves til denne noden
  • 5pkt <br /> ENKELT &#xC5; RESOLVE EN URL til en JCR-NODE <br /> URLen er PATH til NODEN <br /> REPOSITORIET fra BLOGG-eksempelet <br /> DENNE REQUESTEN <br /> RESOLVES TIL DENNE NODEN <br /> <br /> <br /> <br /> Det er enkelt &#xE5; resolve en URL til en JCR-node <br /> URLen er i virkeligheten en path til noden <br /> <br /> <br /> <br /> Vi tar fram mini-repositoriet fra blogg-eksempelet <br /> S&#xE5; f&#xE5;r vi inn denne requesten <br /> ... som resolves til denne noden
  • 2pkt ++ <br /> DET VAR RESSURSER <br /> MEN RESSURSER IKKE TIL NYTTE HVIS DEN IKKE KAN VISES FRAM - f.eks. p&#xE5; en WEBSIDE <br /> <br /> <br /> <br /> 3pkt <br /> KAN RENDRE EN RESSURS MED EN SERVLET eller SCRIPT <br /> RESSURSTYPEN BESTEMMER HVILKEN SERVLET/SCRIPT SOM VELGES <br /> SERVLETER/SCRIPTS finnes i SAMME VIRTUELLE RESSURSTRE som INNHOLDET <br /> <br /> <br /> <br /> <br /> <br /> <br /> Det var ressurser. Men en ressurs er ikke s&#xE6;rlig til nytte hvis den ikke kan vises - vises p&#xE5; en webside.
  • 2pkt ++ <br /> DET VAR RESSURSER <br /> MEN RESSURSER IKKE TIL NYTTE HVIS DEN IKKE KAN VISES FRAM - f.eks. p&#xE5; en WEBSIDE <br /> <br /> <br /> <br /> 3pkt <br /> KAN RENDRE EN RESSURS MED EN SERVLET eller SCRIPT <br /> RESSURSTYPEN BESTEMMER HVILKEN SERVLET/SCRIPT SOM VELGES <br /> SERVLETER/SCRIPTS finnes i SAMME VIRTUELLE RESSURSTRE som INNHOLDET <br /> <br /> <br /> <br /> <br /> <br /> <br /> Det var ressurser. Men en ressurs er ikke s&#xE6;rlig til nytte hvis den ikke kan vises - vises p&#xE5; en webside.
  • 2pkt ++ <br /> DET VAR RESSURSER <br /> MEN RESSURSER IKKE TIL NYTTE HVIS DEN IKKE KAN VISES FRAM - f.eks. p&#xE5; en WEBSIDE <br /> <br /> <br /> <br /> 3pkt <br /> KAN RENDRE EN RESSURS MED EN SERVLET eller SCRIPT <br /> RESSURSTYPEN BESTEMMER HVILKEN SERVLET/SCRIPT SOM VELGES <br /> SERVLETER/SCRIPTS finnes i SAMME VIRTUELLE RESSURSTRE som INNHOLDET <br /> <br /> <br /> <br /> <br /> <br /> <br /> 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 <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • EN SLING-URL ser S&#xC5;NN UT <br /> PATH til RESSURSEN <br /> LEGG MERKE TIL PROPERTYEN NEDERST <br /> EXTENSION <br /> MELLOM PATH og EXTENSION: SELECTOR (hvis vi vil)
  • /apps er standard-plasssering
  • /apps er standard-plasssering
  • /apps er standard-plasssering
  • /apps er standard-plasssering
  • /apps er standard-plasssering
  • /apps er standard-plasssering
  • Ressursen prosesseres f&#xF8;rst - gj&#xF8;r evt. tilgangsbegrensninger tidlig <br /> <br /> <br /> <br /> http://www.slideshare.net/cziegeler/apache-sling-jcr-osgi-scripting-and-rest slide 27
  • Ressursen prosesseres f&#xF8;rst - gj&#xF8;r evt. tilgangsbegrensninger tidlig <br /> <br /> <br /> <br /> http://www.slideshare.net/cziegeler/apache-sling-jcr-osgi-scripting-and-rest slide 27
  • Ressursen prosesseres f&#xF8;rst - gj&#xF8;r evt. tilgangsbegrensninger tidlig <br /> <br /> <br /> <br /> http://www.slideshare.net/cziegeler/apache-sling-jcr-osgi-scripting-and-rest slide 27
  • Ressursen prosesseres f&#xF8;rst - gj&#xF8;r evt. tilgangsbegrensninger tidlig <br /> <br /> <br /> <br /> http://www.slideshare.net/cziegeler/apache-sling-jcr-osgi-scripting-and-rest slide 27
  • Ressursen prosesseres f&#xF8;rst - gj&#xF8;r evt. tilgangsbegrensninger tidlig <br /> <br /> <br /> <br /> http://www.slideshare.net/cziegeler/apache-sling-jcr-osgi-scripting-and-rest slide 27
  • Ressursen prosesseres f&#xF8;rst - gj&#xF8;r evt. tilgangsbegrensninger tidlig <br /> <br /> <br /> <br /> http://www.slideshare.net/cziegeler/apache-sling-jcr-osgi-scripting-and-rest slide 27
  • Ressursen prosesseres f&#xF8;rst - gj&#xF8;r evt. tilgangsbegrensninger tidlig <br /> <br /> <br /> <br /> http://www.slideshare.net/cziegeler/apache-sling-jcr-osgi-scripting-and-rest slide 27
  • 4 pkt <br /> EN PLATTFORM ER VEL OG BRA <br /> VIL GJERNE BYGGE EGEN FUNKSJONALITET OPP&#xC5; <br /> OSGi-BUNDLER ER JAR-filer med NOGO ATT&#xC5;T <br /> S&#xC5;: HOT-DEPLOY til en SLING-INSTANS <br /> <br /> <br /> <br /> INN: En plattform er vel og bra, men det er jo bare nettopp en plattform. <br /> Du vil gjerne bygge din egen funksjonalitet opp&#xE5;. <br /> <br /> <br /> <br /> OSGi-bundler er .jar-filer med noggo att&#xE5;t
  • 4 pkt <br /> EN PLATTFORM ER VEL OG BRA <br /> VIL GJERNE BYGGE EGEN FUNKSJONALITET OPP&#xC5; <br /> OSGi-BUNDLER ER JAR-filer med NOGO ATT&#xC5;T <br /> S&#xC5;: HOT-DEPLOY til en SLING-INSTANS <br /> <br /> <br /> <br /> INN: En plattform er vel og bra, men det er jo bare nettopp en plattform. <br /> Du vil gjerne bygge din egen funksjonalitet opp&#xE5;. <br /> <br /> <br /> <br /> OSGi-bundler er .jar-filer med noggo att&#xE5;t
  • 3pkt++ <br /> HVORDAN DEPLOYE EGEN SERVLET <br /> DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT <br /> SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 5pkt++ <br /> &#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil <br /> KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN <br /> JAVADOC-NESERYNK <br /> VI ANGIR EN PATH <br /> LEGG MERKE TIL pathS <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 3pkt++ <br /> VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet <br /> F&#xC5;R WRAPPET request-objekt <br /> TILGANG TIL Resource <br /> <br /> <br /> <br /> 2pkt <br /> SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart <br /> ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet? <br /> Dette er en helt vanlig servlet som ikke gj&#xF8;r stort. <br /> For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv. <br /> <br /> <br /> <br /> Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> 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. <br /> 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. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet. <br /> Da f&#xE5;r man et request-objekt med tilgang til ressursen. <br /> <br /> <br /> <br /> Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
  • 3pkt++ <br /> HVORDAN DEPLOYE EGEN SERVLET <br /> DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT <br /> SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 5pkt++ <br /> &#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil <br /> KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN <br /> JAVADOC-NESERYNK <br /> VI ANGIR EN PATH <br /> LEGG MERKE TIL pathS <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 3pkt++ <br /> VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet <br /> F&#xC5;R WRAPPET request-objekt <br /> TILGANG TIL Resource <br /> <br /> <br /> <br /> 2pkt <br /> SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart <br /> ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet? <br /> Dette er en helt vanlig servlet som ikke gj&#xF8;r stort. <br /> For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv. <br /> <br /> <br /> <br /> Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> 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. <br /> 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. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet. <br /> Da f&#xE5;r man et request-objekt med tilgang til ressursen. <br /> <br /> <br /> <br /> Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
  • 3pkt++ <br /> HVORDAN DEPLOYE EGEN SERVLET <br /> DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT <br /> SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 5pkt++ <br /> &#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil <br /> KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN <br /> JAVADOC-NESERYNK <br /> VI ANGIR EN PATH <br /> LEGG MERKE TIL pathS <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 3pkt++ <br /> VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet <br /> F&#xC5;R WRAPPET request-objekt <br /> TILGANG TIL Resource <br /> <br /> <br /> <br /> 2pkt <br /> SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart <br /> ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet? <br /> Dette er en helt vanlig servlet som ikke gj&#xF8;r stort. <br /> For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv. <br /> <br /> <br /> <br /> Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> 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. <br /> 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. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet. <br /> Da f&#xE5;r man et request-objekt med tilgang til ressursen. <br /> <br /> <br /> <br /> Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
  • 3pkt++ <br /> HVORDAN DEPLOYE EGEN SERVLET <br /> DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT <br /> SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 5pkt++ <br /> &#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil <br /> KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN <br /> JAVADOC-NESERYNK <br /> VI ANGIR EN PATH <br /> LEGG MERKE TIL pathS <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 3pkt++ <br /> VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet <br /> F&#xC5;R WRAPPET request-objekt <br /> TILGANG TIL Resource <br /> <br /> <br /> <br /> 2pkt <br /> SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart <br /> ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet? <br /> Dette er en helt vanlig servlet som ikke gj&#xF8;r stort. <br /> For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv. <br /> <br /> <br /> <br /> Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> 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. <br /> 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. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet. <br /> Da f&#xE5;r man et request-objekt med tilgang til ressursen. <br /> <br /> <br /> <br /> Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
  • 3pkt++ <br /> HVORDAN DEPLOYE EGEN SERVLET <br /> DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT <br /> SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 5pkt++ <br /> &#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil <br /> KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN <br /> JAVADOC-NESERYNK <br /> VI ANGIR EN PATH <br /> LEGG MERKE TIL pathS <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 3pkt++ <br /> VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet <br /> F&#xC5;R WRAPPET request-objekt <br /> TILGANG TIL Resource <br /> <br /> <br /> <br /> 2pkt <br /> SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart <br /> ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet? <br /> Dette er en helt vanlig servlet som ikke gj&#xF8;r stort. <br /> For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv. <br /> <br /> <br /> <br /> Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> 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. <br /> 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. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet. <br /> Da f&#xE5;r man et request-objekt med tilgang til ressursen. <br /> <br /> <br /> <br /> Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
  • 3pkt++ <br /> HVORDAN DEPLOYE EGEN SERVLET <br /> DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT <br /> SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 5pkt++ <br /> &#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil <br /> KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN <br /> JAVADOC-NESERYNK <br /> VI ANGIR EN PATH <br /> LEGG MERKE TIL pathS <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 3pkt++ <br /> VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet <br /> F&#xC5;R WRAPPET request-objekt <br /> TILGANG TIL Resource <br /> <br /> <br /> <br /> 2pkt <br /> SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart <br /> ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet? <br /> Dette er en helt vanlig servlet som ikke gj&#xF8;r stort. <br /> For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv. <br /> <br /> <br /> <br /> Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> 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. <br /> 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. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet. <br /> Da f&#xE5;r man et request-objekt med tilgang til ressursen. <br /> <br /> <br /> <br /> Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
  • 3pkt++ <br /> HVORDAN DEPLOYE EGEN SERVLET <br /> DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT <br /> SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 5pkt++ <br /> &#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil <br /> KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN <br /> JAVADOC-NESERYNK <br /> VI ANGIR EN PATH <br /> LEGG MERKE TIL pathS <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 3pkt++ <br /> VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet <br /> F&#xC5;R WRAPPET request-objekt <br /> TILGANG TIL Resource <br /> <br /> <br /> <br /> 2pkt <br /> SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart <br /> ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet? <br /> Dette er en helt vanlig servlet som ikke gj&#xF8;r stort. <br /> For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv. <br /> <br /> <br /> <br /> Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> 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. <br /> 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. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet. <br /> Da f&#xE5;r man et request-objekt med tilgang til ressursen. <br /> <br /> <br /> <br /> Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
  • 3pkt++ <br /> HVORDAN DEPLOYE EGEN SERVLET <br /> DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT <br /> SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 5pkt++ <br /> &#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil <br /> KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN <br /> JAVADOC-NESERYNK <br /> VI ANGIR EN PATH <br /> LEGG MERKE TIL pathS <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 3pkt++ <br /> VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet <br /> F&#xC5;R WRAPPET request-objekt <br /> TILGANG TIL Resource <br /> <br /> <br /> <br /> 2pkt <br /> SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart <br /> ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet? <br /> Dette er en helt vanlig servlet som ikke gj&#xF8;r stort. <br /> For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv. <br /> <br /> <br /> <br /> Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> 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. <br /> 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. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet. <br /> Da f&#xE5;r man et request-objekt med tilgang til ressursen. <br /> <br /> <br /> <br /> Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
  • 3pkt++ <br /> HVORDAN DEPLOYE EGEN SERVLET <br /> DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT <br /> SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 5pkt++ <br /> &#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil <br /> KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN <br /> JAVADOC-NESERYNK <br /> VI ANGIR EN PATH <br /> LEGG MERKE TIL pathS <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 3pkt++ <br /> VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet <br /> F&#xC5;R WRAPPET request-objekt <br /> TILGANG TIL Resource <br /> <br /> <br /> <br /> 2pkt <br /> SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart <br /> ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet? <br /> Dette er en helt vanlig servlet som ikke gj&#xF8;r stort. <br /> For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv. <br /> <br /> <br /> <br /> Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> 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. <br /> 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. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet. <br /> Da f&#xE5;r man et request-objekt med tilgang til ressursen. <br /> <br /> <br /> <br /> Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
  • 3pkt++ <br /> HVORDAN DEPLOYE EGEN SERVLET <br /> DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT <br /> SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 5pkt++ <br /> &#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil <br /> KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN <br /> JAVADOC-NESERYNK <br /> VI ANGIR EN PATH <br /> LEGG MERKE TIL pathS <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 3pkt++ <br /> VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet <br /> F&#xC5;R WRAPPET request-objekt <br /> TILGANG TIL Resource <br /> <br /> <br /> <br /> 2pkt <br /> SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart <br /> ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet? <br /> Dette er en helt vanlig servlet som ikke gj&#xF8;r stort. <br /> For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv. <br /> <br /> <br /> <br /> Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> 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. <br /> 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. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet. <br /> Da f&#xE5;r man et request-objekt med tilgang til ressursen. <br /> <br /> <br /> <br /> Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
  • 3pkt++ <br /> HVORDAN DEPLOYE EGEN SERVLET <br /> DETTE: VANLIG SERVLET som IKKE GJ&#xD8;R STORT <br /> SLING m&#xE5; vite HVOR I TREET servleten SKAL PLASSERES <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 5pkt++ <br /> &#x201C;ANNOTATIONS&#x201D; PROSESSERES av en MAVEN-plugin TIL EN XML-fil <br /> KAN SKRIVE XML SELV hvis man ikke vil ENDRE KILDEKODEN <br /> JAVADOC-NESERYNK <br /> VI ANGIR EN PATH <br /> LEGG MERKE TIL pathS <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 3pkt++ <br /> VED &#xE5; IMPLEMENTERE SlingHttpSafeMethodsServlet <br /> F&#xC5;R WRAPPET request-objekt <br /> TILGANG TIL Resource <br /> <br /> <br /> <br /> 2pkt <br /> SERVLETen HOT-DEPLOY til SLING - oppdatere, deaktivere etc uten omstart <br /> ANNOTASJONER brukes ogs&#xE5; til DEPENDENCY INJECTION <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> S&#xE5; hva gj&#xF8;r du hvis du vil skrive din egen servlet? <br /> Dette er en helt vanlig servlet som ikke gj&#xF8;r stort. <br /> For at Sling skal kunne vite hvor servleten skal plasseres i treet, trengs litt ekstra informasjon. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> Legg merke til &#x201C;pathS&#x201D; - en servlet kan registreres p&#xE5; flere pather. <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> Hvis man ikke vil endre p&#xE5; koden i en gammel servlet, kan man skrive den xml-fila selv. <br /> <br /> <br /> <br /> Det jobbes ogs&#xE5; med &#x201C;ordentlige&#x201D; annotasjoner man kan bruke, men er ikke sikker p&#xE5; om det er ferdig enn&#xE5;. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 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. <br /> <br /> <br /> <br /> 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. <br /> 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. <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> Hvis man vil operere p&#xE5; ressursen som requesten g&#xE5;r til, s&#xE5; kan man i stedet extende SlingSafeMethodsServlet. <br /> Da f&#xE5;r man et request-objekt med tilgang til ressursen. <br /> <br /> <br /> <br /> Med de samme type annotasjonene kan man lage komponenter, som kan brukes i dependency injection
  • [KLIKK] <br /> <br /> <br /> <br /> 3pkt <br /> SCR.REFERENCE gir tilgang til KJ&#xD8;RENDE KOMPONENTER <br /> NOK &#xE5; deklarere VARIABLEN - Maven-plugin&#x2019;en GJ&#xD8;R RESTEN <br /> N&#xC5;R SERVLETen KJ&#xD8;RER, er REPOSITORY-variabelen tilgjengelig <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> Man kan f&#xE5; instanser av kj&#xF8;rende komponenter ved &#xE5; bruke scr.reference <br /> <br /> <br /> <br /> Det er nok &#xE5; deklarere variabelen. Maven-SCR-plugin&#x2019;en tar seg av resten. <br /> N&#xE5;r servleten kj&#xF8;rer, er repository tilgjengelig.
  • [KLIKK] <br /> <br /> <br /> <br /> 3pkt <br /> SCR.REFERENCE gir tilgang til KJ&#xD8;RENDE KOMPONENTER <br /> NOK &#xE5; deklarere VARIABLEN - Maven-plugin&#x2019;en GJ&#xD8;R RESTEN <br /> N&#xC5;R SERVLETen KJ&#xD8;RER, er REPOSITORY-variabelen tilgjengelig <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> Man kan f&#xE5; instanser av kj&#xF8;rende komponenter ved &#xE5; bruke scr.reference <br /> <br /> <br /> <br /> Det er nok &#xE5; deklarere variabelen. Maven-SCR-plugin&#x2019;en tar seg av resten. <br /> N&#xE5;r servleten kj&#xF8;rer, er repository tilgjengelig.
  • [KLIKK] <br /> <br /> <br /> <br /> 3pkt <br /> SCR.REFERENCE gir tilgang til KJ&#xD8;RENDE KOMPONENTER <br /> NOK &#xE5; deklarere VARIABLEN - Maven-plugin&#x2019;en GJ&#xD8;R RESTEN <br /> N&#xC5;R SERVLETen KJ&#xD8;RER, er REPOSITORY-variabelen tilgjengelig <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> Man kan f&#xE5; instanser av kj&#xF8;rende komponenter ved &#xE5; bruke scr.reference <br /> <br /> <br /> <br /> Det er nok &#xE5; deklarere variabelen. Maven-SCR-plugin&#x2019;en tar seg av resten. <br /> N&#xE5;r servleten kj&#xF8;rer, er repository tilgjengelig.
  • 1pkt ++ <br /> ANDRE KOMPONENTER man vil TENKES &#xC5; UTVIKLE <br /> <br /> <br /> <br /> 3pkt++ <br /> [KLIKK FOR HVER BULLET] <br /> SERVLET-FILTRE <br /> AUTENTISERINGS-MEKANISMER feks. OpenID <br /> RESOURCE PROVIDERE - f.eks. data fra ANNEN APPLIKASJON <br /> <br /> <br /> <br /> 1pkt <br /> [KLIKK] <br /> UANSETT: HOT-DEPLOY <br /> <br /> <br /> <br /> Andre komponenter man kan tenkes &#xE5; ville utvikle <br /> <br /> <br /> <br /> [KLIKK FOR HVER BULLET] <br /> <br /> <br /> <br /> Autentiserings-mekanismer: F.eks. OpenID <br /> Resource providere: Gj&#xF8;r ressurser tilgjengelig, f.eks. det legacy database-systemet <br /> <br /> <br /> <br /> Uansett hva man lager, pakker man dem som OSGi-bundler og deployer til serveren. <br /> Hot-deploy, start, stopp, oppdatering ... <br /> <br /> <br /> <br /> 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 ++ <br /> ANDRE KOMPONENTER man vil TENKES &#xC5; UTVIKLE <br /> <br /> <br /> <br /> 3pkt++ <br /> [KLIKK FOR HVER BULLET] <br /> SERVLET-FILTRE <br /> AUTENTISERINGS-MEKANISMER feks. OpenID <br /> RESOURCE PROVIDERE - f.eks. data fra ANNEN APPLIKASJON <br /> <br /> <br /> <br /> 1pkt <br /> [KLIKK] <br /> UANSETT: HOT-DEPLOY <br /> <br /> <br /> <br /> Andre komponenter man kan tenkes &#xE5; ville utvikle <br /> <br /> <br /> <br /> [KLIKK FOR HVER BULLET] <br /> <br /> <br /> <br /> Autentiserings-mekanismer: F.eks. OpenID <br /> Resource providere: Gj&#xF8;r ressurser tilgjengelig, f.eks. det legacy database-systemet <br /> <br /> <br /> <br /> Uansett hva man lager, pakker man dem som OSGi-bundler og deployer til serveren. <br /> Hot-deploy, start, stopp, oppdatering ... <br /> <br /> <br /> <br /> 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 ++ <br /> ANDRE KOMPONENTER man vil TENKES &#xC5; UTVIKLE <br /> <br /> <br /> <br /> 3pkt++ <br /> [KLIKK FOR HVER BULLET] <br /> SERVLET-FILTRE <br /> AUTENTISERINGS-MEKANISMER feks. OpenID <br /> RESOURCE PROVIDERE - f.eks. data fra ANNEN APPLIKASJON <br /> <br /> <br /> <br /> 1pkt <br /> [KLIKK] <br /> UANSETT: HOT-DEPLOY <br /> <br /> <br /> <br /> Andre komponenter man kan tenkes &#xE5; ville utvikle <br /> <br /> <br /> <br /> [KLIKK FOR HVER BULLET] <br /> <br /> <br /> <br /> Autentiserings-mekanismer: F.eks. OpenID <br /> Resource providere: Gj&#xF8;r ressurser tilgjengelig, f.eks. det legacy database-systemet <br /> <br /> <br /> <br /> Uansett hva man lager, pakker man dem som OSGi-bundler og deployer til serveren. <br /> Hot-deploy, start, stopp, oppdatering ... <br /> <br /> <br /> <br /> 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 ++ <br /> ANDRE KOMPONENTER man vil TENKES &#xC5; UTVIKLE <br /> <br /> <br /> <br /> 3pkt++ <br /> [KLIKK FOR HVER BULLET] <br /> SERVLET-FILTRE <br /> AUTENTISERINGS-MEKANISMER feks. OpenID <br /> RESOURCE PROVIDERE - f.eks. data fra ANNEN APPLIKASJON <br /> <br /> <br /> <br /> 1pkt <br /> [KLIKK] <br /> UANSETT: HOT-DEPLOY <br /> <br /> <br /> <br /> Andre komponenter man kan tenkes &#xE5; ville utvikle <br /> <br /> <br /> <br /> [KLIKK FOR HVER BULLET] <br /> <br /> <br /> <br /> Autentiserings-mekanismer: F.eks. OpenID <br /> Resource providere: Gj&#xF8;r ressurser tilgjengelig, f.eks. det legacy database-systemet <br /> <br /> <br /> <br /> Uansett hva man lager, pakker man dem som OSGi-bundler og deployer til serveren. <br /> Hot-deploy, start, stopp, oppdatering ... <br /> <br /> <br /> <br /> 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 ++ <br /> ANDRE KOMPONENTER man vil TENKES &#xC5; UTVIKLE <br /> <br /> <br /> <br /> 3pkt++ <br /> [KLIKK FOR HVER BULLET] <br /> SERVLET-FILTRE <br /> AUTENTISERINGS-MEKANISMER feks. OpenID <br /> RESOURCE PROVIDERE - f.eks. data fra ANNEN APPLIKASJON <br /> <br /> <br /> <br /> 1pkt <br /> [KLIKK] <br /> UANSETT: HOT-DEPLOY <br /> <br /> <br /> <br /> Andre komponenter man kan tenkes &#xE5; ville utvikle <br /> <br /> <br /> <br /> [KLIKK FOR HVER BULLET] <br /> <br /> <br /> <br /> Autentiserings-mekanismer: F.eks. OpenID <br /> Resource providere: Gj&#xF8;r ressurser tilgjengelig, f.eks. det legacy database-systemet <br /> <br /> <br /> <br /> Uansett hva man lager, pakker man dem som OSGi-bundler og deployer til serveren. <br /> Hot-deploy, start, stopp, oppdatering ... <br /> <br /> <br /> <br /> 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 ++ <br /> SCRIPTS i stedet for SERVLETer <br /> RASKERE &#xE5; UTVIKLE <br /> [KLIKK] <br /> <br /> <br /> <br /> 4pkt <br /> SLING har mange INNEBYGDE SCRIPT-motorer <br /> [KLIKK] <br /> ECMA-Script = Server-side JAVASCRIPT <br /> [KLIKK] <br /> JSR-223 - JAVA SCRIPTING fra JAVA 6 <br /> KAN PLUGGE INN EGNE <br /> <br /> <br /> <br /> ... scripts i stedet for servlet&#x2019;er <br /> <br /> <br /> <br /> ECMAScript bedre kjent som JavaScript, men n&#xE5; snakker vi om server-side <br /> <br /> <br /> <br /> JSR-223: Alle scriptspr&#xE5;k som st&#xF8;ttes gjennom Java Scripting
  • 2pkt ++ <br /> SCRIPTS i stedet for SERVLETer <br /> RASKERE &#xE5; UTVIKLE <br /> [KLIKK] <br /> <br /> <br /> <br /> 4pkt <br /> SLING har mange INNEBYGDE SCRIPT-motorer <br /> [KLIKK] <br /> ECMA-Script = Server-side JAVASCRIPT <br /> [KLIKK] <br /> JSR-223 - JAVA SCRIPTING fra JAVA 6 <br /> KAN PLUGGE INN EGNE <br /> <br /> <br /> <br /> ... scripts i stedet for servlet&#x2019;er <br /> <br /> <br /> <br /> ECMAScript bedre kjent som JavaScript, men n&#xE5; snakker vi om server-side <br /> <br /> <br /> <br /> JSR-223: Alle scriptspr&#xE5;k som st&#xF8;ttes gjennom Java Scripting
  • 2pkt ++ <br /> SCRIPTS i stedet for SERVLETer <br /> RASKERE &#xE5; UTVIKLE <br /> [KLIKK] <br /> <br /> <br /> <br /> 4pkt <br /> SLING har mange INNEBYGDE SCRIPT-motorer <br /> [KLIKK] <br /> ECMA-Script = Server-side JAVASCRIPT <br /> [KLIKK] <br /> JSR-223 - JAVA SCRIPTING fra JAVA 6 <br /> KAN PLUGGE INN EGNE <br /> <br /> <br /> <br /> ... scripts i stedet for servlet&#x2019;er <br /> <br /> <br /> <br /> ECMAScript bedre kjent som JavaScript, men n&#xE5; snakker vi om server-side <br /> <br /> <br /> <br /> JSR-223: Alle scriptspr&#xE5;k som st&#xF8;ttes gjennom Java Scripting
  • 2pkt ++ <br /> SCRIPTS i stedet for SERVLETer <br /> RASKERE &#xE5; UTVIKLE <br /> [KLIKK] <br /> <br /> <br /> <br /> 4pkt <br /> SLING har mange INNEBYGDE SCRIPT-motorer <br /> [KLIKK] <br /> ECMA-Script = Server-side JAVASCRIPT <br /> [KLIKK] <br /> JSR-223 - JAVA SCRIPTING fra JAVA 6 <br /> KAN PLUGGE INN EGNE <br /> <br /> <br /> <br /> ... scripts i stedet for servlet&#x2019;er <br /> <br /> <br /> <br /> ECMAScript bedre kjent som JavaScript, men n&#xE5; snakker vi om server-side <br /> <br /> <br /> <br /> JSR-223: Alle scriptspr&#xE5;k som st&#xF8;ttes gjennom Java Scripting
  • 2pkt ++ <br /> SCRIPTS i stedet for SERVLETer <br /> RASKERE &#xE5; UTVIKLE <br /> [KLIKK] <br /> <br /> <br /> <br /> 4pkt <br /> SLING har mange INNEBYGDE SCRIPT-motorer <br /> [KLIKK] <br /> ECMA-Script = Server-side JAVASCRIPT <br /> [KLIKK] <br /> JSR-223 - JAVA SCRIPTING fra JAVA 6 <br /> KAN PLUGGE INN EGNE <br /> <br /> <br /> <br /> ... scripts i stedet for servlet&#x2019;er <br /> <br /> <br /> <br /> ECMAScript bedre kjent som JavaScript, men n&#xE5; snakker vi om server-side <br /> <br /> <br /> <br /> JSR-223: Alle scriptspr&#xE5;k som st&#xF8;ttes gjennom Java Scripting
  • 2pkt <br /> RASKEST UTVIKLING - INGEN KOMPILERING, DEPLOYING <br /> SCRIPTs lagres i REPOSITORIET <br /> <br /> <br /> <br /> <br /> <br /> <br /> Raskeste - slipper &#xE5; kompilere, deploye etc - man lagrer rett i repositoriet. Kort roundtrip.
  • 5pkt <br /> BLOGGPOST-NODE <br /> EKSEMPEL-SCRIPT i ESP - SERVER SIDE JAVASCRIPT <br /> CURRENTNODE <br /> SKRIV UT PROPERTIES med mindre-enn-prosent-erlik <br /> SLING.INCLUDE <br /> <br /> <br /> <br /> Dette er noden som er forespurt i requesten <br /> <br /> <br /> <br /> Vi plasserer <br /> <br /> <br /> <br /> Forklar ESP <br /> <br /> <br /> <br /> currentNode er noden som er spurt etter i requesten <br /> <br /> <br /> <br /> Skriver ut enkelt-properties - med mindre-enn-prosent-erlik <br /> <br /> <br /> <br /> sling.include - inkluderer resultatet av en annen request. Gj&#xF8;r det mulig &#xE5; dele opp kode i flere skriptfiler.
  • 5pkt <br /> BLOGGPOST-NODE <br /> EKSEMPEL-SCRIPT i ESP - SERVER SIDE JAVASCRIPT <br /> CURRENTNODE <br /> SKRIV UT PROPERTIES med mindre-enn-prosent-erlik <br /> SLING.INCLUDE <br /> <br /> <br /> <br /> Dette er noden som er forespurt i requesten <br /> <br /> <br /> <br /> Vi plasserer <br /> <br /> <br /> <br /> Forklar ESP <br /> <br /> <br /> <br /> currentNode er noden som er spurt etter i requesten <br /> <br /> <br /> <br /> Skriver ut enkelt-properties - med mindre-enn-prosent-erlik <br /> <br /> <br /> <br /> sling.include - inkluderer resultatet av en annen request. Gj&#xF8;r det mulig &#xE5; dele opp kode i flere skriptfiler.
  • 5pkt <br /> BLOGGPOST-NODE <br /> EKSEMPEL-SCRIPT i ESP - SERVER SIDE JAVASCRIPT <br /> CURRENTNODE <br /> SKRIV UT PROPERTIES med mindre-enn-prosent-erlik <br /> SLING.INCLUDE <br /> <br /> <br /> <br /> Dette er noden som er forespurt i requesten <br /> <br /> <br /> <br /> Vi plasserer <br /> <br /> <br /> <br /> Forklar ESP <br /> <br /> <br /> <br /> currentNode er noden som er spurt etter i requesten <br /> <br /> <br /> <br /> Skriver ut enkelt-properties - med mindre-enn-prosent-erlik <br /> <br /> <br /> <br /> sling.include - inkluderer resultatet av en annen request. Gj&#xF8;r det mulig &#xE5; dele opp kode i flere skriptfiler.
  • BYTT TIL TERMINAL <br /> <br /> <br /> <br /> For &#xE5; demonstrere tydelig skal vi bruke tekst-http-klienten curl <br /> <br /> <br /> <br /> Vis hvordan man oppretter og henter en node: <br /> -F angir et parameter man poster <br /> <br /> <br /> <br /> curl -F title=hello http://admin:admin@localhost:8888/foo <br /> => 200 OK <br /> <br /> <br /> <br /> curl http://admin:admin@localhost:8888/foo.tidy.json
  • NESTEN s&#xE5; hele koden kan TWITRES
  • 4 pkt <br /> HTTP-metode POST <br /> FELTNAVN blir PROPERTIES p&#xE5; NODEN <br /> TITLE-feltet BEHANDLES SPESIELT, BLIR NAVN <br /> :REDIRECT <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> POST - HTTP-metode for &#xE5; lagre nytt innhold <br /> Feltnavnene blir properties p&#xE5; noden <br /> TITLE-feltet behandles spesielt, og blir node-navnet <br /> :redirect forteller Post-servleten at vi skal redirectes til den ny-opprettede noden
  • 2pkt <br /> SLING.JS - JAVASCRIPT-BIBLIOTEK som f&#xF8;lger med SLING <br /> SLING.WIZARD() POPULERER skjemafeltene via JSON <br /> <br /> <br /> <br /> <br /> <br /> <br /> sling.js er et javascript-bibliotek som f&#xF8;lger med Sling <br /> Sling.wizard() s&#xF8;rger for &#xE5; populere skjemafeltene med verdier fra noden via JSON
  • 2 pkt <br /> SLING.GETCONTENT henter noder fra ANGITT NODE og 2 NIV&#xC5;ER NED <br /> DOCUMENT.WRITE skriver ut TITTEL fra NODER hentet fra JSON <br /> <br /> <br /> <br /> BYTT TIL TextWrangler <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> Sling.getContent henter noder fra angitt node og 2 niv&#xE5;er ned <br /> <br /> <br /> <br /> Vis at fila ligger i webdav, &#xE5;pne den <br /> <br /> <br /> <br /> G&#xE5; til http://localhost:8888/content/blog/*.html <br /> Fyll ut skjemaet <br /> Lagre
  • 5pkt <br /> NOEN F&#xD8;LER SEG SNYTT? <br /> BILDESKALERING <br /> RSS-FEED <br /> KOMMENTARER <br /> ADMINISTRASJONS-GRENSESNITT <br /> <br /> <br /> <br /> BYTT TIL Firefox <br /> <br /> <br /> <br /> Synes du dette var for simpelt? <br /> OK, da legger vi til dette:
  • 5pkt <br /> NOEN F&#xD8;LER SEG SNYTT? <br /> BILDESKALERING <br /> RSS-FEED <br /> KOMMENTARER <br /> ADMINISTRASJONS-GRENSESNITT <br /> <br /> <br /> <br /> BYTT TIL Firefox <br /> <br /> <br /> <br /> Synes du dette var for simpelt? <br /> OK, da legger vi til dette:
  • 5pkt <br /> NOEN F&#xD8;LER SEG SNYTT? <br /> BILDESKALERING <br /> RSS-FEED <br /> KOMMENTARER <br /> ADMINISTRASJONS-GRENSESNITT <br /> <br /> <br /> <br /> BYTT TIL Firefox <br /> <br /> <br /> <br /> Synes du dette var for simpelt? <br /> OK, da legger vi til dette:
  • 5pkt <br /> NOEN F&#xD8;LER SEG SNYTT? <br /> BILDESKALERING <br /> RSS-FEED <br /> KOMMENTARER <br /> ADMINISTRASJONS-GRENSESNITT <br /> <br /> <br /> <br /> BYTT TIL Firefox <br /> <br /> <br /> <br /> Synes du dette var for simpelt? <br /> OK, da legger vi til dette:
  • 5pkt <br /> NOEN F&#xD8;LER SEG SNYTT? <br /> BILDESKALERING <br /> RSS-FEED <br /> KOMMENTARER <br /> ADMINISTRASJONS-GRENSESNITT <br /> <br /> <br /> <br /> BYTT TIL Firefox <br /> <br /> <br /> <br /> Synes du dette var for simpelt? <br /> OK, da legger vi til dette:
  • 5pkt <br /> HVA SKJEDDE HER? <br /> DISSE SCRIPTENE og ET PAR JAVAKLASSER <br /> SCRIPTENE ligger i REPOSITORIET <br /> Java-klassene I EN BUNDLE <br /> SE N&#xC6;RMERE p&#xE5; JAVA-klassene
  • 5pkt <br /> HVA SKJEDDE HER? <br /> DISSE SCRIPTENE og ET PAR JAVAKLASSER <br /> SCRIPTENE ligger i REPOSITORIET <br /> Java-klassene I EN BUNDLE <br /> SE N&#xC6;RMERE p&#xE5; JAVA-klassene
  • 5pkt <br /> HVA SKJEDDE HER? <br /> DISSE SCRIPTENE og ET PAR JAVAKLASSER <br /> SCRIPTENE ligger i REPOSITORIET <br /> Java-klassene I EN BUNDLE <br /> SE N&#xC6;RMERE p&#xE5; JAVA-klassene
  • 1 pkt <br /> BRUKER JCR-feature OBSERVATION = EventListener
  • 5 pkt <br /> N&#xC5;R KOMPONENTEN AKTIVERES <br /> HENTE OBSERVATIONMANAGER <br /> LEGGE OSS TIL SOM EVENTLISTENER <br /> FOR Event.NODE_ADDED <br /> UNDER en bestemt PATH
  • 4 pkt <br /> IMPLEMENTERE METODE onEvent <br /> F&#xC5; PATH til NY NODE <br /> LAG THUMBNAILS (createThumbnails) <br /> UNNG&#xC5; EVIG L&#xD8;KKE med !event.getPath(&#x201C;thumbnails&#x201D;) <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> Event-listeneren er registrert p&#xE5; repository-niv&#xE5;et <br /> Dvs den vil trigge uansett hvordan noder blir opprettet, trenger ikke v&#xE6;re fra web-grensesnittet (f.eks. WebDav)
  • JCR-FUNKSJONALITET: WebDAV, OBSERVATION <br /> SLING-SNACKS: Script-MAPPING, REST <br /> Pakk koden i en bundle og deploy til serveren - applikasjonen kj&#xF8;rer
  • JCR-FUNKSJONALITET: WebDAV, OBSERVATION <br /> SLING-SNACKS: Script-MAPPING, REST <br /> Pakk koden i en bundle og deploy til serveren - applikasjonen kj&#xF8;rer
  • JCR-FUNKSJONALITET: WebDAV, OBSERVATION <br /> SLING-SNACKS: Script-MAPPING, REST <br /> Pakk koden i en bundle og deploy til serveren - applikasjonen kj&#xF8;rer
  • ER DETTE NOE FOR DEG? <br /> <br /> <br /> <br /> 6 pkt++ <br /> N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD? <br /> P&#xC5;STAND: <br /> [KLIKK] <br /> JA <br /> INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen <br /> I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD. <br /> Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 2 pkt++ <br /> VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER <br /> BONUS-FEATURES <br /> FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA. <br /> <br /> <br /> <br /> Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i <br /> <br /> <br /> <br /> Etter at vi hadde snakket om hierarki i stedet for RDBMS: <br /> Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon) <br /> 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. <br /> <br /> <br /> <br /> Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja! <br /> <br /> <br /> <br /> CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser. <br /> <br /> <br /> <br /> Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold. <br /> <br /> <br /> <br /> Hierarki - har du noen gang laget en s&#xE5;nn tabell? <br /> Hva n&#xE5;r en mappe skal ha flere foreldre? <br /> Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert? <br /> <br /> <br /> <br /> Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
  • ER DETTE NOE FOR DEG? <br /> <br /> <br /> <br /> 6 pkt++ <br /> N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD? <br /> P&#xC5;STAND: <br /> [KLIKK] <br /> JA <br /> INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen <br /> I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD. <br /> Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 2 pkt++ <br /> VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER <br /> BONUS-FEATURES <br /> FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA. <br /> <br /> <br /> <br /> Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i <br /> <br /> <br /> <br /> Etter at vi hadde snakket om hierarki i stedet for RDBMS: <br /> Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon) <br /> 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. <br /> <br /> <br /> <br /> Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja! <br /> <br /> <br /> <br /> CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser. <br /> <br /> <br /> <br /> Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold. <br /> <br /> <br /> <br /> Hierarki - har du noen gang laget en s&#xE5;nn tabell? <br /> Hva n&#xE5;r en mappe skal ha flere foreldre? <br /> Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert? <br /> <br /> <br /> <br /> Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
  • ER DETTE NOE FOR DEG? <br /> <br /> <br /> <br /> 6 pkt++ <br /> N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD? <br /> P&#xC5;STAND: <br /> [KLIKK] <br /> JA <br /> INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen <br /> I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD. <br /> Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 2 pkt++ <br /> VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER <br /> BONUS-FEATURES <br /> FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA. <br /> <br /> <br /> <br /> Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i <br /> <br /> <br /> <br /> Etter at vi hadde snakket om hierarki i stedet for RDBMS: <br /> Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon) <br /> 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. <br /> <br /> <br /> <br /> Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja! <br /> <br /> <br /> <br /> CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser. <br /> <br /> <br /> <br /> Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold. <br /> <br /> <br /> <br /> Hierarki - har du noen gang laget en s&#xE5;nn tabell? <br /> Hva n&#xE5;r en mappe skal ha flere foreldre? <br /> Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert? <br /> <br /> <br /> <br /> Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
  • ER DETTE NOE FOR DEG? <br /> <br /> <br /> <br /> 6 pkt++ <br /> N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD? <br /> P&#xC5;STAND: <br /> [KLIKK] <br /> JA <br /> INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen <br /> I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD. <br /> Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 2 pkt++ <br /> VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER <br /> BONUS-FEATURES <br /> FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA. <br /> <br /> <br /> <br /> Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i <br /> <br /> <br /> <br /> Etter at vi hadde snakket om hierarki i stedet for RDBMS: <br /> Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon) <br /> 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. <br /> <br /> <br /> <br /> Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja! <br /> <br /> <br /> <br /> CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser. <br /> <br /> <br /> <br /> Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold. <br /> <br /> <br /> <br /> Hierarki - har du noen gang laget en s&#xE5;nn tabell? <br /> Hva n&#xE5;r en mappe skal ha flere foreldre? <br /> Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert? <br /> <br /> <br /> <br /> Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
  • ER DETTE NOE FOR DEG? <br /> <br /> <br /> <br /> 6 pkt++ <br /> N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD? <br /> P&#xC5;STAND: <br /> [KLIKK] <br /> JA <br /> INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen <br /> I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD. <br /> Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 2 pkt++ <br /> VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER <br /> BONUS-FEATURES <br /> FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA. <br /> <br /> <br /> <br /> Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i <br /> <br /> <br /> <br /> Etter at vi hadde snakket om hierarki i stedet for RDBMS: <br /> Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon) <br /> 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. <br /> <br /> <br /> <br /> Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja! <br /> <br /> <br /> <br /> CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser. <br /> <br /> <br /> <br /> Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold. <br /> <br /> <br /> <br /> Hierarki - har du noen gang laget en s&#xE5;nn tabell? <br /> Hva n&#xE5;r en mappe skal ha flere foreldre? <br /> Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert? <br /> <br /> <br /> <br /> Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
  • ER DETTE NOE FOR DEG? <br /> <br /> <br /> <br /> 6 pkt++ <br /> N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD? <br /> P&#xC5;STAND: <br /> [KLIKK] <br /> JA <br /> INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen <br /> I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD. <br /> Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 2 pkt++ <br /> VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER <br /> BONUS-FEATURES <br /> FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA. <br /> <br /> <br /> <br /> Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i <br /> <br /> <br /> <br /> Etter at vi hadde snakket om hierarki i stedet for RDBMS: <br /> Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon) <br /> 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. <br /> <br /> <br /> <br /> Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja! <br /> <br /> <br /> <br /> CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser. <br /> <br /> <br /> <br /> Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold. <br /> <br /> <br /> <br /> Hierarki - har du noen gang laget en s&#xE5;nn tabell? <br /> Hva n&#xE5;r en mappe skal ha flere foreldre? <br /> Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert? <br /> <br /> <br /> <br /> Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
  • ER DETTE NOE FOR DEG? <br /> <br /> <br /> <br /> 6 pkt++ <br /> N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD? <br /> P&#xC5;STAND: <br /> [KLIKK] <br /> JA <br /> INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen <br /> I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD. <br /> Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 2 pkt++ <br /> VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER <br /> BONUS-FEATURES <br /> FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA. <br /> <br /> <br /> <br /> Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i <br /> <br /> <br /> <br /> Etter at vi hadde snakket om hierarki i stedet for RDBMS: <br /> Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon) <br /> 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. <br /> <br /> <br /> <br /> Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja! <br /> <br /> <br /> <br /> CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser. <br /> <br /> <br /> <br /> Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold. <br /> <br /> <br /> <br /> Hierarki - har du noen gang laget en s&#xE5;nn tabell? <br /> Hva n&#xE5;r en mappe skal ha flere foreldre? <br /> Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert? <br /> <br /> <br /> <br /> Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
  • ER DETTE NOE FOR DEG? <br /> <br /> <br /> <br /> 6 pkt++ <br /> N&#xD8;KKELSP&#xD8;RSM&#xC5;L: Behandler du INNHOLD? <br /> P&#xC5;STAND: <br /> [KLIKK] <br /> JA <br /> INNHOLD = Data som lagres for &#xE5; kunne hentes fram igjen <br /> I REST er fokus p&#xE5; RESSURSEN, ikke METODEn. RESSURS = INNHOLD. <br /> Alts&#xE5;: [KLIKK] ALT ER INNHOLD - NODER, FILER, SERVLETER <br /> <br /> <br /> <br /> [KLIKK] <br /> <br /> <br /> <br /> 2 pkt++ <br /> VANT TIL &#xE5; definere TABELLER og KOLONNER - gir UN&#xD8;DVENDIGE RESTRIKSJONER <br /> BONUS-FEATURES <br /> FULLTEKST-S&#xD8;K: Alt blir automatisk s&#xF8;kbart <br /> <br /> <br /> <br /> [NESTE SLIDE] <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> F&#xE5; fokus vekk fra SOA-metoder, innf&#xF8;r ROA. <br /> <br /> <br /> <br /> Nei til SOA, ja til ROA! Hvis du stadig m&#xE5; finne p&#xE5; kreative metodenavn i <br /> <br /> <br /> <br /> Etter at vi hadde snakket om hierarki i stedet for RDBMS: <br /> Diskusjon om forretningslogikk - hva med f.eks. forumtr&#xE5;der? (H&#xE5;kon) <br /> 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. <br /> <br /> <br /> <br /> Et annet foredrag p&#xE5; JavaZone: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? Ja! <br /> <br /> <br /> <br /> CouchDB - Amazon SimpleDB - eksempler p&#xE5; at det fins behov for snillere databaser. <br /> <br /> <br /> <br /> Tar gjerne utfordring - gi meg eksempler p&#xE5; data som ikke er innhold. <br /> <br /> <br /> <br /> Hierarki - har du noen gang laget en s&#xE5;nn tabell? <br /> Hva n&#xE5;r en mappe skal ha flere foreldre? <br /> Hadde det ikke v&#xE6;rt fint med en plattform hvor dette er gjennomtenkt og implementert? <br /> <br /> <br /> <br /> Annet foredrag: P&#xE5; tide &#xE5; kaste ut relasjonsdatabasen? JA! Bli hierarkisk!
  • (Forutsatt at man har Maven installert) <br /> SJEKKE UT <br /> SETT MINNE (trenger ofte mer minne for &#xE5; bygge, ikke for &#xE5; kj&#xF8;re) <br /> BYGG (kan ogs&#xE5; bygge uten Maven) <br /> <br /> <br /> <br /> TILGJENGELIG UNDER HELE JAVAZONE - SP&#xD8;R OM HJELP
  • (Forutsatt at man har Maven installert) <br /> SJEKKE UT <br /> SETT MINNE (trenger ofte mer minne for &#xE5; bygge, ikke for &#xE5; kj&#xF8;re) <br /> BYGG (kan ogs&#xE5; bygge uten Maven) <br /> <br /> <br /> <br /> TILGJENGELIG UNDER HELE JAVAZONE - SP&#xD8;R OM HJELP
  • (Forutsatt at man har Maven installert) <br /> SJEKKE UT <br /> SETT MINNE (trenger ofte mer minne for &#xE5; bygge, ikke for &#xE5; kj&#xF8;re) <br /> BYGG (kan ogs&#xE5; bygge uten Maven) <br /> <br /> <br /> <br /> TILGJENGELIG UNDER HELE JAVAZONE - SP&#xD8;R OM HJELP
  • (Forutsatt at man har Maven installert) <br /> SJEKKE UT <br /> SETT MINNE (trenger ofte mer minne for &#xE5; bygge, ikke for &#xE5; kj&#xF8;re) <br /> BYGG (kan ogs&#xE5; bygge uten Maven) <br /> <br /> <br /> <br /> TILGJENGELIG UNDER HELE JAVAZONE - SP&#xD8;R OM HJELP
  • 5 pkt <br /> <br /> <br /> <br /> SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS <br /> PLUGG INN egne BUNDLER <br /> UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER <br /> ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
  • 5 pkt <br /> <br /> <br /> <br /> SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS <br /> PLUGG INN egne BUNDLER <br /> UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER <br /> ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
  • 5 pkt <br /> <br /> <br /> <br /> SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS <br /> PLUGG INN egne BUNDLER <br /> UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER <br /> ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
  • 5 pkt <br /> <br /> <br /> <br /> SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS <br /> PLUGG INN egne BUNDLER <br /> UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER <br /> ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
  • 5 pkt <br /> <br /> <br /> <br /> SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS <br /> PLUGG INN egne BUNDLER <br /> UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER <br /> ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
  • 5 pkt <br /> <br /> <br /> <br /> SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS <br /> PLUGG INN egne BUNDLER <br /> UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER <br /> ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
  • 5 pkt <br /> <br /> <br /> <br /> SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS <br /> PLUGG INN egne BUNDLER <br /> UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER <br /> ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
  • 5 pkt <br /> <br /> <br /> <br /> SLING ER LETT &#xC5; KOMME I GANG MED - et par SCRIPTS <br /> PLUGG INN egne BUNDLER <br /> UNGT PROSJEKT, men STABILT - brukes I KOMMERSIELLE PRODUKTER <br /> ET AV DE MEST BUZZWORD-KOMPATIBLE RAMMEVERKENE SOM FINS!
  • AVSLUTTER med LINKER til de som vil VITE MER <br /> <br /> <br /> <br /> 4 pkt <br /> HJEMMESIDE til PROSJEKTET <br /> 15-MINUTTERS INTRO <br /> MAILINGLISTE <br /> HJEMMESIDE for JACKRABBIT jcr-IMPLEMENTASJON <br /> <br /> <br /> <br /> SP&#xD8;RSM&#xC5;L? <br /> <br /> <br /> <br /> <br /> <br /> <br /> For de som har lyst til &#xE5; vite mer: <br /> <br /> <br /> <br /> Wiki&#x2019;en - et slags springbrett til hjemmesida, men med mye bra halvferdig stoff <br /> <br /> <br /> <br /> Veldig bra mailingliste - aktive deltakere, f&#xE5;r raskt svar

Apache Sling presentation at JavaZone 2009 Apache Sling presentation at JavaZone 2009 Presentation Transcript

  • Apache Sling gjør webutvikling moro igjen
  • 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
  • vidar@idium.no 3
  • vidar@idium.no • Utvikler i Idium AS 3
  • vidar@idium.no • Utvikler i Idium AS • Bygger et produkt basert på Apache Sling 3
  • vidar@idium.no • Utvikler i Idium AS • Bygger et produkt basert på Apache Sling • Committer til Apache Sling-prosjektet 3
  • Hva er Apache Sling? 4
  • Hva er Apache Sling? • “the simplest device for delivering content very fast” 4
  • Hva er Apache Sling? • “the simplest device for delivering content very fast” 4
  • Hva er Apache Sling? • “the simplest device for delivering content very fast” • Web-rammeverk dedikert til Java Content Repository (JCR) 4
  • 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
  • Sling-plattformen 5
  • Sling-plattformen • bygd på JCR • basert på REST • drevet av OSGi 5
  • OSGi REST JCR 6
  • OSGi REST JCR 6
  • Java Content Repository 7
  • Java Content Repository • JCR 1.0: JSR-170 JCR 2.0: JSR-283 7
  • Java Content Repository • JCR 1.0: JSR-170 JCR 2.0: JSR-283 7
  • Java Content Repository • JCR 1.0: JSR-170 JCR 2.0: JSR-283 • Hierarkisk database 7
  • Java Content Repository • JCR 1.0: JSR-170 JCR 2.0: JSR-283 • Hierarkisk database • Noder og attributter 7
  • Java Content Repository • JCR 1.0: JSR-170 JCR 2.0: JSR-283 • Hierarkisk database • Noder og attributter • Rike datatyper 7
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Java Content Repository 11
  • Java Content Repository Database Filsystem 11
  • Java Content Repository Database Filsystem Lese- tilgang Skrive- tilgang 11
  • Java Content Repository Database Filsystem et ur Integrit Strukt Lese- tilgang Spør rin g er Trigger e Skrive- tilgang 11
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Hvordan ser et repository ut? 14
  • Hvordan ser et repository ut? Rotnode Attribute Attribute Name: Produkter Name: Nyheter lastUpdate: 09-09-2009 lastUpdate: 09-09-2009 Name: Gressklipper Name: Hurtigmikser Name: Nettsted lansert ... ... price: 4600.00 price: 699.00 lastUpdate: 09-09-2009 colour: white summary: Velkommen ... body: Sist fredag... vidar@idium.no authors: elgar@idium.no Name: Bråker mye Name: Styr unna ... author: jens@gmail.com author: jens@gmail.com body: Klipper pent, ... body: Denne er ikke ... Name: portrett.jpg stars: 4 stars: 1 lastUpdate: 09-09-2009 jcr:content [binærdata] 14
  • Hvordan ser et repository ut? Rotnode Attribute Attribute Name: Produkter Name: Nyheter lastUpdate: 09-09-2009 lastUpdate: 09-09-2009 Name: Gressklipper Name: Hurtigmikser Name: Nettsted lansert ... ... price: 4600.00 price: 699.00 lastUpdate: 09-09-2009 colour: white summary: Velkommen ... body: Sist fredag... vidar@idium.no authors: elgar@idium.no Name: Bråker mye Name: Styr unna ... author: jens@gmail.com author: jens@gmail.com body: Klipper pent, ... body: Denne er ikke ... Name: portrett.jpg stars: 4 stars: 1 lastUpdate: 09-09-2009 jcr:content [binærdata] 14
  • Hello, World! 15
  • Hello, World! import javax.jcr.*; import org.apache.jackrabbit.core.TransientRepository; 15
  • Hello, World! import javax.jcr.*; import org.apache.jackrabbit.core.TransientRepository; // Logge inn Repository repository = new TransientRepository(); Session session = repository.login(brukernavn, passord); 15
  • Hello, World! import javax.jcr.*; import org.apache.jackrabbit.core.TransientRepository; // Logge inn Repository repository = new TransientRepository(); Session session = repository.login(brukernavn, passord); // Opprette innhold jcr:root Node root = session.getRootNode(); 15
  • Hello, World! import javax.jcr.*; import org.apache.jackrabbit.core.TransientRepository; // Logge inn Repository repository = new TransientRepository(); Session session = repository.login(brukernavn, passord); // Opprette innhold jcr:root Node root = session.getRootNode(); Node jz = root.addNode(“javazone”); javazone 15
  • Hello, World! import javax.jcr.*; import org.apache.jackrabbit.core.TransientRepository; // Logge inn Repository repository = new TransientRepository(); Session session = repository.login(brukernavn, passord); // Opprette innhold jcr:root Node root = session.getRootNode(); Node jz = root.addNode(“javazone”); javazone Node demo = jz.addNode(“demo”); demo 15
  • Hello, World! import javax.jcr.*; import org.apache.jackrabbit.core.TransientRepository; // Logge inn Repository repository = new TransientRepository(); Session session = repository.login(brukernavn, passord); // Opprette innhold jcr:root Node root = session.getRootNode(); Node jz = root.addNode(“javazone”); javazone Node demo = jz.addNode(“demo”); demo.setProperty(“message”, “Hello, World!”); demo Hello, message World! 15
  • Hello, World! import javax.jcr.*; import org.apache.jackrabbit.core.TransientRepository; // Logge inn Repository repository = new TransientRepository(); Session session = repository.login(brukernavn, passord); // Opprette innhold jcr:root Node root = session.getRootNode(); Node jz = root.addNode(“javazone”); javazone Node demo = jz.addNode(“demo”); demo.setProperty(“message”, “Hello, World!”); demo session.save(); Hello, message World! 15
  • Hello, World! import javax.jcr.*; import org.apache.jackrabbit.core.TransientRepository; // Logge inn Repository repository = new TransientRepository(); Session session = repository.login(brukernavn, passord); // Opprette innhold jcr:root Node root = session.getRootNode(); Node jz = root.addNode(“javazone”); javazone Node demo = jz.addNode(“demo”); demo.setProperty(“message”, “Hello, World!”); demo session.save(); Hello, message World! // Hente innhold Node node = root.getNode(“javazone/demo”); 15
  • Hello, World! import javax.jcr.*; import org.apache.jackrabbit.core.TransientRepository; // Logge inn Repository repository = new TransientRepository(); Session session = repository.login(brukernavn, passord); // Opprette innhold jcr:root Node root = session.getRootNode(); Node jz = root.addNode(“javazone”); javazone Node demo = jz.addNode(“demo”); demo.setProperty(“message”, “Hello, World!”); demo session.save(); Hello, message World! // Hente innhold Node node = root.getNode(“javazone/demo”); print(node.getProperty(“message”).getString()); 15
  • Innhold først, struktur senere 16
  • Innhold først, struktur senere • JCR gjør det mulig å lagre data fritt strukturert • Trenger ikke sette opp tabeller med felter 16
  • 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
  • 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
  • Blogg-applikasjon 17
  • Blogg-applikasjon RDBS-modell: Blog Post blogId blogId* author postId title text date 17
  • 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
  • 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
  • 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
  • Blogg-applikasjon JCR-modell: 18
  • Blogg-applikasjon JCR-modell: Vidars blogg author: Vidar First post Second p.. text: Intet mer å... text: ... date: 08-09-2009 date: ... 18
  • Blogg-applikasjon JCR-modell: Vidars blogg author: Vidar First post Second p.. text: Intet mer å... text: ... date: 08-09-2009 date: ... feriebilde.jpg jcr:data: ... 18
  • Blogg-applikasjon JCR-modell: Vidars blogg author: Vidar First post Second p.. text: Intet mer å... text: ... date: 08-09-2009 date: ... feriebilde.jpg jcr:data: ... 18
  • Blogg-applikasjon JCR-modell: Vidars blogg author: Vidar First post Second p.. text: Intet mer å... text: ... date: 08-09-2009 date: ... feriebilde.jpg jcr:data: ... 18
  • Moral Innhold først, strukturere senere 19
  • Moral Innhold først, strukturere senere – kanskje. 19
  • OSGi REST JCR 20
  • OSGi REST JCR 20
  • The Dynamic OSGi Module System for Java 21
  • The Dynamic OSGi Module System for Java • Open Services Gateway initiative 21
  • The Dynamic OSGi Module System for Java • Open Services Gateway initiative • Funksjonalitet (kode) pakkes i bundler 21
  • 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
  • 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
  • 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
  • Standard Java-pakkemodell class Package1.ImplClass private String something; public getSomething() 22
  • Standard Java-pakkemodell Package1 class Package1.ImplClass private String something; public getSomething() 22
  • Standard Java-pakkemodell Package1 public class Package1.ClassB public void doSomething() { ImplClass some = new ImplClass(); some.getSomething(); } class Package1.ImplClass private String something; public getSomething() 22
  • Standard Java-pakkemodell Package1 public class Package1.ClassB public void doSomething() { ImplClass some = new ImplClass(); some.getSomething(); } class Package1.ImplClass private String something; public getSomething() 22
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • OSGi i Apache Sling 24
  • OSGi i Apache Sling • Hele Sling-plattformen er en serie med OSGi-bundles 24
  • OSGi i Apache Sling • Hele Sling-plattformen er en serie med OSGi-bundles • Lett å bytte ut bundles/komponenter med egen funksjonalitet 24
  • 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
  • Behov for egne bundles 25
  • Behov for egne bundles • Egne innholdstilbydere 25
  • Behov for egne bundles • Egne innholdstilbydere • Egne servleter som svarer på bestemte requester 25
  • Behov for egne bundles • Egne innholdstilbydere • Egne servleter som svarer på bestemte requester • Initielt innhold 25
  • Behov for egne bundles • Egne innholdstilbydere • Egne servleter som svarer på bestemte requester • Initielt innhold • Plugin-moduler til Jackrabbit 25
  • OSGi REST JCR 26
  • OSGi REST JCR 26
  • REST 27
  • REST • REpresentional State Transfer • All state holdes av klienten 27
  • REST • REpresentional State Transfer • All state holdes av klienten • Unngår server-side sessions 27
  • 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
  • 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
  • URLer med mening 28
  • URLer med mening • URLen peker til en ressurs, ikke en metode 28
  • URLer med mening • URLen peker til en ressurs, ikke en metode • http://domain.com/?module=Articles;action=Article.publicShow;ID=8402 28
  • URLer med mening • URLen peker til en ressurs, ikke en metode • http://domain.com/?module=Articles;action=Article.publicShow;ID=8402 Article.publicShow 28
  • 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
  • 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
  • Alt kan uttrykkes med GET, POST, PUT, DELETE 29
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • OSGi REST JCR 30
  • OSGi REST JCR 30
  • Apache Sling er et REST-API til JCR 31
  • Apache Sling er et REST-API til JCR +++ 31
  • Virtuelt ressurs-tre 32
  • Virtuelt ressurs-tre • Du kan pode inn andre ressurser i JCR-treet 32
  • Virtuelt ressurs-tre • Du kan pode inn andre ressurser i JCR-treet • En servlet 32
  • Virtuelt ressurs-tre • Du kan pode inn andre ressurser i JCR-treet • En servlet • En filmappe 32
  • Virtuelt ressurs-tre • Du kan pode inn andre ressurser i JCR-treet • En servlet • En filmappe • Din eksisterende database 32
  • Virtuelt ressurs-tre jcr:root Vidars blogg First post author: Vidar text: Intet mer å... date: 08-09-2009 UserJsonServlet Second p.. text: ... date: ... images orders JCR-node Servlet Filmappe RDBMS 33
  • Ressurser En ressurs er en abstraksjon av noe som kan adresseres med en URL 34
  • Egenskaper ved en ressurs 35
  • Egenskaper ved en ressurs • Path • f.eks. pathen til en node i JCR 35
  • Egenskaper ved en ressurs • Path • f.eks. pathen til en node i JCR • Type • for JCR-noder: sling:resourceType 35
  • 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
  • Resource Resolver 36
  • Resource Resolver • Sling bruker ressurs-treet som utgangspunkt for URL-resolving 36
  • 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
  • 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
  • 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
  • Rendering av ressurser 37
  • Rendering av ressurser • En ressurs kan rendres av en servlet eller et skript 37
  • Rendering av ressurser • En ressurs kan rendres av en servlet eller et skript • Ressursens ressurstype bestemmer hvilken servlet/skript som velges 37
  • 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
  • URL-oppbygging /vidars_blog/first_post.fulltext.html http://domain.com 38
  • URL-oppbygging /vidars_blog/first_post.fulltext.html http://domain.com Ressurs-path 38
  • URL-oppbygging /vidars_blog/first_post.fulltext.html http://domain.com Ressurs-path Vidars blogg First post author: Vidar text: Intet mer å... date: 08-09-2009 sling:resourceType: bloggpost 38
  • URL-oppbygging /vidars_blog/first_post.fulltext.html http://domain.com Ressurs-path Vidars blogg First post author: Vidar text: Intet mer å... date: 08-09-2009 sling:resourceType: bloggpost 38
  • URL-oppbygging /vidars_blog/first_post.fulltext.html http://domain.com Ressurs-path Extension Vidars blogg First post author: Vidar text: Intet mer å... date: 08-09-2009 sling:resourceType: bloggpost 38
  • URL-oppbygging /vidars_blog/first_post.fulltext.html http://domain.com Ressurs-path Selector Extension Vidars blogg First post author: Vidar text: Intet mer å... date: 08-09-2009 sling:resourceType: bloggpost 38
  • URL-oppbygging /vidars_blog/first_post.fulltext.html http://domain.com Ressurs-path Selector Extension Vidars blogg First post author: Vidar text: Intet mer å... date: 08-09-2009 sling:resourceType: bloggpost bloggpost 38
  • Servlet/Script Resolver fulltext html bloggpost 39
  • Servlet/Script Resolver bloggpost fulltext html 39
  • Servlet/Script Resolver / apps / bloggpost / fulltext / html 39
  • Servlet/Script Resolver / apps / bloggpost / fulltext / html 39
  • Request-prosessering 40
  • Request-prosessering 1. Finn fram til ressursen Kilde: request-URLen 40
  • Request-prosessering 1. Finn fram til ressursen Kilde: request-URLen 2. Frinn fram servlet/script til prosessering Kilde: resourceType, selectors og extension 40
  • 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
  • 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
  • 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
  • Hva med min egen kode? 41
  • Hva med min egen kode? • Java-kode pakkes i OSGi-bundler 41
  • Hva med min egen kode? • Java-kode pakkes i OSGi-bundler • Bundlen deployes til en kjørende Sling- instans (hot-deploy) 41
  • Din egen servlet public class MyServlet extends HttpServlet { doGet(HttpServletRequest req, HttpServletResponse res) { res.getWriter().println(author); } } 42
  • 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
  • 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
  • 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) { Resource resource = res.getResource(); ValueMap values = resource.adaptTo(ValueMap.class); String author = values.get(“author”, String.class); res.getWriter().println(author); } } 42
  • Dependency injection 43
  • Dependency injection /** * @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) { repository.doStuff(); } } 43
  • Dependency injection /** * @scr.service interface="javax.servlet.Servlet" * @scr.property name="sling.servlet.paths" * value="/apps/bloggpost/fulltext/html" */ public class MyServlet extends SlingSafeMethodsServlet { /**@scr.reference */ private SlingRepository repository; doGet(SlingHttpServletRequest req, SlingHttpServletResponse res) { repository.doStuff(); } } 43
  • Andre komponenter 44
  • Andre komponenter • Servlet-filtre 44
  • Andre komponenter • Servlet-filtre • Autentiserings-mekanismer 44
  • Andre komponenter • Servlet-filtre • Autentiserings-mekanismer • Resource-providere 44
  • Andre komponenter • Servlet-filtre • Autentiserings-mekanismer • Resource-providere • ... 44
  • Andre komponenter • Servlet-filtre • Autentiserings-mekanismer Hot- ploy! de • Resource-providere • ... 44
  • Rendering-scripts 45
  • Rendering-scripts Ressurser kan rendres med scripts. 45
  • Rendering-scripts Ressurser kan rendres med scripts. Flere innebygde script- og mal-motorer: • ECMAScript • XSLT • Groovy • Ruby • Velocity • JSR-223 • Scala • JSP • ... 45
  • Rendering-scripts Ressurser kan rendres med scripts. Flere innebygde script- og mal-motorer: • ECMAScript • XSLT • Groovy • Ruby • Velocity • JSR-223 • Scala • JSP • ... 45
  • Rendering-scripts Ressurser kan rendres med scripts. Flere innebygde script- og mal-motorer: • ECMAScript • XSLT • Groovy • Ruby • Velocity • JSR-223 • Scala • JSP • ... 45
  • Rendering-scripts • Raskeste måten å utvikle på • Scripts kan hentes fra repositoriet eller fra bundler 46
  • Ressurs-rendering i ESP 47
  • 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
  • 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
  • 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
  • Arkitektur 48
  • Arkitektur JCR API Apache Jackrabbit 48
  • Arkitektur JCR API OSGi Apache Jackrabbit Apache Felix 48
  • Arkitektur Sling Engine / APIer JCR API OSGi Apache Jackrabbit Apache Felix 48
  • Arkitektur OSGI-bundler Scripts Initielt innhold Din applikasjon Sling Engine / APIer JCR API OSGi Apache Jackrabbit Apache Felix 48
  • Demo Poste nytt innhold
  • Demo En mini-blogg-applikasjon med 70 linjer kode Could you just twitter me the code you’ve written today?
  • 1: Opprette nye poster <form method=”POST”> Title: <input type=”text” name=”title” /> Summary: <textarea name=”summary”></textarea> Body: <textarea name=”body”></textarea> <button type=”submit”>Lagre</button> <input type=”hidden” name=”:redirect” value=”*”/> </form>
  • 2. Hente eksisterende <script src=”/system/sling.js”></script> <form method=”POST”> ... </form> <!-- Sett feltverdier fra nodens property-verdier --> <script>Sling.wizard();</script>
  • 3. Navigasjon <ul> <li> <a href="/content/blog/*.html">[Ny post]</a> <script> var posts = Sling.getContent("/content/blog", 2); for(var post in posts) { document.write("<li><a href='/content/blog/" + i + "'>" + posts[post].title + "</a></li>"); } </script> </ul> Koden er tilgjengelig på http://tinyurl.com/slingblog46
  • Litt for simpelt for deg? 54
  • Litt for simpelt for deg? • Hva med • On-the-fly skalering av bilder • RSS-feed • Kommentarer • Separat admin-grensesnitt 54
  • Hva skjedde her? Koden finnes på http://svn.apache.org/repos/asf/sling/trunk/samples/espblog/ 55
  • 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
  • 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
  • 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
  • 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 {
  • 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”, ... ); }
  • 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); } } }
  • En typisk Sling-applikasjon
  • En typisk Sling-applikasjon • JCR-funksjonalitet • WebDAV • Observation
  • En typisk Sling-applikasjon • JCR-funksjonalitet • WebDAV • Observation • Sling-snacks • Enkel skript-mapping • REST-grensesnitt • Innholdslasting
  • 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
  • Bør du vurdere Apache Sling / JCR? 60
  • Bør du vurdere Apache Sling / JCR? • Behandler du innhold? 60
  • Bør du vurdere Apache Sling / JCR? • Behandler du innhold? • Ja, det gjør du. 60
  • 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
  • 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
  • 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
  • Kom i gang
  • 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
  • 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
  • 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
  • Oppsummering 62
  • Oppsummering • Lett å komme i gang • Legg til innhold, et par script, og du har en applikasjon 62
  • 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
  • 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
  • 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
  • Lesestoff • http://sling.apache.org • .../site/discover-sling-in-15-minutes.html • dev@sling.apache.org • http://jackrabbit.apache.org 63
  • vidar@idium.no 64