java.no - Forum
  Search   Recent Topics     Member Listing    Back to home page 
Register / 
Login 
Periodisk parsing med Java, med oppdatering av innhold på nettside. Beste løsning?  
Forum Index -> Generelt
Author Message
cedron

Nybegynner

Joined: 31.jan.2010
Messages: 2
Location: Trondheim
Offline

Har laget en XML parser for ett av metodekallene (de sist spilte sangene) til last.fm api-et, og vil gjerne vise frem de fem siste sangene spilt, i en nettside.

Strukturen er slik:

Code:
Track.class
- klasse som inneholder informasjon om spor x
Code:
RecentTracks.class
- klasse som holder en ArrayList av Tracks, samt noe tilleggsinformasjon

Code:
SaxParseRecentTracks.class
- klassen som parser XML-responsen fra web service-en til last.fm og lagrer informasjonen om hvert spor i ArrayList-en til RecentTracks

Code:
Execute
- main method-en som tar inn api-nøkkel og brukernavn (kan/skal sannsynligvis hardkodes...) og lager den ferdige url-en til web service-kallet, og som kaller SaxParseRecentTracks til å gjøre parsingen av responsen

Ved å iterere gjennom alle sporene holdt i RecentTracks objektet, tenkte jeg å bruke JSP til å få tak i dataene om hvert spor ved hjelp av de enkle getters som hvert spor har.

Spørsmålet er hvordan får jeg startet selve programmet som starter showet, Execute, og hvordan får jeg gjort dette periodevis på en fornuftig måte? Jeg tenker i baner av JSP, men vet ikke hvordan jeg skal gå fram...

(Det kan også tenkes at logikken min feiler helt her, og at dette må gjøres på en helt annen måte...)
stolsvik

Early adopter

Joined: 23.aug.2006
Messages: 34
Offline

JSP er jo typisk brukt for websider - og da "kjører" den jo i en Servlet Container (f.eks. Jetty eller Tomcat) - og JSPen kjøres hver gang en bruker klikker på den bestemte URL'en som JSP'en svarer på.

Du må altså stappe JSP'en din, og klassene dine, inni en Servlet Container, og så starte Servlet Containeren. Hvor de forskjellige tingene går må du nesten lese deg opp på, men i hovedsak er det slik at JSP'ene går "rett på rota" til webappen, mens klasser går inn i subdirectorier av den spesielle "WEB-INF" directoryen.

Hvis du koder dette "rett fram", hvilket jo er tilrådelig uansett i første omgang, så vil kallet til last.fm kjøres hver gang en bruker går på JSP'en din.

Det du nevner om "periodisk" kan jo virke som at du vil cache dette på din server, sånn at når brukeren kommer til din server, din JSP, så henter du bare opp dataene direkte fra egen server. Dette enten for å kunne svare raskere, eller for å ikke belaste last.fm med queries for hver gang du selv får en query. Begge disse er jo noble mål. Da har du flere løsninger, men hvis dette kun skal virke mens serveren din uansett er oppe, så ville jeg vel kanskje bare laget en tråd som gjorde denne forespørselen, lagret dataene en eller annen plass (typisk "old skool" tankegang her er i en static variabel i en klasse - og det funker forsåvidt fedt det, men er altså ikke helt stuerent ift. dagens tankegang), og så bare sleep'et i 5 minutt, og så loopa. En fornuftig forbedring her er jo å la være å gjøre det hvis det f.eks. er 30 minutt siden sist noen var innom - og da heller la JSP'en refreshe cachen selv når neste bruker kommer innom.

Men dette er temmelig avva ift. det du spør om. Jeg ville nok bare i første omgang laget det slik at når JSP'en kjører, så gjør den oppslaget til last.fm tvert der og da. Det kan godt være at dette er raskt nok, og det gjør løsningen MYE enklere.
cedron

Nybegynner

Joined: 31.jan.2010
Messages: 2
Location: Trondheim
Offline

Takk for svar!

Jeg har lastet ned Tomcat 6.x, og kodet starten på en nettside. Filendingen på nettsiden gjør jeg da om fra fra html til JSP, og de dynamiske dataene har jeg lest kan hentes via noe sånt:

Code:
 <jsp:useBean id="RecentTracks" scope="page" class="pakkenavn.RecentTracks" />
 


Og deretter:

Code:
 Det nyligste sporets navn er: <%= RecentTracks.getTracklist().get(0).getTrackName(); %>
 


Hvor getTracklist() er en public metode i RecentTracks.

Akkurat dette er ikke nødvendigvis vanskelig, men det å starte main metoden som er problemet. I grunn trenger jeg ikke Execute-klassen min, den samme koden kan bare være en metode i SaxParseRecentTracks. Spørsmålet blir da, hvordan kaller man en metode via JSP?

(Men ja, å la programmet kjøre på serveren for så å la det sove i x minutter, og ta dataene fra en static variabel skulle være mulig)
stolsvik

Early adopter

Joined: 23.aug.2006
Messages: 34
Offline

Main metoden er jo selve Servlet Containeren!

JSP'ene (egentlig Servlet'er) "lever inni" denne containeren.

Du kaller dem ved å gå på URL'en til JSPen eller Servleten i servlet containeren din.

Hvis den er på lokal maskin, så blir det vel noe ala

http://localhost:8080/<webappnavnet>/<jspnavnet>.jsp

Utover dette, så blir det for generelt å dra dette videre her. Det finnes MASSE info på google!

Har du spesifikke spørsmål, så fyr løs!

Happy hacking!

PS: Jeg vil egentlig anbefale Jetty. Tomcat er ett forbanna tung og stort åk, mens Jetty er nice'n'nimble. Før var det vanlig å utvikle på Jetty (siden den er så lett og ledig), og kjøre ting på Tomcat. Men nå er det mange som kjører på Jetty også - den har liksom blitt vel så bra som Tomcat, som har stagnert og blitt "bloated" (sist jeg jobba med det), bruker ett halvår på å starte etc - mens Jetty har forblitt kjapp som rakker.
markusk

Nybegynner


Joined: 25.jan.2006
Messages: 17
Offline

cedron wrote:
Spørsmålet blir da, hvordan kaller man en metode via JSP?

(Men ja, å la programmet kjøre på serveren for så å la det sove i x minutter, og ta dataene fra en static variabel skulle være mulig) 


Et greit alternativ er Quartz, et open source-bibliotek for scheduling. Du kan starte opp Quartz fra webapplikasjonen din via QuartzInitializerListener, som beskrevet i How-To: Initializing a scheduler within a servlet container.
 
  Forum Index -> Generelt
Go to:   
Powered by JForum 2.1.4 © 2005 - Rafael Steil