[java] 'klok' in een enterprise applicatie

Pagina: 1
Acties:

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Hoe kan het beste een klok in een enterprise applicatie worden aangesloten?

Ik ben op dit moment een veiling aan het ontwikkelen en het is de bedoeling dat de veiling op een bepaald tijdstip gaat starten (dit is niet zo`n probleem). Maar als de veiling loopt gaan bepaalde veilingstukken onder de hamer en de tijd dat een bepaald bod definitief is duurt een x aantal seconden (bv 60).

Nadat de ronde is afgelopen wordt alle rompslomp van verkoop afgewikkeld, wordt iedereen uit de veiling zaal geknikkerd, het volgende artikel opgehaald en mogen mensen de zaal weer betreden.

Mijn vraag is hoe ik het beste een klok in deze applicatie kan aansluiten. Ik heb op dit moment erg domme domein objecten en 'slimme' domein business objecten. Ik zat zelf te denken aan de TickerService die om de seconde wordt aangeroepen, en dan de beslissingen gaat nemen of een bod definitief is (dus een maal ander maal), of er een nieuwe artikel in de veilingzaal neergezet moet worden.. etc.

[edit]
Ik werk trouwens niet met EJB.

[ Voor 7% gewijzigd door Alarmnummer op 13-09-2004 10:38 ]


  • Janoz
  • Registratie: Oktober 2000
  • Nu online

Janoz

Moderator Devschuur®

!litemod

Het is een beetje zopnde om elke seconde maar vanalles uit te voeren (lijkt me). Voor een simulatie prakticum heb ik ooit eens gebruik gemaakt van chi. Hier was ook een bepaalde tijdafhankelijkheid, maar hier werd gewerkt met een eventlijst. Zodra een object iets over een bepaalde tijd hebben wilde registreede dit object die tijd in een queue. Het object dat di queue beheerde keek gewoon wat er het eerste kwam en voerde dat uit. Tijdens de simulatie hoefde die tijd niet overeen te komen met echte tijd, maar dat is natuurlijk redelijk simpel te implementeren.

In het kort: Je roept je 'TickerService' niet elke seconde aan, maar objecten die een bepaalde actie verwachten over tijd x registreren dat moment bij een service en krijgen een callback zodra dat moment aangebroken is. Het voordeel is dan dat je 'tickerservice' implementatie zelf geen buisness beslissingen hoeft te nemen en dus implementatie onafhankelijk kan werken.

Maar ja, dit is ook maar een id ;)

[ Voor 11% gewijzigd door Janoz op 13-09-2004 10:41 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Jouw chi library maakt ook intern gebruik van een bepaalde timer. Dus of ik het nu doet, of hij maakt niet uit. Verder heeft de TickerService zelf geen weet van hoe hij aangeroepen wordt. Als hij aangeroepen wordt zoekt hij uit in welke toestand het systeem is, bv: er was net nog 1 seconde te gaan voordat de koop definitief is. Hij trekt 1 van de tijd af. Ziet dat het laatste bod definitief is (als die er is), schopt iedereen de zaal uit en begint eventueel een nieuwe ronde of sluit zelfs het gebouw.

  • Janoz
  • Registratie: Oktober 2000
  • Nu online

Janoz

Moderator Devschuur®

!litemod

Die chi implementatie maakte geen gebruik van een timer omdat het in principe niet gelinkt was aan de tijd ;). Hij verhoogde de simulatie tijd gewoon naar de waarde die het eerst voorkwam in de lijst en voerde dan dat event uit. Waar ik meer op doelde was gewoon een lijst met calback aanvragen op een specifiek tijdstip. De 'tijd thread' slaapt gewoon tot het eerst volgende event. Zodra er een event bij komt wordt deze toegevoegd en gekeken of de slaaptijd aangepast moet worden.

Ik heb echter het id dat we over hetzelfde praten, maar dat ik al over het lullen ben over objecten die een callback kunnen ontvangen doordat ze een bepaalde interface implementeren. Dit is dan de methode die de tijd thread aanroept en op die manier hoeft de tijdthread alleen de events en de tijd bij te houden. Anders dan een bepaald stringetje of identifier oid weet de tijd thread helemaal niks over de daadwerkelijke actie (veiling zaal leegschoppen). Daarnaast zou je ook afhankelijkheden in kunnen bouwen. Event X moet iig voor event Y uitgevoerd worden (bod definitief maken(X) en veiling sluiten(Y)). Dat kun je allemaal in die queue opslaan.

[ Voor 41% gewijzigd door Janoz op 13-09-2004 10:52 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Janoz schreef op 13 september 2004 @ 10:50:
Die chi implementatie maakte geen gebruik van een timer omdat het in principe niet gelinkt was aan de tijd ;). Hij verhoogde de simulatie tijd gewoon naar de waarde die het eerst voorkwam in de lijst en voerde dan dat event uit. Waar ik meer op doelde was gewoon een lijst met calback aanvragen op een specifiek tijdstip. De 'tijd thread' slaapt gewoon tot het eerst volgende event. Zodra er een event bij komt wordt deze toegevoegd en gekeken of de slaaptijd aangepast moet worden.
Ik heb sowieso een 'nog te gaan tijd' nodig voor de clients. Die krijgen dit namelijk op hun scherm.

[edit]
Ik ben trouwens tegen het artikel Job Scheduling in Java aangelopen.

[ Voor 12% gewijzigd door Alarmnummer op 13-09-2004 11:04 ]


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Ik denk dat het Observer design pattern hier wel op zijn plaats is, al had je hier hoogstwaarschijnlijk wel reeds aan gedacht.

Verder zou ik de aanpak meer richten tot specifieke events ipv iedere nanoseconde een check te doen op de beschikbaarheid van "biedingen".

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
-FoX- schreef op 13 september 2004 @ 12:35:
Ik denk dat het Observer design pattern hier wel op zijn plaats is, al had je hier hoogstwaarschijnlijk wel reeds aan gedacht.

Verder zou ik de aanpak meer richten tot specifieke events ipv iedere nanoseconde een check te doen op de beschikbaarheid van "biedingen".
Lees mijn topic eerst eens goed door.

Verder zie ik de toegevoegde waarde van die layer of indirection niet (die je met een observer/observable voor elkaar kunt krijgen). En met alleen een event systeem kan je op het gebied van tijd niets. Daarvoor zul je toch een timer achtige functionaliteit moeten gebruiken.

En trouwens ook niets gezegd over nanoseconde.

[ Voor 32% gewijzigd door Alarmnummer op 13-09-2004 12:49 ]


  • Verbal Kint
  • Registratie: Januari 2001
  • Laatst online: 27-05-2025

Verbal Kint

The man with the plan

Ook DSOL is een java project wat zich richt op simulatie. Het bevat dus oa. een event implementatie. Ik weet dat deze software niet alleen voor "traditionele" simulaties wordt gebruikt, maar ook voor real time besturing. Dit betekend dus dat de echte klok (wallclock) en de simulatieklok met dit project kunnen worden gecombineerd. De eventcalendar kan volledig gedistribueerd gebruikt worden, wat een voorwaarde is als je met losse clients gaat werken.

Great minds think alike!


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Ik vraag me af in hoeverre je (simpel) kunt beschikken over een realtime klok? Kan dat uberhaupt? Is er niet een systeem functie die de clock uitleest en op gezette tijden een actie uitvoert? En de thread.sleep() wat doet die precies? Of wacht die een x aantal cycles, en niet zozeer millisecs?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
zneek schreef op 13 september 2004 @ 23:47:
Ik vraag me af in hoeverre je (simpel) kunt beschikken over een realtime klok? Kan dat uberhaupt? Is er niet een systeem functie die de clock uitleest en op gezette tijden een actie uitvoert? En de thread.sleep() wat doet die precies? Of wacht die een x aantal cycles, en niet zozeer millisecs?
Ten 1e maakt het niet uit of het nou exact een seconde is, of dat er een aantal nano seconden tussen zit. En verder zitten er sowieso wel in alle pc`s bepaalde chips waarmee je pulsen kunt ontvangen van een hele constante frequentie.
Pagina: 1