analyse og implementasjon

Størrelse: px
Begynne med side:

Download "analyse og implementasjon"

Transkript

1 Accenture J2SE basert batch system analyse og implementasjon Anders Finnerud & Dennis Lundh

2 Innhold 1 INTRODUKSJON FORORD BESKRIVELSE AV OPPGAVEN Bakgrunn Målsetning INTRODUKSJON AV FREMGANGSMETODIKK FOR DOKUMENTET EN INNFØRING I BATCHSYSTEMER BATCH GENERELT Effektivisering Concurrency Jobb skedulering Kritiske avsnitt Exclusions låsing DESIGN AV BATCHSYSTEMER Tidsstyring og Transaksjonsflyt LOGGFØRING OG FEILDETEKSJON Feilhåndtering(retry) BESKRIVELSE AV TESTAPPLIKASJON (PROOF OF CONCEPT) INTRODUKSJON Utgangspunkt beskrivelse av Nøkkel Komponenter og funksjonalitet Beskrivelse av testens komponenter TESTSCENARIO BESKRIVELSE AV KOMPONENTER OG FUNKSJONALITET SYSTEMBESKRIVELSE OG RESULTAT AV IMPLEMENTASJON ENKEL BATCH PROSESSERING MED BRUK AV HIBERNATE IMPLEMENTERING AV QUARTZ Bakgrunn initiering Cron Bryter Implementasjon av Enkel bryter IMPLEMENTERING AV BATCH SYSTEMET Kontroll av batchsystemet VURDERING AV MÅLOPPNÅELSE BAKGRUNN FOR MÅL ANALYSE KONKLUDERENDE ANALYSE AV PROBLEMSTILLING Mulighet for implementering av automatisering og skedulering Takle feilsituasjoner Håndtere flertrådskjøring Isolert logikk

3 6 VURDERING AV FREMGANGSMÅTE PROSESSBESKRIVELSE Prosessen utvikling i forhold til prosjektets mål Bestemmelse av scenario UTFORDRING OG PROBLEMLØSNING I FORHOLD TIL VERKTØY Installasjon/Initiering av Quartz: Bruk av Subversion(vii) Bruk av Maven(vi) HVA ER NESTE SKRITT Ett brukervennlig grensesnitt Alternative løsninger KONKLUSJON VERKTØY KILDER APPENDIKS KLASSEDIAGRAMMER SEKVENSDIAGRAM FOR BATCH JOBB

4 1 INTRODUKSJON 1.1 FORORD Datateknologi er noe som mange forbinder med et konsept som er fremtidsrettet og har alltid hatt en enorm utvikling de siste år. Men en essensiell grunn til at datateknologien har fått den status den har i dag kan sies å ha tatt utgangspunkt i krav til automatisering og forenkling av arbeidsoppgaver i produksjons industrien. Automatisering av oppgaver ble ett konsept så tidlig som i industrien på starten av 1900 tallet. For å effektivisere produksjon kom begreper som masseproduksjon og serieproduksjon, begreper som ble allmenn kjent etter at Ford Motor Company revolusjonerte industrien. Produksjon av T Ford bilene foregikk på samlebåndslinjer noe som kuttet ressursbruk og kostnader betraktelig, og derfor tillot masseproduksjon av det legendariske bilmerket. Da datamaskinen gjorde sin introduksjon, var dens funksjonalitet og etter hvert programvare basert på seriell prosessering. Det vil si at elementer/algoritmer blir behandlet som en seriell strøm av instruksjoner, slik at første instruksjon må fullføres før neste kan begynne. Nye krav til effektivisering har etter hvert kommet til automatiserings industrien og tema som innebærer matematiske beregninger, blant annet parallell produksjon som er avhengig av datateknikk for å fungere. I databegrep er dette kjent som parallell prosessering. Parallell prosessering betyr at flere elementer behandles samtidig for å løse samme oppgave. I de siste årene har vi fått mange teknologiske fremskritt for å forenkle hverdagen. Vi fikk minibanker som forenklet pengeuttak ved at man de både kunne avløse bankene og ordne uttak raskt og automatisk. Etter hvert har også nettbanker blitt vanlig for flere og flere, da dette har kunnet gjøre mulig at du kan betale regninger fra din egen stue. En nettbank fungerer nesten som om du skulle gått i banken selv. Du kan overføre penger mellom kontoer, få en oversikt over dine siste transaksjoner og kontostatus og du skal kunne stole på att systemet gir deg rette opplysninger og ønskede transaksjoner. Banker og større selskaper har også i større grad blitt avhengig av å kunne ha systemer som tar av seg både faste og varierende kostnader. De faste kostnadene skal så automatisk betales til faste tidspunkt, samtidig skal det være mulig å i tilegg kunne gå inn i systemet på egen hånd for å betale de varierende kostnadene. Dette er bare ett av mange eksempler på anvendbarhet for denne typen teknologi. Et konsept som er gammelt, men også enormt anvendbart og gjennomgått en stor utvikling i årenes løp, har nå blitt til noe av den viktigste teknologien i dagens informasjonsteknologiske samfunn. Viktigheten av automatiserte system som samtidig er fleksible er et nøkkelelement i dagens drift av alle typer transaksjoner, fra enkle minibanksystem til internasjonale banksystemer. 1.2 BESKRIVELSE AV OPPGAVEN 4

5 1.2.1 BAKGRUNN Accenture lager ulike løsninger for bedrifter som av og til inneholder løsninger basert på Batchsystemer med mulighet for å starte ved bestemte tidspunkter og kunne benyttes av flere instanser til samme tid. De har benyttet seg av Java Enterprise Edition(heretter kalt J2EE) som utviklingsplatform da den støtter flertrådskjøring og flere andre egenskaper som er nødvendig for løsninger som de utvikler. I det siste har det blitt lagt fokus på enklere (lettvekt) løsninger for slike systemer i det internasjonale software samfunnet. muliggjøre lignende operasjoner i Java Standard Edition(heretter kalt J2SE). J2SE har blitt svært populært med enklere metoder for utvikling med alternative rammeverk for å muliggjøre krav for stabile løsninger. Fordelen med J2SE i forhold til J2EE er at det krever mindre ressurser, da J2EE inneholder mye ekstra kode for å fungere, uansett applikasjonens kompleksitet. Til nå har Accenture vært nødt til å programmere mye fra grunnen av i gjeldende systemer. Dette er fordi kundene har forskjellige forutsetninger og behov for hvordan løsningen skal fungere, og for hvilke systemer den skal kommunisere med. Accenture ønsker derved å gjøre det mulig å lage forskjellige løsninger tilpasset ulike prosjekter og scenarioer, der det benyttes et standardisert system, noe som vil være tid og ressurssparende. Accenture ønsker å finne ut mer om denne utviklingen og i hvilken grad dette kan hjelp til med å effektivisere bedriften ved utvikling av den type systemer Accenture utvikler. i den forstand at det vil kunne bli enklere å implementere og teste aktuelle løsninger MÅLSETNING Vi skal finne ut av i hvilken grad et system basert på J2SE tilfredsstiller kravene for et fungerende Batch/on line system. Det skal også analyseres problemstillinger ved Batch/on line systemer, for å få en oversikt og sammenheng av krav for slike system. Utviklingsprosessen skal analyseres når vi implementerer ny logikk, og vi konkluderer med en bedømmelse av hvordan prosessen har fortonet seg, hvordan problemer har blitt løst, og gjennomførbarhet ved valgte løsning. Det skal danne grunnlag i analysen av systemet. Vi tar utgangspunkt i ett J2SE basert system bestående av: Quartz(tidsstyring), Hibernate(Datatransaksjon og lagringshåndtering) og Java implementasjon(jobbkontrol). Ett viktig poeng for oppdragsgiver er at logikken er isolert. Det vil si at komponenter kan byttes ut, uten at det får konsekvenser for resten av systemet. Det vil gjøre applikasjonen mer fleksibel og anvendbar for andre prosjekter. Dette vil gjelde i hovedsak logikk som skedulering, arbeidsutførelse, database og eventuelle andre større logiske komponenter. Bedriften vil da få greie på i hvilken grad et system med denne sammensetningen av rammeverk vil fungere. De vil få en analyse av bakgrunn, eksempel på et fungerende system og få greie på eventuell kompleksitet i utviklingsprosessen. hvordan det ville være å benytte lettvektskomponenter (quartz, spring, hibernate osv.) utenfor J2EE miljøet til å kjøre batcher. De vil få en analyse av hva som ligger bak batch systemer, et eksempel på et fungerende system og eventuell kompleksitet under utviklingen. Disse kravene stiller systemet: Kunne implementere automatisering og skedulering Takle feilsituasjoner Håndtere flertrådskjøring Håndtere partisjonering, som er effektivisering ved kjøring av flere prosesser/tråder samtidig. 5

6 Applikasjonen skal tilby en standard grensesnitt for transaksjons og feilhåndtering Logikk skal i størst mulig grad være isolert Muligheter for statistikk, loggføring og overvåkning 1.3 INTRODUKSJON AV FREMGANGSMETODIKK FOR DOKUMENTET Batch prosessering av denne type er et meget stort og avansert tema. Vi vil derfor gå nøye igjennom grunnlaget for alle aspekter og definisjoner som er hensiktsmessige i forhold til dette prosjektet, før vi går løs på oppgavens mål. I kapittel 2. går vi igjennom en innføring i og grunnleggende problemstillinger for generelle Batchsystemer. I kapittel 3. beskriver vi i detalj testapplikasjonen som skal implementeres og analyseres. Før vi beskriver og argumenterer gradvis prosessen fra forståelse av systemet til implementering av logiske komponenter i kapittel 4. I kapittel 5 kommer vi med en konkluderende analyse og vurdering av mål oppnåenlse i forhold til prosjektets fastsatte mål. 6

7 2 EN INNFØRING I BATCHSYSTEMER 2.1 BATCH GENERELT Dette er en gjennomgang av batchsystemer slik vi i gruppen har forstått dem. Denne teksten har som mål å beskrive generelt, og finne typiske aspekter ved slike systemer. Som man kan se fra betydningen av ordet batch (se boks t.h.), så handler dette om noe som utføres på flere ting i en omgang. For eksempel baking av flere brød i en omgang. Deigen eltes for en viss mengde brød, for så å deles inn i brødemner og stekes sammen i ovnen. Etterpå pakkes brødene ned. Hvis dette settes i system som det for eksempel gjøres hos industrialiserte bakerier (for eksempel Bakers AS) Så er det fremdeles snakk om den samme jobben som gjøres med brødene. Men det er lagt til et automatiserings element som kan gjenta denne batch jobben til fastsatte tidspunkter. Betydningen av ordet batch Batch \Batch\, n. [OE. bache, bacche, fr. AS. bacan to bake; cf. G. geb["a]ck and D. baksel. See Bake, v. t.] 1. The quantity of bread baked at one time. 2. A quantity of anything produced at one operation; a group or collection of persons or things of the same kind; as, a batch of letters; the next batch of business. ``A new batch of Lords.'' Lady M. W. Montagu. Source: Webster's Revised Unabridged Dictionary (1913) (dictionary.net) EFFEKTIVISERING Ett batchsystem kan bli mer fleksibelt, effektivt og/eller risikofylt hvis du benytter deg av ulike metoder. Det enkleste eksempelet er at en baker blander ingredienser, elter, deler deigen, steker, og pakker brødet, og så gjentar den samme operasjonen for et bakeri, slik som beskrevet i forrige avsnitt. Dette fungerer uten problem så lenge man går ut i fra at det alltid er nok råvarer, men du kan bare bake ett brød om gangen. Men det er ikke spesielt lønnsomt hvis Batchsystemet stiller større krav. I dette tilfellet hvis bakeriet får større etterspørsel C ONCURRENCY Concurrent betyr konkurrerende. Konseptet concurrency står for nesten det samme som parallell prosessering, Forskjellen er den at parallell prosessering er et begrep for å dele et komponent i flere deler og prosessere de oppdelte komponentene uavhengig av hverandre til samme tid. Ett concurrent system går også ut på å prosessere i parallell, men prosesseringen behøver ikke å foregå samtidig eller være av samme type. Bakeri eksempel: Hvis bakeriet ansetter flere bakere som baker brød i batchsystemet vil det da kunne lages ferdig flere brød på kortere tid teoretisk. Ett batchsystem som benyttes av flere prosesser kaller vi ett concurrent batchsystem. 7

8 FIGUR 2 1 CONCURRENT BATCH Men vil man kunne bake flere brød til samme tid som det tar å lage ferdig ett brød med det gamle systemet? Alle bakere som jobber benytter den samme batchprosessen. Siden bakerne da også deler de samme ressurser(råvarer eller ovn) for å produsere så vil det kunne føre til at for eksempel mange brød er klare til steking samtidig, og hvis stekeovnen da er full, så er en eller flere av bakerne nødt til å vente til ovnen er har ledig plass. Når prosesser må vente på hverandre for å kunne utføres blir dette en flaskehals. Så lenge prosessene ikke jobber mot felles ressurser i ett batchsystem er ikke dette noe problem, og transaksjonen vil foregå uavbrutt. FIGUR 2 2 CONCURRENT BATCH MED FLASKEHALS JOBB SKEDULERING Siden ett Batchsystem utføres automatisk, trenger man et system som kan styre hvordan bakingen skal synkroniseres når flere jobber utføres over samme system. Et system som bestemmer når og hvilken oppgave som ska utføres kaller vi en planlegger(skeduler). En skeduler kan lage en kø ved at de forskjellige prosessene (bakerne) venter i en kø hvis en ressurs (ovn) ikke er ledig, og bestemme hvem som skal få bruke ressursen når det blir ledig. En enkel måte at dette utføres på er FIFO (First In First out). Det vil si at den som kommer først til køen slipper først til. En annen metode er SJF(Shortest Job First), som kjører den batch jobben i køen som tar minst tid å bli ferdig først. Det kan føre 8

9 til at flaskehalsen blir mindre, så lenge jobbene er like viktige(har lik prioritet). FIGUR 2 3 EKSEMPEL PÅ FIFO KØ 9

10 2.1.4 KRITISKE AVSNITT Hva hvis man skal ta hensyn til hvor mye råvarer man har tilgjengelig? Batchsystemet kan utføre en sjekk før bakeprosessen begynner, for å sørge for at bakerne har nok mel. En planlegger(heretter kalt Scheduler) vil da sørge for at det bestilles mel, hvis det ikke er nok for alle bakerne. Da vil vi ha et on line system, det vil si at en Scheduler tar et nytt valg hver gang batchprosessen utføres. Men det er slik at hver prosess (baker) har en identisk batchprosess, og som kan bli utført av flere prosesser(bakere) til samme/tilnærmet samme tid. Jobben med å sjekke og bestille mel i batchsystemet vil sjekkes/bestilles av den samme delen av batch jobben. Dette kalles et kritisk avsnitt, fordi to uavhengige prosesser (bakere) oppaterer en felles ressurs(sjekk/bestilling av mel). Kjernen av problemet oppstår når en jobb skal oppdatere eller skrive(gjøre endringer) på et delt system, ikke når man kun leser fra systemet RACE CONDITION Så hva om to prosesser (bakere) begynner batchprosessen til tilnærmet samme tid? Hvis det ikke er tilstrekkelig med mel vil den ene bakeren vil først sjekke om det er nok mel, før den andre bakeren sjekker det samme. Begge bakerne vil finne ut at det ikke er nok mel. Den første prosessen (bakeren) vil bestille mel, men det vil også den andre. Altså den andre prosessen (bakeren) vil da bestille mer mel selv om det er allerede bestilt.( Dette spesifikke problemet kaller vi en Race Condition ). Her er det kritiske avsnittet(mel bestilling) vist, med Race Condition problemet: Ett kanskje mer relevant scenario for hvor det samme problemet har større konsekvenser er ved transaksjoner i en bank eller annet økonomisk system. To on line henvendelser ønsker å overføre penger fra systemet. Systemet vil unngå å komme i minus, og har en total kapasitet på kr. Henvendelsen 1 undersøker om det er mulig å overføre kr, og får bekreftet at det er mulig. Transaksjonen blir derfor fullført. Men før denne transaksjonen får bekreftet at kapasiteten etter overføringen nå er 5000 kr( ), undersøker henvendelse 2(som også ønsker kr) den totale kapasiteten på systemet. Henvendelsen får da beskjed om at den totale kapasitet fortsatt er på kr, og vil derfor også få bekreftet at transaksjonen er mulig og vil overføre kr. Når begge overføringene er gjennomført er den totale kapasiteten 5000 kr. Her er en grafisk fremstilling av eksempelet med penge transaksjoner. T1 i blått er tidslinje for første transaksjon. T2 i rødt er tidslinje for andre transaksjon. Den totale kapasiteten for systemet er vist ved forskjellige tidspunkter under transaksjonene: 10

11 FIGUR 2 4 RACE CONDITION, BANK EKSEMPEL Av figuren kan vi se at totalsummen er fortsatt når transaksjon 2 sjekker om transaksjon summen er mindre enn totalsummen og at totalsummen har blitt 5000 før transaksjon 2 skal utføre transaksjonen. 11

12 D EADLOCK Ett eksempel: Fire biler kommer samtidig mot ett kryss fra 4 forskjellige retninger. Høyre regelen sier at man har vikeplikt for bilen til høyre for deg i lyskrysset, men det vil føre til at alle bilene må vente på hverandre siden alle har en bil til høyre i krysset. Dette kaller vi en Deadlock. FIGUR 2 5 DEADLOCK EKSEMPEL, BILER I KRYSS Når prosesser venter på hverandre vil ingen framdrift forekomme, og batchsystemet vil stoppe fullstendig opp. Sjansen for en Deadlock er som regel større i større systemer hvor flere prosesser utfører kritiske transaksjoner, da sannsynligheten for at flere transaksjoner ankommer ett kritisk avsnitt til samme tid også øker. I batchsystemer med mange transaksjoner kan det derfor være lurt å dele inn transaksjonene slik at man kjører et begrenset antall jobber om gangen. 12

13 2.1.5 EXCLUSIONS LÅSING Ett kritisk avsnitt problemet har flere løsninger, ut ifra hvilke krav man har til Batchsystemet. Men felles for problemene er at alle løsninger må være synkronisert. En helt enkel metode blir her presentert: Sjekker om en jobb som skal utføres er opptatt eller ledig før man kommer til en kritisk prosess i Batchsystemet (sjekk og bestilling av mel, eller bruk av ovn ). Ett Concurrent Batchsystem vil ved Mutual Exclusion fungere slik at man låser det kritiske avsnittet hvis den er tatt i bruk. Det vil si at alle andre prosesser som ønsker tilgang vil bli nektet og må vente. Ett eksempel er at bakeren må først sjekke om den kritiske prosessen er i bruk av en annen baker. Hvis prosessen er opptatt får prosessen (bakeren) beskjed om att jobben som skal utføres er låst (opptatt), og må vente. Når den prosessen som benytter seg av den kritiske prosessen er ferdig blir låsen endret slik at den er åpen. Bakeren som venter må hele tiden sjekke tilstanden til ovnen slik at han/hun kan se om tilstanden til prosessen er endret til åpen, og kan i så fall fortsette videre med batchprosessen. FIGUR 2 6 ENKEL LÅS 13

14 2.2 DESIGN AV BATCHSYSTEMER T IDSSTYRING OG T RANSAKSJONSFLYT Batch arbeider kan stort sett deles inn i to hovedformer. Forskjellen ligger i måten jobbens utstrekning defineres: som arbeid på en gitt mengde enheter, eller Quantity of Items (QoI) som arbeid på enheter i en gitt tidsperiode, eller Quantity of Time (QoT) (Merk: henholdsvis QoI og QoT benyttes heretter) KVANTITET AV TID BATCH (QOT) Et typisk senario for QoT batcher er fakturaproduksjon til en fastsatt fakturadato. Et firma samler faktura grunnlaget for alle sine kunder frem til for eksempel månedslutt. Grunnlagsdataene benyttes så for å kalkulere og produsere fakturabrev for alle kundene som har benyttet firmaets tjenester den måneden. Jobben utføres på varierende fakturagrunnlag (ordrer), men gjøres til fastsatt tid (fakturadato) Figur 2 7 prosessering av enheter samlet, med tidsstyring Utover dette så kan man igjen dele opp i to kategorier. Batchjobbens enheter kan betraktes som en gruppe av enheter som prosesseres som en samlet entitet. Dette kalles ofte for batching, og er illustrert i figur 2 7 og 2 9. Det motsvarende alternativet er såkalt de batching som vises på figur 2 8 og Denne metodikken innebærer at jobben utføres på en samling individuelle enheter. Det betyr at arbeidet utføres enkeltvis og uavhengig på hver og en av batchens enheter. 14

15 Quantity of Time de-batching Quantity of Time de-batching Enhet Motta enheter Mottar et ukjent antall enheter Koble sammen/lagre enheter i batch datastore Enheter Lagrer enhetene i påvente av tidspunkt for kjøring Mottar, prosesserer og sender enhetene enkeltvis Enhet Prosesser enhet Enhet Styrer tidspunkt for prosessering av en ukjent mengde enheter. F.eks et klokkeslett, hver time, hvert minutt osv. Tidsstyring (Timer) FIGUR 2 8 PROSESSERING AV ENHETER HVER FOR SEG, MED TIDSSTYRING M ENGDE ENHETER BATCH Den andre hovedformen for batchmetodikk er basert på at en viss mengde enheter mottas før kjøringen igangsettes Det betyr at en QoI batch ikke kjøres til et gitt tidspunkt, men starter først når jobbgrunnlaget er stort nok. Et eksempel: Forestill deg et opptakskontor til en kurstilbyder. Det er ikke lønnsomt å holde kurset når antall deltakere er under en viss grense. Derfor venter opptakskontoret frem til denne grensen er oversteget, for så å sende ut bekreftelse på opptak til kurset. På samme måte som for tidsstyrte batchjobber, så kan også mengdestyrte jobber komme i to hovedvarianter. Figur 2 9 viser samlet prosessering ut fra mengde. 15

16 FIGUR 2 9 PROSESSERING AV ENHETER SAMLET, MED MENGDE BASERT AVFYRING 2.3 LOGGFØRING OG FEILDETEKSJON Systemet skal kunne loggføre driften og de feil som oppstår. Samtidig skal feilene rulles tilbake på en slik måte at dataene i databasen ikke er endret i forhold til tilstanden de hadde før batchkjøringen. Det er viktig å merke seg at dette ikke innebærer at databasen skal se identisk ut. Kun at buisness objektene og tilknyttede data felter (kolonneverdier) er uendret. Radnummer og lignende tellevariable m.m. vil naturligvis ikke kunne gjøres like. 16

17 FIGUR 2 10 TENKT HENDELSESDIAGRAM FOR SYSTEMET. 17

18 2.3.1 FEILHÅNDTERING(RETRY) I visse tilfeller kan det være fornuftig å forsøke å kjøre prosessen på nytt når en batch feiler. Da vil man først rulle tilbake dataene, så man er sikret et likt utgangspunkt, for så å la jobben kjøre på nytt for den aktuelle batch partisjonen. Dette vil som regel innebære at også flere batch enheter som det ikke var noe problem med vil måtte kjøres på nytt. Dette er fordi transaksjonen som de var en del av ble rullet tilbake, og det vil alltid involvere alle medlemmene innenfor en transaksjon. For å unngå dette kan man sette transaksjonen til å kun strekke seg over ett element. Dette velger man allikevel oftest ikke å gjøre fordi det sjelden oppstår feil som krever mer tid til sammen enn den tidskostnaden en slik implementasjon tilfører. 18

19 3 BESKRIVELSE AV TESTAPPLIKASJON (PROOF OF CONCEPT) 3.1 INTRODUKSJON Prosessen med å lage et robust concurrent Batchsystem kan i noen tilfeller være vanskelig å få oversikt over og skjønne dybden av. Første del av utviklingen foregikk i form av studier av andre batchsystemer. Eksempler på batchsystemer finnes mange steder, og vi har tatt ideer fra prosess og automatiseringsindustrien, så vel som fra allerede eksisterende batchsystemer for databehandling. Med dette som grunnlag vil vi nå forklare Batchsystemet oppbygning, bit for bit separert i logiske komponenter. Modellen under viser denne inndelingen. Vi går igjennom de forskjellige delene av denne modellen i delkapittel U TGANGSPUNKT Vi har av våre veiledere fra Accenture blitt tildelt ett image av ett system på CD. Ett image er ett ferdig installert system som kan kjøres fra eksterne applikasjoner, som om det skulle være ett eget system. Dette bildet kjøres med hjelp av VirtualBox(ii), og inneholder ett Linux, Ubuntu (i) operativsystem med utviklingsplattformen Eclipse(iii) for Java implementering. Følgende rammeverk og ekstra funksjoner er ferdig installert: Hibernate ( ) Maven (vi) Postgresql (viii) Quantum(ix) 19

20 3.1.2 BESKRIVELSE AV NØKKEL KOMPONENTER OG FUNKSJONALITET INTRODUKSJON TIL HIBERNATE Hibernate er et rammeverk for kommunikasjon(mapping) mellom relasjons databaser og Java objekter. Det vil si at rammeverket støtter en forenklet kommunikasjon mellom Java objekter og databasetabeller. Hibernate har flere funksjoner for data kontrollering. Dette er bare en generell introduksjon til komponentene vi behøver i vårt batchsystem. For utfyllende dokumentasjon se: 20

21 V IKTIGE KONSEPTER OG FUNKSJONER I HIBERNATE Persistente objekter: Enkle Java objekter(pojo) som fungerer som ett konstant mellomlegg mellom en database og transaksjon implementering. Disse innholder all logikken for å skrive til og fra databasen, og befinner seg dermed i datalaget på applikasjonen. De representerer hver og en tabell i databasen, men skiller seg ved at de kan beskrive mange til mange, mange til en og en til mange forhold internt i klassen. Dermed er det ikke behov for egne klasser for assosiasjons tabellene som finnes i databasen. Session: En sesjon fungerer som en mellomlagring av objekter som er relatert til en mengde av enheter ( ) Session Factory: En tråd sikker versjon av en sesjon. Det vil si at sesjonen innebærer en for låsing som gjør at transaksjonen kan fungere med som flere tråder. Transaction: En eller flere jobber(legge til, slette, oppdatere) som skal utføres, samlet i en enhet. Tilhører en sesjon. Arbeidet som gjøres innenfor en transaksjon er atomisk for databasen. Dette betyr at databasen vil behandle innholdet i en transaksjon som en samlet enhet under lesing og skriving. Commit: Markerer enden av en transaksjon, og gjør den klar for synkronisering mot databasen. Når dataene skrives finnes det ikke noen garanti for, men data som blir lest eller lagt til etterpå vil få med endringer gjort etter commit. Forløpet mellom Commit og lagring kan altså betraktes som asynkront, styrt av interne ressursstyringsprosedyrer i Hibernate. Allikevel kan dette påvirkes ved å benytte metoden Session.flush() for å tvinge gjennom lagring av alle ventende persistente objekter. Rollback: Rollback() resetter en transaksjon(transaction) eller en tilkobling(connection) til en tidligere tilstand. Dette vil føre til at alt som er gjort mellom forrige og siste Commit blir tilbakestilt til den opprinnelige tilstanden. Unntaket er tellervariable og andre variable som man er avhengig av at er unike, og derfor må regenereres. Benyttes gjerne slik at en rollback automatisk utføres når det oppstår en feil i kjøringen. Caching/Second level cache: Benyttes for å minske belastningen på databasen ved å lagre data en periode etter lesing i minnet. På denne måten vil ikke påfølgende leseoperasjoner kontakte databasen. First level cache er alltid på. Second level cache skrus av i vårt tilfelle grunnet fare for data konflikter. 21

22 INTRODUKSJON TIL QUARTZ Ett job scheduling rammeverk med funksjoner for tidsbasert styring på objektnivå. Fungerer ved at man kan sette opp en scheduler(benytter seg av Quartz Frameworket) som utfører en aktuell oppgave. Rammeverk kan kjøre kode(java klasser) i flere runder, med en timer funksjon som kan angi tidsintervall for jobb kjøring. Quartz kan brukes med både J2EE og J2SE. 22

23 3.1.3 BESKRIVELSE AV TESTENS KOMPONENTER Den delen av rammeverket som setter i gang hele prosessen starte automatisk på et tidspunkt og gjentar et visst antall ganger. Startes av tidtaker, og fungerer som en kontroller for batchjobben som utføres. Disse to objektene inneholder forretningslogikk og nødvendig funksjonalitet til å kunne utføre denne på en sikker måte. Persistering av objekter til og fra databasen har som formål å representere en eller flere tabeller i en database med javaobjekter. De skal kunne instatieres slik at de representerer en rad i en tabell, og eventuelle referanser til rader i andre tabeller. FIGUR

24 3.2 TESTSCENARIO BESKRIVELSE AV KOMPONENTER OG FUNKSJONALITET For å forsøke å estimere de funksjonelle kravene systemet til applikasjonen så har oppdragsgiver gitt oss forslag til en prosedyre og et scenario den skal utføres på. Hensikten med scenarioet er å ha et statisk miljø som applikasjonen kjører i under test, som lar oss benytte et fast sett med komponenter som for eksempel databasen med sine tabeller, drivere, og java bibliotek. Ved at vi begge har benyttet samme image med en virtuell maskin for utviklingen og testingen sikrer vi at de praktiske fysiske parametrene i scenarioet er finnes og er statiske. Den andre delen av scenarioet er hva systemet skal gjøre. Dette har vi forsøkt å konkretisere på følgende måte Det skal utføres en del enkelt handlinger, heretter kalt skritt.. Handlingene skal startes av et tidsur og eventuelt gjentas med konfigurerbare intervaller/tider. Skrittene skal benytte persistente objekter for å lese og skrive til en underliggende database. Hvert skritt skal opptre som planlagt, eller melde fra om feil til systemet. Feil skal loggføres. Endringer i resultatet (feiltilstand), skal i forhold til forventet resultat (normaltilstand) skal være synlige og sporbare med feilmelding og loggføring som viser hvor, når og hvorfor systemet feilet. Endringer gjort mot databasen som er gjort når systemet har vært, eller har havnet i en feiltilstand skal tas vekk med en såkalt rollback, Denne fjerningen skal kun ta vekk endringer i databasen utført under feiltilstanden, og ikke påvirke arbeidet som like før er utført i normaltilstand I tilfelle feilen skulle være forbigående skal det være mulig, om ønskelig, å forsøke på nytt et spesifisert antall ganger de skritt som har vært utført under feiltilstand. Dette må loggføres. Vi har implementert sekvensen ovenfor på følgende måte: Det lages 1000 student objekter i en midlertidig metode kalt test() som ligger i klassen Batchsystem. Disse gis fornavn og etternavn allerede her, før de settes inn i køen for inngående arbeidselementer. Når alle de 1000 objektene er lagt inn i køen så iverksettes partisjonering. Her har vi valgt å forenkle utførelsen ved å la elementpartisjonen strekke seg over alle elementene som står i køen. Arbeidet som skal gjøres settes så i gang av batchsystemet. Det gjøres ved å instruere Elementpartisjonen om å utføre metoden IWork.doWork() i klassen InputWork som implementerer som så gjør kall på dowork i klassen OutputWork. Begge disse klassene skal implementere IWork interfacet, og må ligge i den underliggende pakken com.accenture.course.batch.job, i denne rekkefølgen, på hvert enkelt element. Vi deler inn scenarioet i to deler. 1. Utgående arbeid. Legger til studenter og lærere i databasen, for så å tilegne kurs for både studenter og lærere 2. Inngående arbeid: Vi finner ut hvem en spesifikk students lærer er. Databasemodell: 24

25 FIGUR 3 2 DATABASEMODELL OVER SYSTEMET Forklaring til aktuelle tabeller i databasen: T_COURSE inneholder kurs med tilhørende lærere T_STUDENT_COURSE inneholder hvilke studenter som tilhører ett kurs og da også hvilke kurs som tilhører en student. T_STUDENT inneholder studenter T_LECTURER inneholder lærere Start Avslutter med feil Arbeids klasse (IWork) save entity to db [ja] Prøve igjen? Database Objekt persist entity feil? (Exception e) [ja] Avslutter ved å returnere den lagrede entiteten kast (Exception e) [nei] transaksjon aktiv? [ja] rull tilbake feil? (Exception he) log the last exception 25

26 Helt enkelt kan det ut i fra databasemodellen sees at det både er lærere og studenter tilknyttet kurs tabellen. Følgende domeneobjekter er benyttet: Studenter(StudentDO) Kurs(CourseDO) Lærere(LecturerDO) 26

27 4 SYSTEMBESKRIVELSE OG RESULTAT AV IMPLEMENTASJON 4.1 ENKEL BATCH PROSESSERING MED BRUK AV HIBERNATE For å bli kjent med Hibernate s funksjonalitet, begynner vi med å lage en helt enkel transaksjon. Systemet vi jobber med inneholder flere persistente klasser som kommuniserer med systemets database. En type logikk som er implementert i disse klassene legger til en ny student i databasen, som vi nå tar i bruk i utviklingens første fase. <ref. hibernate grafisk> Vi begynte med en enkel kode som legger til en student, med navn og fornavn til databasen gjennom persistente Hibernate objekter. Dette er en grei måte å bli kjent med transaksjonskjøring, da det på forhånd er lagt inn persistente objekter med logikk for å kunne legge til en ny student til databasen. Før vi går igjennom eksempelet er det viktig å være klar over at database transaksjoner alltid er atomiske. Det vil si at en transaksjon kan ha kun to utfall, Enten blir den vellykket og lagres med en commit, ellers blir den mislykket og rullet tilbake. Noe som vises ved figuren: FIGUR 4 1 MULIGE UTFALL FOR EN DATABASE TRANSAKSJON 27

28 S LIK FOREKOMMER PROSESSEN I JAVA: S ESSION SESJON1 = HIBERNATEU TIL. GETSESSION(); T RANSACTION TRANSAKSJON = NULL; TRY { TRANSAKSJON = SESJION1.BEGINT RANSACTION(); S TUDENT STUDENT = NEW STUDENT(); STUDENT. SETF ORNAVN("JOHN"); STUDENT. SETE TTERNAVN("DOE"); SESJON1.SAVE( STUDENTDO); TRANSAKSJON. COMMIT(); } For å utføre en transaksjon trenger vi å opprette en sesjon. Deretter prøver vi å tilegne sesjonen med en tilhørende transaksjon. Hibernate er nå gjort klar for å begynne å jobbe på en enhet. Når en transaksjon er opptrettet prøver vi å opprette ett student objekt fra den implementerte logikken, der vi også setter verdier for navn og etternavn for aktuell student. Vi gjør den nye enheten(studenten) persistent ved å lagre student objektet til sesjonen. Deretter lagres det persistente objektet(student) i databasen med funksjonen commit. CATCH (EXCEPTION E) { IF (TX!= NULL) { TRY { TX. ROLLBACK(); } CATCH (HIBERNATEEXCEPTION HE) { THROW HE; } } THROW E; Hvis det forekommer feil/korrupt data under transaksjonen, vil systemet prøve å rulle tilbake alle transaksjoner som er gjennomført. Det vil si at ingen av operasjonene under denne sesjonen vil bli lagret: Hvis det oppstår en feil når transaksjonen skal rulles til bake blir feilen sendt til den kallende klassen. 28

29 FINALLY { TRY { SESJON1.CLOSE(); } CATCH(HIBERNATEE XCEPTION HE) { THROW HE; } } Uansett om transaksjonen var vellykket eller ikke vil sesjonen så prøve å lukkes. Hvis en feil oppstår ved lukking av sesjonen vil feilen bli sendt til den kallende klassen. Denne koden definerer grunnprinsippet for transaksjoner ved bruk av Hibernate. Tegningen under viser forholdet mellom sesjon og transaksjon i dette eksempelet. FIGUR 4 2 SESJON VS TRANSAKSJON Flere operasjoner i samme sesjon: Nå skal vi lage en funksjon som fungerer mer som en realistisk batch jobb da vi skal gjøre flere operasjoner. Vi kan ønske å legge til 5 studenter, noe som vil kreve like mange transaksjoner. Det vil si at vi har en batch størrelse på 5 da det er ingen hensikt å ha flere sesjoner.. Sesjonen opprettes, så lager vi en løkke som kjører try, catch og finally blokkene(fra forrige eksempel) 5 runder før sesjonen igjen lukkes. Forholdet mellom Sesjon og Transaksjoner(legge til student) er da som følger: FIGUR 4 3 FLERE TRANSAKSJONER I EN SESJON Tegnforklaring: C = Commit, T = Transaksjon, R = Rollback, J = Jobb start 29

30 4.2 IMPLEMENTERING AV QUARTZ BAKGRUNN Vi ønsker å kunne kjøre transaksjonene til fastsatte tidspunkt med eventuelle faste intervaller, og her kommer Quartz inn i bildet. Quartz er en planlegger som fungerer som en timeplan for når aktuell data skal bli kjørt. Hvis vi for eksempel har ett batchsystem som skal foreta automatisk lagring av sikkerhetskopiering av ett system. Vi kan da ønske at en sikkerhetskopi skal foretas fra kl på natten på hverdager, og fra kl ved helgedager slik at rutinen blir utført når det er minst sannsynlig at det er stor trafikk på systemet. En slik planlegging kaller vi skedulering( 2.1.3) INITIERING Quartz setter i gang system akkurat som en vekkeklokke som sier at nå er det på tide å jobbe. For at Quartz skal forstå hva som skal startes må det initieres. Det er hensiktsmessig å lage ett separat prosjekt i Java for Quartz, da det i vårt tilfelle er Batch logikk som skal startes. Batch logikken er som tidligere nevnt separert fra Quartz. Grunne til at vi separerer logikken er av den grunn at man kan ved enkelhet bytte ut Quartz eller Batch logikken hvis det er ønskelig. Dette vil gjøre løsningen vår fleksibel i forhold til gjenbruk av logikk for fremtidlige prosjekter. Vi begynner med å initiere ett Jobb Detail (heretter kalt Job Detail ) objekt som består av navn på jobben, eventuelt navn på jobbens gruppe(valgfritt) og til slutt bestemmer vi hvilken klasse som Quartz skal starte. I vårt tilfelle inneholder klassen batchsystem.class logikken vi ønsker å starte. Vi trenger nå en bryter som vi initierer til å skru seg på når vi ønsker at Batch logikken skal utføres. Dette gjøres at vi oppretter ett bryter(heretter kalt Trigger) objekt som vi initierer ved å gi det ett navn, samt en tid/tidsintervall for kjøring. Vi kan benytte oss av en Cron Bryter(Crontrigger) eller en Enkel Bryter(Simpletrigger). Beskrivelse og innstillinger for disse bryterne går vi igjennom under her i kapittel og Det som nå gjenstår er å opprette ett Sceduler objekt fra Quartz systemet som vi initierer med Job Detail og Trigger objektene. Scheduler objektet er en del av Quartz systemet, som starter en funksjon med navn execute som vi implementerer i den initierte klassen BatchSystem.class, i vårt tilfelle. FIGUR 4 4 SEKVENSDIAGRAM AV QUARTZ SYSTEMET C RON BRYTER En Cron bryter har meget avanserte muligheter for hvordan/når jobber skal startes. For å sette innstillinger for bryteren benytter man seg av Cron uttrykk. Cron utrykk er for noen mest kjent i sammenheng med skedulerings programmet Cron i operativsystemet Unix/Linux. Cron utrykk kan være vanskelig å forstå i begynnelsen, så vi vil her se noen eksempler for å gjøre uttrykkene klarere. 30

31 Eksempel: Vi kan se for oss 7 felter hvor det siste er valgfritt. Feltene er delt inn på denne måten: sekund, minutter, timer, dag i måneden, måned, dag i uken, år. Det kan settes opp intervaller eller enkel verdi. For eksempel: 0/5 i sekund feltet symboliserer at Quartz skal starte førstkommende hele sekund, og fortsette hvert 5te sekund. Ett annet eksempel: Vi ønsker å utføre jobben kl på den siste søndagen i månedene januar april. Utrykket vil bli seende slik ut: ( L 1 4 0L ). For å forstå bruk av tegn, og finne gode eksempler for å få en bedre forståelse er det en meget informativ side på: IMPLEMENTASJON AV ENKEL BRYTER I vårt tilfelle med aktuell oppgave ser vi kun hensikt i å bruke en Enkel brykter (heretter kalt Simpletrigger) da denne støtter den funksjonalitet vi ønsker. Men det er uansett viktig å være klar over en Cron Bryter siden den har en fleksibilitet som kan være anvendelig ved flere typer større Batch løsninger. Tid/tidspunkt som blir en bryter blir satt til er opprinnelig målt i millisekunder, Men ved å sette opp hjelpeklasser for beregning fra millisekunder til dager, timer, minutter og sekunder, gjør vi jobben enklere når vi ønsker å forandre innstillingene for en bryter. Vi begynner med å sette en starttid for når jobben skal begynne å kjøre, Vi finner ut dagens dato og tidspunkt med Java s innebygde funksjon Ctime og legger til hvor lang tid etter systemet er startet vi ønsker å utføre jobben. Deretter fastsetter vi hvor mange repetisjoner vi ønsker at jobben skal kjøres. Vi kan også sette ett intervall mellom hver kjøring, som også er beregnet i millisekunder. Til slutt kan vi fastsette ett tidspunkt for når vi ønsker at Quartz skal avslutte. Dette er mest hensiktsmessig hvis vi ikke har bestemt antall repetisjoner, eller vi ønsker en begrenset levetid for Quartz kjøringen. 31

32 4.3 IMPLEMENTERING AV BATCH SYSTEMET Ett funksjonelt og robust batchsystem krever en god struktur, og bør lages slik at det lett å gjøre endringer m.h.t. fremtidige situasjoner som kan oppstå, Dette er spesielt viktig når man snakker om batchsystemer programmert uten noen støtteprogramvare som J2EE, IBM WebSphere eller Jboss. Store deler av funksjonaliteten vil ikke være testet tidligere når man lager et system fra grunnen av, Utfordringen ligger i å kompensere for den tryggheten disse rammeverkene gir automatisk gir siden det er så utstrakt bruk av dem. Dets store brukermasse og den respons de gir på rammeverket er en meget god kvalitetsestimator, som man mister man når man skriver enkle Java objekter selv. Man kan tenke seg at enkelheten og oversiktligheten i koden til et Java program som er skreddersydd etter behov, kanskje vil kunne veie opp denne forskjellen. Det ble derfor bestemt følgende kriterier for systemets struktur og kode: Strukturen i prosjektet skal benytte en form for inndeling der databasen, persistering, batch logikk, og tidsstyring er uavhengige. Dette sikrer at det vil være lett å for eksempel skifte ut ett av komponentene hvis dette skulle bli nødvendig. Vi begynner med å implementere en struktur over batch systemet ved å opprette logiske klasser for inndeling av kode og dermed enklere holde orden på kildekoden. Siden vi benyttet Eclipse som utviklingsverktøy var det naturlig å dele inn i prosjekter i en flat struktur, siden det ikke er støtte for hierarkiske inndeling og arv i Eclipse. Vi benyttet Maven som er et avhengighets administrasjons verktøy til å definere avhengigheter mellom våre klasser, samt til eksterne klassebibiloteker som for eksempel Hibernate eller Quartz. Selv om Eclipse må ha flat prosjektinndeling, så kan man lage java pakkestruktur som er hierarkisk. I tabellen nedenfor kan man se prosjektnavnene og pakkefordelingen vi endte opp med, sammen med en kort beskrivelse av hva hver pakke gjør: Prosjekt navn i Eclipse Java pakke navn Inneholder studentproject batch quartz studentproject batch system course hibernatepersistence com.accenture.course.batch.quartz com.accenture.course.batch com.accenture.course.batch.job com.accenture.course.persistence com.accenture.course.persistence.hibernate com.accenture.course.persistence.hibernate.util Java kode for implementering av tidsstyring I form av Quartz. Konfigurasjonsfiler for logging og tidsstyring.. Hoveddelen av java koden til systemet. Konfigurasjonsfiler for logging. Java kode med forretningslogikken til aktuell jobb. Konfigurasjonsfiler for logging. Java interface for database objektene (DO) Implementasjon av persistering med interfacet ovenfor, der Database Objekter representerer f.eks studenter (StudentDO) v.hj.av Hibernate. Inneholder hjelpeklasse for å administrere Hibernates sesjoner, transaksjoner osv. Sikrer at disse brukes på en flertrådssikker (threadsafe) måte. course hibernate database com.accenture.course.persistence.database Inneholder databasen alene av sikkerhetshensyn. TABELL 4 1 OVERSIKT OVER FORHOLDET MELLOM ECLIPSE PROSJEKTER OG JAVA PAKKER KONTROLL AV BATCHSYSTEMET 32

33 Et batchsystem er meget avhengig av at rekkefølgen av hendelser foregår etter programmererens intensjon. Feiler dette så risikerer man alt ifra feil som kan oppdages (ved å fange opp Exceptions), til de mer skumle feilene, som ikke vises, som for eksempel regnefeil. Det er derfor veldig viktig at det er kun én klasse som dirigerer alt arbeidet som skal gjøres, og at dette utføres på en sekvensielt forutsigbarmåte. Vi har gjort dette ved å lage metoden run() i batchsystem, som igangsettes av execute(). execute er metoden Quartz kaller når den trigger igangsetting. Det har vært et poeng å lage selvforklarende navn på metoder, parametere og variable, siden dette letter forståelsen av hva som foregår. Det bør noteres at test() metoden ikke vil benyttes i en driftsituasjon. Den er der nå for å generere test data som vi kan benytte i batchen. I en reel driftsituasjon er det heller klassen InputWork som henter data fra en database, fil eller lignende, og legger disse inn i klassen jobcontainer sin InputQueue. JobContainer er for øvrig ment til å håndtere jobb spesifikke innstillinger og data, slik at samme batchsystem skal kunne lagre flere jobber, og så kjøre de samtidig eller uavhengig av hverandre. Det er derfor lagt vekt på å benytte køer av som implementerer BlockingQueue over alt i systemet etter som den er trådsikker, /** * Runs the batchjob (executes) Instantiates a job Work method from * batch.job.work This contains the business logic that is performed under * processing of the elements. Partition size given directly to maximum * (only 1 partition). */ public void run() { // Sets up a JobDefinition with work definition an partitionsize as // parameters setjob(new InputWork(), Integer.MAX_VALUE); // updates Job number updatejobno(); // Prints current job nr logger.info("!!!this is job number" BatchSystem.jobNo); // Runs test method to create input data to work on. test(); // Initiates batch partitioning while (true) { try { logger.info("input queue contains [" this.jobcontainer.inputqueue.size() "] elements"); ElementPartition ep = this.jobcontainer.packtopartition(); logger.info("created new partition for [ " ep.getqueue().size() " ] elements."); logger.info("will now begin processing elements in partition"); ep = this.jobcontainer.processpartition(ep); logger.info("processing finished, elements are now addedtooutputqueue"); this.jobcontainer.addtooutputqueue(ep); logger.info("elements in partition was added to output queue");... } if(this.jobcontainer.inputqueue.isempty()){ logger.info("no more elements in input queue!"); break; } } catch (Exception e) { logger.error("interrupted during execution", e); stop(1); // Stop execution 33

34 Implementering av persistens mot database Persistering av objekter til og fra databasen har som formål å representere en eller flere tabeller i en database med javaobjekter. De skal kunne instatieres slik at de representerer en rad i en tabell, og eventuelle refererte rader i andre tabeller. Den underliggende databasen skal være utilgjengelig for overliggende lag. Dette betyr at forretningslogikken og alle andre overliggende lag ser Java objekter med sine metoder, isteden for tabeller med kolonner og rader. Et objekt skal kunne håndtere en til mange,mange til mange og mange til en relasjoner mot andre persisterte objekter ved hjelp av samlinger som implementerer java.util.collection Objektene har kun en midlertidig levetid, da objektene skal sendes videre i systemet. Hvordan systemet skal reagere på feil i en transaksjon avgjøres her. Enkelte detaljer som konfigurering av kommunikasjonstrategi mot databasen gjøres også her. Siden oppgaven handler om batchsystemer og ikke persistens i detalj, så har vi etter forslag fra oppdragsgiver benyttet et allerede fungerende database oppsett med Hibernate som de allerede hadde. Det er hentet fra det utviklingsmiljøet (virtuell maskin) som vi har benyttet under hele utviklingen. HibernateUtilNoen av hjelpefunksjonene og de persisterbare domenedatabase objektene var laget, men metodene i disse var i stor grad ikke implementert på forhånd. Det har derfor også vært nødvendig med en del endringer i den delen som var implementert, som vi fikk fra oppdragsgiver KONFIGURASJON AV HIBERNATE For å persistere objekter benyttes Hibernate, men for at dette skal fungere i et batchsystem så må konfigurasjonen først endres. Hibernates dokumentasjon oppgir to kritiske innstillinger i sammenheng med batchsystemer. Man må skru av second level cache i Hibernate for å hindre database konflikter, og man må angi jdbc driverens batch størrelse. Sistnevnte påvirker hvor mange database operasjoner som Hibernate skal gi til JDBC av gangen. Dette gjøres i Hibernates konfigurasjonsfil, som i vårt tilfelle er hibernate.cfg.xml De oppgir at den ideelt bør ligge mellom 1 og 50 for å hindre at Java VM (Virtual Machine) skal gå tom for minne. Vi har valgt batch størrelse 20 som dere kan se nedenfor: I tillegg til disse innstillingene så viste det seg underveis i utviklingen at det var nødvendig med flere endringer enn de nevnt i Hibernates dokumentasjon. Disse er nevnt i sammenheng med de neste delkapitlene TILPASNINGER GJORT I HIBERNATEU TIL Siden vi ønsket at systemet i så stor grad som mulig skal kunne kjøres som et flertrådssystem, så var det nødvendig å sikre at vi kun har en sesjon, Hibernate.Session, av gangen. Flere sesjoner på samme tid ville kunne lede til database probemer som deadlock, race kondition eller stale (gammel)data. For å hindre feil lønner det seg å skru av konstruktøren ved å sette public class HibernateUtil { private HibernateUtil() { //avskrudd konstruktør }; For å sikre at det bare eksisterer en sesjon så implementerte vi ett Hibernate.SessionFactory statisk i Hibernate util. Legg merke til at bruken av static{ } som sikrer at det kun er et punkt man kan få et sessionfactory fra selv om man lager flere instanser av HibernateUtil. Keen ser slik ut: private static org.hibernate.sessionfactory sessionfactory; static { try { 34

35 } sessionfactory = new AnnotationConfiguration().configure().buildSessionFactory(); } catch (Throwable ex) { throw new ExceptionInInitializerError(ex); } Til slutt er det en viktig metode i denne klassen, getcurrentsession(). Denne metoden gir en sesjon fra sesjons kontekst. Hvis det ikke eksisterer noen sesjon der så lager den en ny, lagrer den i sesjons kontekst og returnerer den. Eksisterer det allerede en sesjon, så returneres denne. Dette gjør at man kan utføre flere transaksjoner i en sesjon. Denne metoden er avhengig av at følgende linje er lagt til i hibernate.cfg.xml filen: <property name="current_session_context_class">thread</property> H ÅNDTERING AV SESJONEN UNDER BATCH KJØRING Man kan kanskje tenke seg å kjøre i gang transaksjoner der man benytter en sesjon levert av getcurrentsession lagt metoden fra forrige avsnitt. Dette ville resultere i en java.io.outofmemoryerror etter et par hundre transaksjoner. Grunnet til dette er at Java Virtual Machines minne da ville være fylt opp med persistente objekter som venter på å bli inn i databasen. 35

36 F EILHÅNDTERING Hibernate s rollback funksjon vil kunne tilføre systemet funksjonalitet til å håndtere feil ved transaksjoner. En rollback har som oppgave å tilbakeføre alle databaseendringer som er gjort før siste commit. Det er ikke mulig å ta rollback mer enn 1 commit tilbake i tid. For å teste at dette fungerer må vi fremprovosere en feilsituasjon. En måte å provosere fram en feil på er å kaste en NullPointerException manuelt der vi ønsker at rollback skal utføres. På denne måten kan man altså simulere at en feil har inntruffet, og at det kastes en Exception slik det normalt skal gjøres ved denne typen feil. Arbeids klasse (IWork) Database Objekt Start save entity to db persist entity Avslutter ved å returnere den lagrede entiteten Avslutter med feil [ja] Prøve igjen? feil? (Exception e) [ja] kast (Exception e) [nei] transaksjon aktiv? [ja] rull tilbake feil? (Exception he) log the last exception FIGUR 4 5 FEILHÅNDTERINGSMEKANISME MED MULIGHET FOR NYTT FORSØK Systemet er lagt opp på en slik måte at det ved en feil i persistens laget vil kjøre rollback automatisk, loggføre feilen og kaste exception videre ut til den kallende arbeidsklassene. Disse kan da om ønskelig implementeres med funksjonalitet for automatisk nytt forsøk. Et aktivitetsdiagram for et slikt oppsett vises nedenfor. Legg merke til at også rollback kan feile og kaste en (Hibernate)Exception 36

- analyse og implementasjon

- analyse og implementasjon - analyse og implementasjon Hvem er vi? Vi heter Anders S Finnerud Dennis JMJ Lundh studerer til bachelorgraden i ingeniørfag for data ved Høgskolen i Oslo. Oppgaven Lage et lett system som kan utføre

Detaljer

En prosess kan sees på som et stykke arbeid som skal utføres på datamaskinen. Ofte vil det være flere prosesser/tråder på datamaskinen samtidig.

En prosess kan sees på som et stykke arbeid som skal utføres på datamaskinen. Ofte vil det være flere prosesser/tråder på datamaskinen samtidig. Synkronisering En prosess kan sees på som et stykke arbeid som skal utføres på datamaskinen. Ofte vil det være flere prosesser/tråder på datamaskinen samtidig. Behov for synkronisering Mange prosesser/tråder

Detaljer

GJENNOMGANG UKESOPPGAVER 9 TESTING

GJENNOMGANG UKESOPPGAVER 9 TESTING GJENNOMGANG UKESOPPGAVER 9 TESTING INF1050 V16 KRISTIN BRÆNDEN 1 A) Testing viser feil som du oppdager under kjøring av testen. Forklar hvorfor testing ikke kan vise at det ikke er flere gjenstående feil.

Detaljer

Concurrency. Lars Vidar Magnusson. September 20, Lars Vidar Magnusson () Forelesning i Operativsystemer September 20, / 17

Concurrency. Lars Vidar Magnusson. September 20, Lars Vidar Magnusson () Forelesning i Operativsystemer September 20, / 17 Concurrency Lars Vidar Magnusson September 20, 2011 Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 20, 2011 1 / 17 Oversikt Concurrency 1 Concurrency Beskrivelse Prinsipper

Detaljer

2 TIMER BATCH JONAS OG TERJE

2 TIMER BATCH JONAS OG TERJE 14.01.09 09.00 ACCENTURE FBU Jonas og Jonas og Jonas,, Dennis, 2 TIMER BATCH JONAS OG TERJE Møte om temaet Batch: Vi gikk raskt igjennom våre tanker om Batch og fikk tips om hva vi bør fortsette å lese

Detaljer

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Innledning Dette notatet beskriver noe av det som foregår i primærlageret når et Javaprogram utføres.

Detaljer

INF2270. Input / Output (I/O)

INF2270. Input / Output (I/O) INF2270 Input / Output (I/O) Hovedpunkter Innledning til Input / Output Ulike typer I/O I/O internt i datamaskinen I/O eksternt Omid Mirmotahari 3 Input / Output En datamaskin kommuniserer med omverdenen

Detaljer

J2EE. CMP Entity Beans, Transaksjoner, JSP

J2EE. CMP Entity Beans, Transaksjoner, JSP J2EE CMP Entity Beans, Transaksjoner, JSP CMP Entity Beans Container Managed Persistence Container sin oppgave å lagre innholdet i EJB til varig lager (typisk DB). Implementasjonsklassen lages abstrakt.

Detaljer

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først Køer Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først Et nytt element legges alltid til sist i køen Skal vi ta ut et element, tar vi alltid

Detaljer

! Ytelsen til I/O- systemer avhenger av flere faktorer: ! De to viktigste parametrene for ytelse til I/O er:

! Ytelsen til I/O- systemer avhenger av flere faktorer: ! De to viktigste parametrene for ytelse til I/O er: Dagens temaer! Ulike kategorier input/output! Programmert! Avbruddstyrt! med polling.! Direct Memory Access (DMA)! Asynkrone vs synkrone busser! Med! Fordi! -enheter menes de enheter og mekanismer som

Detaljer

Generelt om operativsystemer

Generelt om operativsystemer Generelt om operativsystemer Operativsystemet: Hva og hvorfor Styring av prosessorer (CPU), elektronikk, nettverk og andre ressurser i en datamaskin er komplisert, detaljert og vanskelig. Maskinvare og

Detaljer

Installere JBuilder Foundation i Mandrake Linux 10.0

Installere JBuilder Foundation i Mandrake Linux 10.0 Installere JBuilder Foundation i Mandrake Linux 10.0 Installasjon av JBuilder Foundation på Linux (dekker her spesifikt fremgangen ved bruk av Mandrake Linux 10.0, men distribusjon vil gjøre liten eller

Detaljer

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først Køer Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først Et nytt element legges alltid til sist i køen Skal vi ta ut et element, tar vi alltid

Detaljer

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004 Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004 Oppgave 1 RMI-tjenerobjekt (databasewrapper) A Sentral tjenermaskin med database, RMi-register og RMI-tjenerprogram vis kart gjør bestilling

Detaljer

Kapittel 13 Advanced Hypertext Implementation. Martin Lie Ole Kristian Heggøy

Kapittel 13 Advanced Hypertext Implementation. Martin Lie Ole Kristian Heggøy Kapittel 13 Advanced Hypertext Implementation Martin Lie Ole Kristian Heggøy 08.11.04 Forbedring av arkitektur Problem med alt i ett -løsning: Spredning av forretningslogikk. Avhengighet mellom presentasjonssider

Detaljer

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum 1 TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum 2 Læringsmål Mål Introduksjon til filer (som inndata og utdata) Å bruke

Detaljer

Generelt om operativsystemer

Generelt om operativsystemer Generelt om operativsystemer Hva er problemet? Styring av maskinvare og ressurser tilknyttet en datamaskin er komplisert, detaljert og vanskelig Maskinvare, komponenter og programvare endres og forbedres

Detaljer

Tilstandsmaskiner med UML og Java

Tilstandsmaskiner med UML og Java Tilstandsmaskiner med UML og Java DAT2160 DAT2160 Høst Høst 2002 2002 Tilstandsmaskiner Tilstandsmaskiner med med UML UML og og Java Java Hva er en (endelig) tilstandsmaskin? En tilstandsmaskin kan sees

Detaljer

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49 Innhold Forord...5 1 Det første programmet...15 1.1 Å kommunisere med en datamaskin 16 1.2 Programmeringsspråk 17 1.3 Et program som skriver på skjermen 18 1.4 Kompilering og kjøring 19 1.5 Kommentarer

Detaljer

Introduksjon til objektorientert programmering

Introduksjon til objektorientert programmering Introduksjon til objektorientert programmering Samt litt mer om strenger og variable INF1000, uke6 Ragnhild Kobro Runde Grunnkurs i objektorientert programmering Strategi: Splitt og hersk Metoder kan brukes

Detaljer

Scheduling og prosesshåndtering

Scheduling og prosesshåndtering Scheduling og prosesshåndtering Håndtering av prosesser i et OS OS må kontrollere og holde oversikt over alle prosessene som kjører på systemet samtidig Prosesshåndteringen må være: Korrekt Robust Feiltolerant

Detaljer

Operativsystemer og grensesnitt

Operativsystemer og grensesnitt Operativsystemer og grensesnitt Ulike måter å bruke OS'et på Application Program Interface (API) Applikasjoner (ofte C-programmer) som f.eks. emacs, som bruker tjenestene i OS ved å kalle på funksjoner

Detaljer

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først Køer Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først Et nytt element legges alltid til sist i køen Skal vi ta ut et element, tar vi alltid

Detaljer

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Dagens tema Lister og generiske klasser, del I Array-er og ArrayList (Big Java 6.1 & 6.8) Ulike lagringsformer (Collection) i Java (Big Java 15.1) Klasser med typeparametre («generiske klasser») (Big Java

Detaljer

INF2270. Input / Output (I/O)

INF2270. Input / Output (I/O) INF2270 Input / Output (I/O) Hovedpunkter Innledning til Input / Output Ulike typer I/O I/O internt i datamaskinen I/O eksternt Omid Mirmotahari 3 Input / Output En datamaskin kommuniserer med omverdenen

Detaljer

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python Professor Guttorm Sindre Institutt for datateknikk og informasjonsvitenskap Læringsmål og pensum Mål Vite hva et

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Side 1 Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Eksamensdag: Onsdag 4. juni 2014 Tid for eksamen: 9:00-15:00 Oppgavesettet er på

Detaljer

CORBA Component Model (CCM)

CORBA Component Model (CCM) CORBA Component Model (CCM) INF5040 Høst 2005 Erlend Birkedal Jan Erik Johnsen Tore Ottersen Løkkeberg Denne presentasjonen CORBA Svakheter ved CORBA Object Model Komponenter CORBA Component Model Hva

Detaljer

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU 1 Kunnskap for en bedre verden TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU 2 Læringsmål og pensum Mål Lære å bruke unntak (Exceptions)

Detaljer

Tor-Eirik Bakke Lunde torebl@stud.cs.uit.no

Tor-Eirik Bakke Lunde torebl@stud.cs.uit.no Obligatorisk oppgave 1 INF-3200 12. oktober 2003 Tor-Eirik Bakke Lunde torebl@stud.cs.uit.no Oppgavebeskrivelse: Designe og implementere en distribuert ray-tracing applikasjon, med basis i kontroller-

Detaljer

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk Innhold uke 7 Objektorientert programmering i Python: Introduksjon IN1000 Høst 2017 uke 7 Siri Moe Jensen Lite tilbakeblikk: Prosedyrer og funksjoner Objektorientert programmering Introduksjon: Hvorfor,

Detaljer

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Gaustadbekkdalen, januar 22 Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Innledning Dette notatet beskriver noe av det som foregår i primærlageret når

Detaljer

Tråder Repetisjon. 9. og 13. mai Tråder

Tråder Repetisjon. 9. og 13. mai Tråder Tråder Repetisjon 9. og 13. mai Tråder Hva er tråder? 2 Hva er tråder? I utgangspunktet uavhengige aktiviteter som konkurrerer om å få bruke prosessoren. 2 Hvorfor tråder? 3 Hvorfor tråder? Flere oppgaver

Detaljer

GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.

GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon. Hardware-støttet Semafor og Implementasjon av semafor i OS til å synkronisere Hardware-støttet alle softwareløsninger innebærer mange instruksjoner i tillegg til busy-waiting, som koster CPU-tid. I praksis

Detaljer

Videregående programmering 6

Videregående programmering 6 Videregående programmering 6 1. Feilkontroll i klasser uten unntaksobjekter Klasser skal lages sikre. Argumentverdier skal kontrolleres, og eventuelle feil skal rapporteres til klienten. I praksis har

Detaljer

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet TGA Et større programeksempel Hvordan løse et reelt problem med en objektorientert fremgangsmåte En større problemstilling I uke 4 skrev vi et program for å sjekke om et gen (en tekstfil) inneholdt ordet "TGA"

Detaljer

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU 1 Kunnskap for en bedre verden TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6 Terje Rydland - IDI/NTNU 2 Læringsmål og pensum Mål Lære bruk av inn- og ut-operasjoner

Detaljer

Generiske mekanismer i statisk typede programmeringsspråk

Generiske mekanismer i statisk typede programmeringsspråk Generiske mekanismer i statisk typede programmeringsspråk Dette stoffet er Pensum, og det er bare beskrevet her Mye her er nok kjent stoff for mange INF5110 7. mai 2013 Stein Krogdahl 1 Hvordan kunne skrive

Detaljer

Eksempler på ikke-blokkerende systemkall:

Eksempler på ikke-blokkerende systemkall: Blokkerende systemkall Thread-modeller Thread-modeller Blokkerende systemkall Viktigste grunn for tråder: blokkerende I/O forespørsler Applikasjonen som ber om I/O blir satt på vent av operativsystemet

Detaljer

Argumenter fra kommandolinjen

Argumenter fra kommandolinjen Argumenter fra kommandolinjen Denne veiledningen er laget for å vise hvordan man kan overføre argumenter fra kommandolinjen til et program. Hvordan transportere data fra en kommandolinje slik at dataene

Detaljer

PG4200 Algoritmer og datastrukturer Lab 1. 8.januar 2014. I dag skal vi undersøke en rekke velkjente databeholdere i Java:

PG4200 Algoritmer og datastrukturer Lab 1. 8.januar 2014. I dag skal vi undersøke en rekke velkjente databeholdere i Java: PG4200 Algoritmer og datastrukturer Lab 1 8.januar 2014 Innledning I dag skal vi undersøke en rekke velkjente databeholdere i Java: java.util.arraylist java.util.linkedlist java.util.hashset java.util.treeset

Detaljer

Konfigurasjonsstyring. INF1050: Gjennomgang, uke 11

Konfigurasjonsstyring. INF1050: Gjennomgang, uke 11 Konfigurasjonsstyring INF1050: Gjennomgang, uke 11 Kompetansemål Konfigurasjonsstyring Hva og hvorfor? I en smidig sammenheng Endringshåndtering Versjonhåndtering Systembygging Release -håndtering Del

Detaljer

Kapittel 8: Programutvikling

Kapittel 8: Programutvikling Kapittel 8: Programutvikling Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk

Detaljer

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3 Programmeringsspråket C Del 3 Kjell Åge Bringsrud E-mail: kjellb@ifi.uio.no Dynamisk allokering Ofte trenger man å opprette objekter under kjøringen i tillegg til variablene. Standardfunksjonen malloc

Detaljer

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14. IN1000-INF1001-2018 Informasjon Eksamen i IN1000 og IN1001 høsten 2018 Tid 30. november kl. 14.30 (4 timer) Faglærere vil besøke lokalet ca kl 15-16. Oppgavene Oppgave 1a-f er kortsvarsoppgaver som rettes

Detaljer

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3 Programmeringsspråket C Del 3 Michael Welzl E-mail: michawe@ifi.uio.no 8/25/10 inf1060 1 Dynamisk allokering Ofte trenger man å opprette objekter under kjøringen i tillegg til variablene. Standardfunksjonen

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 10.desember 2008 Varighet: 0900 1200 Fagnummer: Fagnavn: LO346D Java EE og distribuerte systemer Klasse(r): NETT

Detaljer

Funksjonalitet og oppbygning av et OS (og litt mer om Linux)

Funksjonalitet og oppbygning av et OS (og litt mer om Linux) Funksjonalitet og oppbygning av et OS (og litt mer om Linux) Hovedfunksjoner i et OS OS skal sørge for: Styring av maskinvaren Deling av maskinens ressurser Abstraksjon vekk fra detaljer om maskinvaren

Detaljer

Forprosjekt Hovedprosjekt ved Høgskolen i Oslo Våren 2008

Forprosjekt Hovedprosjekt ved Høgskolen i Oslo Våren 2008 Forprosjekt Hovedprosjekt ved Høgskolen i Oslo Våren 2008 Skrevet av Ole Myrbakken, Fadima Mohamoud, Orji Okoroafor, Karen Arrendondo Side 1 PRESENTASJON Prosjekt tittel: Prosjektperiode: MetaGen 7.jan

Detaljer

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3 Programmeringsspråket C Del 3 Michael Welzl E-mail: michawe@ifi.uio.no 29.08.13 inf1060 1 Dynamisk allokering Ofte trenger man å opprette objekter under kjøringen i tillegg til variablene. Standardfunksjonen

Detaljer

(MVC - Model, View, Control)

(MVC - Model, View, Control) INF1010 - våren 2008 Modell - Utsyn - Kontroll (MVC - Model, View, Control) Stein Gjessing Inst. for informatikk Et bankprogram Vi skal lage et program som håndterer kontoene i en bank. En konto eies av

Detaljer

4.1. Kravspesifikasjon

4.1. Kravspesifikasjon 4.1. Kravspesifikasjon Dette delkapittelet beskriver nærgående alle deler av systemet, hvordan det er tenkt ferdigutviklet med fokus på oppdragsgivers ønsker. 4.1.1. Innledning Informasjon om hvordan kravspesifikasjonens

Detaljer

Oppsummering. Thomas Lohne Aanes Thomas Amble

Oppsummering. Thomas Lohne Aanes Thomas Amble Oppsummering Thomas Lohne Aanes Thomas Amble 14.11.04 Kapittel 2: Data Modell Mål: Data som skal brukes av applikasjonen blir spesifisert på en formell og likevel intuitiv måte. Resultat: Vi får et konseptuelt

Detaljer

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3 Programmeringsspråket C Del 3 Kjell Åge Bringsrud E-mail: kjellb@ifi.uio.no 9/1/2005 inf1060 V05 1 Dynamisk allokering Ofte trenger man å opprette objekter under kjøringen i tillegg til variablene. Standardfunksjonen

Detaljer

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre Dagens tema Lister og generiske klasser, del I Array-er og ArrayList (Big Java 6.1 & 6.8) Ulike lagringsformer (Collection) i Java (Big Java 15.1) Klasser med typeparametre («generiske klasser») (Big Java

Detaljer

Kravspesifikasjon. Aker Surveillance. Gruppe 26 Hovedprosjekt ved Høgskolen i Oslo og Akershus. Oslo,

Kravspesifikasjon. Aker Surveillance. Gruppe 26 Hovedprosjekt ved Høgskolen i Oslo og Akershus. Oslo, Kravspesifikasjon Aker Surveillance Gruppe 26 Hovedprosjekt ved Høgskolen i Oslo og Akershus Oslo, 12.01.2013 Public 2013 Aker Solutions Page 1 of 7 Table of Contents Forord... 3 Om bakgrunnen... 3 Presentasjon...

Detaljer

Innhold. Introduksjon til parallelle datamaskiner. Ulike typer parallelle arkitekturer. Prinsipper for synkronisering av felles hukommelse

Innhold. Introduksjon til parallelle datamaskiner. Ulike typer parallelle arkitekturer. Prinsipper for synkronisering av felles hukommelse Innhold Introduksjon til parallelle datamaskiner. Ulike typer parallelle arkitekturer Prinsipper for synkronisering av felles hukommelse Multiprosessorer koblet sammen av én buss 02.05 2001 Parallelle

Detaljer

Testrapport. Aker Surveillance. Gruppe 26. Hovedprosjekt ved Høgskolen i Oslo og Akershus. Oslo, 24.5.2013. Public 2013 Aker Solutions Page 1 of 5

Testrapport. Aker Surveillance. Gruppe 26. Hovedprosjekt ved Høgskolen i Oslo og Akershus. Oslo, 24.5.2013. Public 2013 Aker Solutions Page 1 of 5 Testrapport Aker Surveillance Gruppe 26 Hovedprosjekt ved Høgskolen i Oslo og Akershus Oslo, 24.5.2013 Public 2013 Aker Solutions Page 1 of 5 Innledning I denne rapporten vil vi skrive om testingen som

Detaljer

1. Rullende navn, s 3 2. Smilefjes, s 5 3. Skritteller, s 7 4. Orakel, s 9 5. Stein, saks og papir, s Kompass, s 14

1. Rullende navn, s 3 2. Smilefjes, s 5 3. Skritteller, s 7 4. Orakel, s 9 5. Stein, saks og papir, s Kompass, s 14 Kom i gang med 2 I dette heftet skal vi gjøre oss kjent med micro:bit og lære å programmere med blokk-kode. Heftet inneholder seks ulike prosjektoppgaver med differensiert innhold og tema. 1. Rullende

Detaljer

INF1010 Tråder II 6. april 2016

INF1010 Tråder II 6. april 2016 INF1010 Tråder II 6. april 2016 Stein Gjessing Universitetet i Oslo 1 Tråder i Java tråden minrunp class MinRun implements Runable { MinRun(... ) {... } public void run( ) {...... } } //end

Detaljer

Algoritmer og datastrukturer A.1 BitInputStream

Algoritmer og datastrukturer A.1 BitInputStream Vedlegg A.1 BitInputStream Side 1 av 8 Algoritmer og datastrukturer A.1 BitInputStream A.1 BitInputStream A.1.1 Instansiering BitInputStream har fire konstruktører og to konstruksjonsmetoder (eng: factory

Detaljer

Etter uke 6 skal du. Introduksjon til objektorientert programmering. Hva skjedde ~1967? INF1001. Grunnkurs i objektorientert programmering

Etter uke 6 skal du. Introduksjon til objektorientert programmering. Hva skjedde ~1967? INF1001. Grunnkurs i objektorientert programmering Etter uke 6 skal du Kjenne til motivasjonen for objektorientert programmering Introduksjon til objektorientert programmering INF1001 Høst 2016 Forstå hva en klasse er, og forskjellen på klasse og objekt

Detaljer

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre Python: Intro til funksjoner TDT4110 IT Grunnkurs Professor Guttorm Sindre Snart referansegruppemøte Viktig mulighet for å gi tilbakemelding på emnet Pensumbøker Forelesninger Øvingsforelesninger Veiledning

Detaljer

Jobbkø. Innhold. Versjon 1.0 Copyright Aditro Side 1 av 18

Jobbkø. Innhold. Versjon 1.0 Copyright Aditro Side 1 av 18 Innhold Jobbkø / Varsling... 2 Jobbkø... 2 Generelt om jobbkø... 2 Hovedfunksjoner... 2 Jobbkø Bestilling og Status... 2 Bestilling... 3 Faste jobber... 5 Status... 6 Jobb... 7 Administrasjon... 8 Konsern...

Detaljer

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Dagens tema Litt mer om vanlige lister Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Nyttige varianter av lister: Stabler («stacks») (Big Java 15.5.1) Køer («queues») (Big Java 15.5.2)

Detaljer

Tilkobling og Triggere

Tilkobling og Triggere Tilkobling og Triggere Lars Vidar Magnusson October 12, 2011 Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 1 / 25 Tilkobling med PHP PHP bruker databasespesifike moduler til å koble

Detaljer

INF1000: Forelesning 7

INF1000: Forelesning 7 INF1000: Forelesning 7 Klasser og objekter del 2 Konstruktører Static UML REPETISJON 2 Repetisjon Repetisjon forts. Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en

Detaljer

Læringsmål for forelesningen

Læringsmål for forelesningen Læringsmål for forelesningen Objektorientering Håndtering av unntak (eng: exceptions) Java-programmering Håndtering av unntak Exception-objekter og klasser try, catch og finally throw og throws Eclipse

Detaljer

Litt mer om Arduino. Roger Antonsen Sten Solli INF1510 31. januar 2011

Litt mer om Arduino. Roger Antonsen Sten Solli INF1510 31. januar 2011 Litt mer om Arduino Roger Antonsen Sten Solli INF1510 31. januar 2011 ARDUINO Input (Data) Prosessering Output Arduino Man kan bruke de 3 elementene i varierende grad, og også kutte noen helt ut. Det finnes

Detaljer

8. FILOVERFØRING. 8. Filoverføring

8. FILOVERFØRING. 8. Filoverføring 8. FILOVERFØRING 8. Filoverføring 8 BRUKERHÅNDBOK NETTBANK BEDRIFT LANDKREDITT 8.1 Send filer Funksjonen brukes for å sende filer fra regnskaps-/lønnssystemet til Nettbank Bedrift. Når du trykker på Send

Detaljer

Tråder Repetisjon. 9. og 13. mai Tråder

Tråder Repetisjon. 9. og 13. mai Tråder Tråder Repetisjon 9. og 13. mai Tråder Hva er tråder? 2 Hva er tråder? I utgangspunktet uavhengige aktiviteter som konkurrerer om å få bruke prosessoren. 2 Hvorfor tråder? 3 Hvorfor tråder? Flere oppgaver

Detaljer

Http- og WebServices funksjoner

Http- og WebServices funksjoner Http- og WebServices funksjoner Side 1 Innholdsfortegnelse Innholdsfortegnelse Introduksjon Hvordan bruke HTTP(S) POST/GET funksjonene i TakeCargo Sende meldinger Motta meldinger (get) Oversikt over WebServices

Detaljer

Fullstendig ytelsesbehandling

Fullstendig ytelsesbehandling Fullstendig ytelsesbehandling Fungerer også med Windows XP og Windows Vista 2013 Oppgrader og ta ansvar for datamaskinens ytelse med et kraftig og raskt program. Nedlasting og installasjon av Powersuite

Detaljer

Feilmeldinger, brukerinput og kontrollflyt

Feilmeldinger, brukerinput og kontrollflyt Feilmeldinger, brukerinput og kontrollflyt Skjønne hvordan et program presist utføres og forberede seg på håndtering av feil INF1000, uke2 Ragnhild Kobro Runde Programmeringskrøll Programmet vil ikke kjøre

Detaljer

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb Lenkelister, iteratorer, indre klasser Repetisjonskurs våren 2018 kristijb Lenket liste av objekter Vi lager en lenke ved at objekter refererer til hverandre. Vanlige er ofte å ha Node-objekter som har

Detaljer

Metoder med parametre, løkker og arrayer

Metoder med parametre, løkker og arrayer Metoder med parametre, løkker og arrayer Løse problemer med programmering INF1000, uke3 Ragnhild Kobro Runde METODER MED PARAMETRE Statiske void-metoder med parametre Den typen metoder vi så på forrige

Detaljer

Kapittel 5 - Advanced Hypertext Model Kapittel 6 - Overview of the WebML Development Process

Kapittel 5 - Advanced Hypertext Model Kapittel 6 - Overview of the WebML Development Process INF 329 Web-teknologier Kapittel 5 - Advanced Hypertext Model Kapittel 6 - Overview of the WebML Development Process Navn: Bjørnar Pettersen bjornarp.ii.uib.no Daniel Lundekvam daniell.ii.uib.no Presentasjonsdato:

Detaljer

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre Python: Løkker TDT4110 IT Grunnkurs Professor Guttorm Sindre Denne uka Vi trenger å Støttes av Hente data fra bruker Vise data til bruker Lagre data i minnet for bruk videre i programmet Fra tastatur:

Detaljer

Lars Vidar Magnusson. October 11, Lars Vidar Magnusson () Forelesning i Operativsystemer October 11, / 28

Lars Vidar Magnusson. October 11, Lars Vidar Magnusson () Forelesning i Operativsystemer October 11, / 28 Tråder Lars Vidar Magnusson October 11, 2011 Lars Vidar Magnusson () Forelesning i Operativsystemer 09.09.2011 October 11, 2011 1 / 28 Oversikt Tråder 1 Tråder Introduksjon Multithreading Prosesser og

Detaljer

INF1000: Forelesning 7. Konstruktører Static

INF1000: Forelesning 7. Konstruktører Static INF1000: Forelesning 7 Klasser og objekter del 2 Konstruktører Static UML REPETISJON 2 Repetisjon Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en bestemt type. Objekter

Detaljer

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000 Objektorientert programmering i Python: Introduksjon IN1000 Høst 2019 uke 7 Siri Moe Jensen Læringsmål uke 7 Kjenne til motivasjon og bakgrunn for objektorientert programmering Kunne definere en klasse,

Detaljer

Jentetreff INF1000 Debugging i Java

Jentetreff INF1000 Debugging i Java Jentetreff INF1000 Debugging i Java Ingrid Grønlie Guren ingridgg@student.matnat.uio.no 11. november 2013 Kort om feilmeldinger i Java Java har to ulike type feilmeldinger som man kan få når man skriver

Detaljer

AlgDat 10. Forelesning 2. Gunnar Misund

AlgDat 10. Forelesning 2. Gunnar Misund AlgDat 10 Forelesning 2 Oversikt Java repetisjon IDE eller teksteditor + kommandolinje? Java Collections and Generics Programvareutvikling En mengde mer eller mindre veldefinerte metoder (software engineering):

Detaljer

Drosjesentralen. I-120: Obligatorisk oppgave 2, 2000

Drosjesentralen. I-120: Obligatorisk oppgave 2, 2000 Drosjesentralen I-120: Obligatorisk oppgave 2, 2000 Frist Mandag 20. November 2000 kl.10:00, i skuff merket I120 på UA. Krav Se seksjon 4 for kravene til innlevering. Merk krav om generisk løsning for

Detaljer

Informasjon Prøveeksamen i IN1000 høsten 2018

Informasjon Prøveeksamen i IN1000 høsten 2018 Prøveeksamen IN1000-INF1001-H18 Informasjon Prøveeksamen i IN1000 høsten 2018 Tid Fra tirsdag 6.11 kl. 14:15 til tirsdag 13.11 kl. 12:00 (Normal eksamenstid er 4 timer) Oppgavene Oppgave 2b og 2c er flervalgsoppgaver.

Detaljer

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet INF2810: Funksjonell Programmering Køer, tabeller, og (litt om) parallelitet Stephan Oepen & Erik Velldal Universitetet i Oslo 5. april 2013 Tema 2 Siste gang Kort om underveisevaluering Destruktive listeoperasjoner

Detaljer

Installere JBuilder Foundation i Windows XP

Installere JBuilder Foundation i Windows XP Installere JBuilder Foundation i Windows XP Installasjon av JBuilder Foundation på Windows (dekker her spesifikt fremgangen ved bruk av Microsoft Windows XP Professional, men det vil mest trolig ikke være

Detaljer

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop Læringsmål uke 7 Objektorientert programmering i Python: Introduksjon IN1000 Høst 2018 uke 7 Siri Moe Jensen Kjenne til motivasjon og bakgrunn for objektorientert programmering Kunne definere en klasse,

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Kandidatnr Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Onsdag 1. desember 2010 Tid for eksamen: 14.00 18.00

Detaljer

KTN1 - Design av forbindelsesorientert protokoll

KTN1 - Design av forbindelsesorientert protokoll KTN1 - Design av forbindelsesorientert protokoll Beskrivelse av A1 A1 skal tilby en pålitelig, forbindelsesorientert tjeneste over en upålitelig, forbindelsesløs tjeneste A2. Det er flere ting A1 må implementere

Detaljer

Educatia AS. Programmeringsgrensesnitt (API) for brukersynkronisering. Versjon: 1.1 (19.10.2015) Educatia AS firmapost@educatia.

Educatia AS. Programmeringsgrensesnitt (API) for brukersynkronisering. Versjon: 1.1 (19.10.2015) Educatia AS firmapost@educatia. Educatia AS Programmeringsgrensesnitt (API) for brukersynkronisering Versjon: 1.1 (19.10.2015) Educatia AS firmapost@educatia.no Side 1 av 9 Introduksjon Dette dokumentet beskriver hvordan Educatias programmeringsgrensesnitt

Detaljer

Hvorfor objektorientert programmering?

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon IN1000 Høst 2019 uke 7 Siri Moe Jensen Læringsmål uke 7 Kjenne til motivasjon og bakgrunn for objektorientert programmering Kunne definere en klasse,

Detaljer

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Dagens tema Litt mer om vanlige lister Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Nyttige varianter av lister: Stabler («stacks») (Big Java 15.5.1) Køer («queues») (Big Java 15.5.2)

Detaljer

Community Administrator

Community Administrator eroom veiledning Community Administrator eroom Community Administrator (CA) i Statens vegvesen. Statens vegvesen Sist revidert mars 2013 Innholdsfortegnelse 1. Community Administrator (CA) rollen...3 1.1.

Detaljer

STE6221 Sanntidssystemer Løsningsforslag

STE6221 Sanntidssystemer Løsningsforslag HØGSKOLEN I NARVIK Avdeling for teknologi MSc.-studiet EL/RT Side 1 av 3 STE6221 Sanntidssystemer Løsningsforslag Tid: Fredag 02.03.2007, kl: 09:00-12:00 Tillatte hjelpemidler: Godkjent programmerbar kalkulator,

Detaljer

Fra Python til Java, del 2

Fra Python til Java, del 2 Fra Python til Java, del 2 Hvordan kjøre Java? På Ifis maskiner På egen maskin Et eksempel Array-er For-setninger Lesing og skriving Metoder Biblioteket Hva trenger vi egentlig? Å kjøre Java For å kunne

Detaljer

Løsnings forslag i java In115, Våren 1996

Løsnings forslag i java In115, Våren 1996 Løsnings forslag i java In115, Våren 1996 Oppgave 1a For å kunne kjøre Warshall-algoritmen, må man ha grafen på nabomatriseform, altså en boolsk matrise B, slik at B[i][j]=true hvis det går en kant fra

Detaljer

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet INF2810: Funksjonell Programmering Køer, tabeller, og (litt om) parallelitet Stephan Oepen & Erik Velldal Universitetet i Oslo 5. april 2013 Tema 2 Siste gang Kort om underveisevaluering Destruktive listeoperasjoner

Detaljer

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%]

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%] Bokmål Det Matematisk-naturvitenskapelege fakultet UNIVERSITETET I BERGEN Eksamen i emnet INF101/INF101F Programmering II Tirsdag 28. september 2010, kl. 09-12. Tillatte hjelpemidler: alle skrevne og trykte.

Detaljer

Brukerveiledning for ArkN4

Brukerveiledning for ArkN4 Brukerveiledning for ArkN4 Brukerveiledningen er delt inn i 3 deler: 1. Konfigurasjon av ArkN4 2. Kjøre ArkN4 3. Opprette ny database Eksemplene i dette kapitlet viser hvordan man velger de forskjellige

Detaljer