Spring of Java Enterprise (JEE)?
Bij het opzetten van een nieuwe Java web-applicatie moet een keuze worden gemaakt tussen Spring of Java Enterprise web–frameworks. Ik heb ervaringen met beide frameworks uit verschillende softwareprojecten.
In de basis is Spring (Spring-4) een light-weight framework. Er is niet zoveel nodig om te configureren voor elke Java-klasse (‘bean’). Een heel aantal keuzes zijn impliciet gemaakt. Je kan bijvoorbeeld een singleton Javaklasse annoteren, maar het is niet ‘default’. Je rijdt mee op de ‘Spring wave’. Java-Spring applicaties draaien moeiteloos onder de Tomcat applicatieserver, de meer light-weight webserver in vergelijking met de WildFly/JBoss applicatieserver. In combinatie met de sqlite database draait een grotere Java-Spring webapplicatie zelfs op een Raspberry Pi, met snelle responstijden.
In Java Enterprise (JEE) moet je meer expliciete keuzes maken. Is een Java-bean Stateless, Singleton of Statefull? Moeten expliciete afhankelijkheden worden aangegeven tussen opstartende Java-beans? (DependsOn-annotatie). Ook moet je in de datalayer aangeven of de database container-based of session-based transaction-management doet (‘Begin/End transaction’). Het verplicht maken van een aantal keuzes heeft als gevolg dat een JEE applicatie zwaarder oogt dan een Spring applicatie. Veel JEE beans bevatten 3-5 EE annotatieregels, terwijl in Spring slechts 1-2 annotatieregels volstaan voor de meeste beans.
Voor grote multi-user webapplicaties met veel parallelle sessies gaat mijn voorkeur uit naar het JEE framework. Voor meer light-weight applicaties raad ik Spring aan. Toch heb ik ook aan een Spring applicatie ontwikkeld die door consumenten uit heel Nederland werd aangeroepen. In JEE moet je voor elke bean specificeren of alle gebruikers de data delen, of dat de data in de bean (zijn ‘state’) juist sessiespecifiek zijn.
Zie uitgebreid overzicht van Java EE annotatie en bean management