Momenteel zit ik op mijn werk op een vrij complex project met een hele korte doorlooptijd. Vanuit de klant zijn onder andere de volgende eisen/wensen naar voren gekomen:
- Struts Shale (is al afgevallen, gezien gebrek aan expertise)
- J2EE compliant
- MEGA performance (zeer belangrijk punt gezien de hoeveelheid data-afhandeling)
Hiervoor hebben we de volgende architectuur ontwikkeld.
- Weblaag (MyFaces, Facelets, etc)
- Service en domein (Spring + EJB)
- Persistentie Hibernate
Het probleem begint voornamelijk met de keuze Spring + EJB. Deze werken op de volgende manier samen.
- Interface BlaBlaService
- Klasse BlaBlaServiceImpl
- EJB BlaBlaServiceBean
De klasse BlaBlaServiceImpl is een gewone POJO en bevat de logica. Deze kan aangesproken worden via Spring, want hij implementeert BlaBlaService, maar ook via de EJB.
De EJB BlaBlaServiceBean is een Stateless Session Bean en doet niets meer dan delegeren naar de POJO.
Vanuit die POJO gaat de logica weer wat dieper richting Hibernate.
Deze opzet is bedacht om zo veel mogelijk gebruik te kunnen maken van de services die de EJB container biedt.
Echter, hebben we al gemerkt. Het is heel complex en foutgevoelig. Bovendien kost het veel werk om te maken, wat de doorlooptijd weer nadelig beinvloedt. Eén property toevoegen aan het domein betekent het aanpassen van verschillende bestanden. Tel daarbij op dat er nog meer bestanden bij komen, zoals web.xml en spring.xml plus de bestanden die je sowieso moet aanpassen, zoals in de persistentielaag.
We hebben twee alternatieven op het oog, namelijk:
1 JSF + Spring + Hibernate
Voordelen:
* testbaarheid
* kan zelfs in tomcat deployen lokaal
* sneller ontwikkelen
Nadelen:
* Minder J2EE compliant
* Geen J2EE faciliteiten, zoals meerdere fysieke tiers
2 JSF + EJB + Hibernate
Voordelen:
* 'Meer' J2EE Compliant
Nadelen:
* testbaarheid
* zware appserver nodig
* complex
Na dit hele betoog is mijn vraag of jullie al eens een dergelijke opzet geprobeerd hebben en voor welke van de alternatieven je zou gaan. Of een derde optie.
Kortom, het gaat dus om een zo lichtgewicht mogelijke oplossing die snel te realiseren is, maar tegelijkertijd ook uiterst stabiel is, aangezien er een heel bedrijf op gaat draaien en het veel data te verwerken krijgt.
- Struts Shale (is al afgevallen, gezien gebrek aan expertise)
- J2EE compliant
- MEGA performance (zeer belangrijk punt gezien de hoeveelheid data-afhandeling)
Hiervoor hebben we de volgende architectuur ontwikkeld.
- Weblaag (MyFaces, Facelets, etc)
- Service en domein (Spring + EJB)
- Persistentie Hibernate
Het probleem begint voornamelijk met de keuze Spring + EJB. Deze werken op de volgende manier samen.
- Interface BlaBlaService
- Klasse BlaBlaServiceImpl
- EJB BlaBlaServiceBean
De klasse BlaBlaServiceImpl is een gewone POJO en bevat de logica. Deze kan aangesproken worden via Spring, want hij implementeert BlaBlaService, maar ook via de EJB.
De EJB BlaBlaServiceBean is een Stateless Session Bean en doet niets meer dan delegeren naar de POJO.
Vanuit die POJO gaat de logica weer wat dieper richting Hibernate.
Deze opzet is bedacht om zo veel mogelijk gebruik te kunnen maken van de services die de EJB container biedt.
Echter, hebben we al gemerkt. Het is heel complex en foutgevoelig. Bovendien kost het veel werk om te maken, wat de doorlooptijd weer nadelig beinvloedt. Eén property toevoegen aan het domein betekent het aanpassen van verschillende bestanden. Tel daarbij op dat er nog meer bestanden bij komen, zoals web.xml en spring.xml plus de bestanden die je sowieso moet aanpassen, zoals in de persistentielaag.
We hebben twee alternatieven op het oog, namelijk:
1 JSF + Spring + Hibernate
Voordelen:
* testbaarheid
* kan zelfs in tomcat deployen lokaal
* sneller ontwikkelen
Nadelen:
* Minder J2EE compliant
* Geen J2EE faciliteiten, zoals meerdere fysieke tiers
2 JSF + EJB + Hibernate
Voordelen:
* 'Meer' J2EE Compliant
Nadelen:
* testbaarheid
* zware appserver nodig
* complex
Na dit hele betoog is mijn vraag of jullie al eens een dergelijke opzet geprobeerd hebben en voor welke van de alternatieven je zou gaan. Of een derde optie.
Kortom, het gaat dus om een zo lichtgewicht mogelijke oplossing die snel te realiseren is, maar tegelijkertijd ook uiterst stabiel is, aangezien er een heel bedrijf op gaat draaien en het veel data te verwerken krijgt.
Fat Pizza's pizza, they are big and they are cheezy