[Spring] waar bewaar je een state?

Pagina: 1
Acties:

  • spaceboy
  • Registratie: Februari 2001
  • Laatst online: 01-12 14:24

spaceboy

Op grote hoogte

Topicstarter
Ik ben bezig met m'n eerste echte Spring applicatie. Ik snap er nog niet heel veel van. Maar in het kort wat ik tot nu toe heb:
  • in mijn web.xml heb ik een servlet-mapping zodat alles wat met /do/* wordt afgevangen door de dispatcher "dispatch".
  • in een dispatch-servlet.xml heb ik met een url-mapping alles wat binnenkomt (/* dus) naar mijn eigengemaakte class DispatchController gaat
  • in die DispatchController.java heb ik een aantal ModelAndView functies die netjes dingen naar de voorkant teruggeven.
  • in die DispatchController roep ik ook een MyManager aan die wat zaken regelt vwb business logica.
So far, so good! Werkt ook allemaal (miraculeus genoeg zelfs al met database-interactie via Hibernate). Maar ik heb een probleem dat ik het lastig vindt om te bepalen waar echte business logica moet, ik neem aan die MyManager? Of mag dat toch in die DispatchController (heb nu op beide plaatsen wel wat, maar het lijkt me erg onlogisch).

PLUS.... ik heb dus een bepaalde informatie nodig die "moet blijven". Zo haal ik bijvoorbeeld settings-variabelen op uit een tabel van MySQL. Dat werkt op zich, maar hoe krijg ik het voor elkaar dat iets persistent (zoals zo'n settings objectje) blijft? Moet dat ook in de MyManager? En zo ja: hoe?

Lots of questions, maar als iemand mij een beetje houvast kan geven: GRAAG!

Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.


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

-FoX-

Carpe Diem!

In je DispatchController hoort géén business logica thuis! Zorg ervoor dat alle business logica in je service layer (MyManager) terecht komt. Zorg er dus voor dat iedere laag doet waarvoor hij ontworpen is. Specifieke web code; bvb iets in een sessie plaatsen en er weer uithalen, moet je dan wel weer in je controller plaatsen.

Je settings die je ophaalt kan je misschien in een ApplicationSettings object stoppen, die je op zijn beurt weer in de sessie plaats.
Java:
1
2
3
4
// plaatsen
request.getSession().setAttribute("applicationSettings", appSettingsObj);
// uitlezen
ApplicationSettings settings = request.getSession().getAttribute("applicationSettings");

  • spaceboy
  • Registratie: Februari 2001
  • Laatst online: 01-12 14:24

spaceboy

Op grote hoogte

Topicstarter
-FoX- schreef op maandag 15 januari 2007 @ 20:29:
In je DispatchController hoort géén business logica thuis! Zorg ervoor dat alle business logica in je service layer (MyManager) terecht komt. Zorg er dus voor dat iedere laag doet waarvoor hij ontworpen is. Specifieke web code; bvb iets in een sessie plaatsen en er weer uithalen, moet je dan wel weer in je controller plaatsen.

Je settings die je ophaalt kan je misschien in een ApplicationSettings object stoppen, die je op zijn beurt weer in de sessie plaats.
Java:
1
2
3
4
// plaatsen
request.getSession().setAttribute("applicationSettings", appSettingsObj);
// uitlezen
ApplicationSettings settings = request.getSession().getAttribute("applicationSettings");
Cool! Hier kan ik wel iets mee! Ik ga weer verder prutsen en als ik nog vragen heb... I'll be back! Maar nu alvast bedankt!! _/-\o_

Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.


Verwijderd

-FoX- schreef op maandag 15 januari 2007 @ 20:29:
Je settings die je ophaalt kan je misschien in een ApplicationSettings object stoppen, die je op zijn beurt weer in de sessie plaats.
Java:
1
2
3
4
// plaatsen
request.getSession().setAttribute("applicationSettings", appSettingsObj);
// uitlezen
ApplicationSettings settings = request.getSession().getAttribute("applicationSettings");
Je stelt nu dus voor om globale applicatie scope variable in een sessie te stoppen??? Daar horen ze niet thuis.

TS gebruikt Spring dus ik verwacht dan eerder iets als
code:
1
2
3
<bean id="myController" class="....MyController">
   <property name="applicationSettings" ref="appSettings" />
</bean>

Uiteraard heb je liever dat je enkel specifieke settings in een controller (of wat voor bean dan ook) knalt. Maar dit lijkt me een goed startpunt...

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 08:22
JMX MBeans misschien een optie (voor configuratie)?

[ Voor 52% gewijzigd door Kwistnix op 16-01-2007 00:08 ]


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

-FoX-

Carpe Diem!

Verwijderd schreef op maandag 15 januari 2007 @ 23:03:
[...]

Je stelt nu dus voor om globale applicatie scope variable in een sessie te stoppen??? Daar horen ze niet thuis.

TS gebruikt Spring dus ik verwacht dan eerder iets als
code:
1
2
3
<bean id="myController" class="....MyController">
   <property name="applicationSettings" ref="appSettings" />
</bean>

Uiteraard heb je liever dat je enkel specifieke settings in een controller (of wat voor bean dan ook) knalt. Maar dit lijkt me een goed startpunt...
Ik weet niet wat voor soort settings de TS wil opslaan. Als het globale applicatie scope variabelen zijn, kan het beter door dit te configureren in Spring. Maar als het user specifieke settings zijn, die kunnen gewijzigd worden bij "preferences" of whatever.. kan hij het net evengoed in de sessie bijhouden. Misschien niet de cleanste manier, maar aangezien de TS nog in leer-fase zit is het wel een oplossing voor zijn probleem.
FallenAngel666 schreef op dinsdag 16 januari 2007 @ 00:00:
JMX MBeans misschien een optie (voor configuratie)?
Nee :P Lijkt me een te complexe oplossing voor hetgeen de TS wil bereiken

[ Voor 10% gewijzigd door -FoX- op 16-01-2007 08:25 ]


  • flowerp
  • Registratie: September 2003
  • Laatst online: 11-09 18:20
Waar je state in Spring bewaart... leuke vraag, geeft me een flashback aan een Gavin King met z'n uitspraak voor het TSS symposium: "not every Bar is the same Bar". Dit sloeg erop dat Spring je graag een Object geeft van het type Bar, maar als je een specificieke Bar wilt (met een specifieke state dus) dan zijn de opties al snel minder.

Een echte Spring expert mag dit statement (wat dus niet de mijne is ;) ) weerleggen :P

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.

Pagina: 1