jini - javaspaces, transaktioner og mistede entrys.
Jeg er godt klar over at denne type spørgsmål for det meste ikke bliver besvaret men ville aligevel høre om nogen havde et forslag til en løsning eller måske ligefrem ekspertise i jini så her kommer det aligevel:Jeg har et irriterende problem med javaspaces. Jeg bruger blitz som implementation men det er også et problem med jini outrigger fra reference implementationen.
problemet og faktisk også en del af svaret er beskrevet her:
http://www.dancres.org/cottage/javaspaces.html#commonques (lyder det iøvrigt ikke som en design fejl?)
jeg har et job som bliver delt op i tasks, skrevet til spacet og samlet op af en worker. Worker laver en blocking take hvilket jeg kan forstå får det den efterspørger til at blive markeret som taget i en intern liste når sådan et entry dukker op.
Lukker jeg worker når den har gang i et blocking take, starter den igen, vil dette entry se ud som om det er væk.
Løsningen er så at sætte en lease time på en transaktion. det virker også fint, og det forsvundne entry dukker op igen når lease udløber og transaktionen abortes.
Hvis man altid vidste hvor lang tid at en task kører så skal lease time bare være højere end det for at undgå en unknown transaction når result skal skrives tilbage til spacet inden for transaktionen.
Det er så ikke altid muligt med et framework som tager alle muligt typer jobs med tasks af varierende længde. Sætter man lease time på transaktionen til uendelig så vil entry aldrig dukke op igen.
jeg har selv nogen løsninger som dog ikke er optimale.
1. sætte en øvre grænse for hvor lang tid en task må køre... jobbet må dele dem op så det overholdes. entrys vil så også være forsvundet så lang tid.
2. holde styr på hvilke resultater der er kommet tilbage, og sende en task afsted igen hvis der ikke er kommet et result tilbage fra den inden for et bestemt stykke tid. (men igen hvad er en god tid.. task størrelse kunne afhænge af mange ting)
Jeg er stadig i tvivl om det vil foresage en form for memory leak da entry stadig ligger i spacet, men en lease time på entry kan måske få det til at forsvinde.
...og til sidst, altid stoppe en worker med en stoptask, men det er jo ikke til at forhindre nedbrud.
Håber det var til at forstå..er det nogen andre ideer så bare sig til, hvis ikke så har jeg da fået det overvejet lidt mere ved at få det skrevet ned.