Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JAVA] Webapps met eigen instantie van statics

Pagina: 1
Acties:

  • chrisO
  • Registratie: Mei 2003
  • Laatst online: 28-11 23:03
Voor een webapplicatie maak ik gebruik van een library. Deze library haalt data op uit een database en voert diverse complexe handelingen met de uit, alvorens de data bij de webapplicatie terrecht komt. deze library is ontwikkel lang voordat er besloten is om de webapplicatie te maken.

Het probleem is dat de library veel gebruik maakt van static variablen voor de implementatie van diverse observer-observable patterns. Met een webapplicatie zijn er natuurlijke meerdere client instanties, maar die maken dus allemaal gebruik van die ene instantie van de library, met als gevolg dat iedere client instantie dezelfde observables observed.
Het aanpassen van de library moet als laatste alternatief beschouwd worden en dus ben ik opzoek gegaan naar een manier om voor iedere client een eigen versie/sessie van de library in te laden.

Ik heb onder andere google lopen zoeken, maar niets gevonden, en eigenlijk weet ik ook niet echt goede termen om op te zoeken...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 30-11 11:35

Janoz

Moderator Devschuur®

!litemod

Wanneer je die library opneemt in je webapplicatie zelf, en niet tussen de libs van de jvm of de applicatieserver zullen de statics gewoon per webapp gelden. Het grote nadeel is dat de library ook meerdere keren in het geheugen komt te zitten (niet enkel de data, maar ook alle classdefinities en voor elke webapp weer).

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


  • chrisO
  • Registratie: Mei 2003
  • Laatst online: 28-11 23:03
De webapplicatie draait onder Tomcat en de library (jar) staat in de WEB-INF\lib folder van de webapplicatie.

in de webapplicatie wordt een mediator aangemaakt als volgt:

public static final Mediator MEDIATOR = new Mediator();

Mediator is een class van de library en MOET static en final zijn. hier zit dus het probleeem en hoe krijg ik een eigen instantie van een Mediator in iedere instantie van mijn webapplicatie....of zit er niets anders op dan de library aan te passen?

Verwijderd

Precies zoals Janoz dat beschrijft en volgens mij precies zoals je dat nu doet. Krijg je ongewenst gedrag?

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Wat bedoel je met 'een instantie van een webapplicatie'? Er is in Tomcat normaalgesproken maar 1 instantie van je webapplicatie.

Wie trösten wir uns, die Mörder aller Mörder?


  • chrisO
  • Registratie: Mei 2003
  • Laatst online: 28-11 23:03
uhmmm "instantie" was misschien het verkeerde woord. ik bedoel voor iedere client.
Verwijderd schreef op donderdag 20 september 2007 @ 11:11:
Precies zoals Janoz dat beschrijft en volgens mij precies zoals je dat nu doet. Krijg je ongewenst gedrag?
Vreemd gedrag...uhmm de library bevat veel observable objects waar diverse webapplicatie classes naar luisteren. Bij een x tal clients ontvangt iedere client, bij een actie waarop ze een update krijgen, die update x maal. Dus als ik 4 clients heb en ik druk op een knop, dan gaat de library iets doen....en als die klaar is, dan wordt de client daarvan op de hoogte gesteld dmv een update, en die ontvang ik dus 4 maal! daarnaast worden een aantal statics binnen de library dus door alle clients gedeeld, wat dus niet de bedoeling is.
hieruit maak ik dus dat de library gedeeld wordt tussen de clients en dat niet iedere client een eigen instantie van de library heeft, wat ik dus wil.

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 30-11 11:20

voodooless

Sound is no voodoo!

Grote vraag: waarom moet dat ding perse static final zijn?

Do diamonds shine on the dark side of the moon :?


  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-06 13:00
voodooless schreef op donderdag 20 september 2007 @ 11:50:
Grote vraag: waarom moet dat ding perse static final zijn?
Dat is de vraag toch niet? Dat is zijn probleem :) Want hij wil de lib niet aanpassen...

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 30-11 11:20

voodooless

Sound is no voodoo!

rrrandy schreef op donderdag 20 september 2007 @ 12:06:
Dat is de vraag toch niet? Dat is zijn probleem :) Want hij wil de lib niet aanpassen...
Misschien is het namelijk wel helemaal niet zo dat het een static final moet zijn... Vandaar dat ik even de rede vraag achter dit feit. Wie weet zit er gewoon een denkfout achter... Als dit daadwerkelijk zo is kom je natuurlijk nooit om het probleem heen zonder de lib aan te passen.

Misschien kun je zelf nog iets verzinnen met meerdere classloaders, maar ik vrees dat dat geen feest gaat worden.

[ Voor 5% gewijzigd door voodooless op 20-09-2007 12:11 ]

Do diamonds shine on the dark side of the moon :?


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

chrisO schreef op donderdag 20 september 2007 @ 10:08:
die maken dus allemaal gebruik van die ene instantie van de library, met als gevolg dat iedere client instantie dezelfde observables observed.
Natuurlijk worden alle geregistreerde observers bij een bepaald event genotificeerd. Als je dat niet wilt, dan moet je de observer niet registreren of moet er een andere observable zijn voor een andere client ;). Als client A data opvraagt en client B wordt genotificeerd dat er nieuwe data gearriveerd is, terwijl alleen client A op dat moment in die data geinteresseerd is, dan moet client B dat event gewoon negeren. Is dat een probleem? Zoja, dan gebruik je de library voor iets waar hij niet voor bedoeld is, of is de library verkeerd ontworpen of geimplementeerd.

Een oplossing is misschien om state bij te houden: client B doet alleen iets met events als client B in state EXPECTING_DATA staat en negeert de events in alle andere gevallen. Als dat niet kan, bijvoorbeeld om de notificatie 'er is data' kan betekenen dat er data is die client B helemaal niet wil of verwacht, dan is er echt iets grondig mis met die 'library.

Wie trösten wir uns, die Mörder aller Mörder?


Verwijderd

Confusion schreef op donderdag 20 september 2007 @ 13:00:
Natuurlijk worden alle geregistreerde observers bij een bepaald event genotificeerd. Als je dat niet wilt, dan moet je de observer niet registreren of moet er een andere observable zijn voor een andere client ;).
Volgens mij bedoeld TS dat helemaal niet. Laten we eens een situatie proberen te schetsen:
../webapps/first/WEB-INF/lib/my-lib.jar
../webapps/second/WEB-INF/lib/my-lib.jar

TS, begrijp ik nu goed dat je claimt dat wanneer je een event in webapp first triggered, je daar notie van krijgt in web-app second doormiddel van je my-lib.jar?

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 30-11 11:20

voodooless

Sound is no voodoo!

Volgens mij wil de TS per sessie een instantie hebben:
uhmmm "instantie" was misschien het verkeerde woord. ik bedoel voor iedere client.

Do diamonds shine on the dark side of the moon :?


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Verwijderd schreef op donderdag 20 september 2007 @ 13:08:
TS, begrijp ik nu goed dat je claimt dat wanneer je een event in webapp first triggered, je daar notie van krijgt in web-app second doormiddel van je my-lib.jar?
Ik hoop het niet, want dan doet die library hele rare, en nare, dingen met classloaders.

Wie trösten wir uns, die Mörder aller Mörder?


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:10

Creepy

Tactical Espionage Splatterer

Misschien handig om eens een klein voorbeeldje te geven hoe je die lib. nu gebruikt. Het lijkt me heel sterk dat die lib. afdwingt dat je maar één keer een observable iets kan maken wat je moet gebruiken. Ik gok dat het een kleine moeite is om dat aan te maken per client i.p.v. één keer in je web app. Je zou niet de eerste zijn die zelf iets static declareert of bijv. een singleton hebt voor je gehele web app. terwijl dit eigenlijk per client zou moeten zijn. Per client moet je in feite iets regelen per sessie.

(en dat is met de aanname dat je maar 1 webapp hebt draaien waar meerdere clients tegelijk gebruik van maken)

[ Voor 9% gewijzigd door Creepy op 20-09-2007 13:33 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Confusion schreef op donderdag 20 september 2007 @ 13:30:
Ik hoop het niet, want dan doet die library hele rare, en nare, dingen met classloaders.
Nou gelukkig is dat onmogelijk ;)

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 30-11 11:20

voodooless

Sound is no voodoo!

Onmogelijk? Nee, zeker niet ( dan denk ik aan aan vage dingen met sockets enzo :X )! onwaarschijnlijk: ja ;)

Do diamonds shine on the dark side of the moon :?


Verwijderd

Euh ja, iets met knipogen heh...

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

-FoX-

Carpe Diem!

Ik wil je niets gaan opdringen, maar met het Spring framework kan je dergelijke zaken makkelijk oplossen door deze mediator als session scoped bean te definiëren en op die manier binnen je applicatie te gebruiken. Misschien is het wel interessant dat je hiermee verder gaat, is ook wat netter dan je "static" oplossing.

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 30-11 11:20

voodooless

Sound is no voodoo!

-FoX- schreef op donderdag 20 september 2007 @ 14:14:
Misschien is het wel interessant dat je hiermee verder gaat, is ook wat netter dan je "static" oplossing.
Het punt is juist dat er geclaimd wordt dat het ding alleen maar static final mag zijn. Als dat zo is, dan heb je aan je hele session scope gewoon niets.

Do diamonds shine on the dark side of the moon :?


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

-FoX-

Carpe Diem!

Maar toch insinueer je zelf net het omgekeerde :)

[ Voor 5% gewijzigd door -FoX- op 21-09-2007 07:54 ]


  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 30-11 11:20

voodooless

Sound is no voodoo!

-FoX- schreef op vrijdag 21 september 2007 @ 07:30:
Maar toch insinueer je zelf net het omgekeerde :)
Ik zou niet weten waar ik dat doe..

Do diamonds shine on the dark side of the moon :?


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

-FoX-

Carpe Diem!

voodooless schreef op donderdag 20 september 2007 @ 13:24:
Volgens mij wil de TS per sessie een instantie hebben
Hier :*)

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 30-11 11:20

voodooless

Sound is no voodoo!

Ik haal hier enkel aan wat het doel dan de TS, en niets meer. Met het feit dat de lib alleen maar final static mag zijn heeft dat verder niets te maken (ook al is dat een belemmering).

Do diamonds shine on the dark side of the moon :?

Pagina: 1