21. Conclusie
De basisprincipes van het Struts 2-framework zijn behandeld en er is een applicatie gepresenteerd waarin verschillende technologieën zijn gecombineerd. Beginners en gevorderden vinden in dit document voldoende stof om zich verder te verdiepen en vooruitgang te boeken. Wat nog ontbreekt, is een naslagwerk. Ik raad opnieuw het boek aan:
"Struts 2 in Action", geschreven door Donald Brown, Chad Michael Davis en Scott Stanlick, uitgegeven door Manning.
Ik wil afsluiten met een overzicht van de problemen die ik ben tegengekomen bij het schrijven van de voorbeelden in dit document. Ik heb al gewezen op onverwacht gedrag van Struts 2, met name bij het invoeren van getallen en datums. Hier volgen nog enkele andere problemen die ik ben tegengekomen:
Laten we de applicatie [pam-01] van de Tomcat-server verwijderen:
De Apache-console geeft vervolgens de volgende logberichten weer:
| janv. 05, 2012 11:18:58 AM org.springframework.context.support.AbstractApplicationContext doClose
Infos: Closing org.springframework.web.context.support.XmlWebApplicationContext@57488b9c: display name [Root WebApplicationContext]; startup date [Thu Jan 05 11:18:45 CET 2012]; root of context hierarchy
janv. 05, 2012 11:18:58 AM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
Infos: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@78ae9d8d: defining beans [config,metier]; root of factory hierarchy
janv. 05, 2012 11:18:58 AM org.apache.tiles.access.TilesAccess setContainer
Infos: Removing TilesContext for context: org.apache.catalina.core.ApplicationContextFacade
janv. 05, 2012 11:19:00 AM org.apache.catalina.startup.HostConfig checkResources
Infos: Repli (undeploy) de l'application web ayant pour chemin de contexte /pam-01
|
Het verwijderen is goed verlopen.
Laten we op dezelfde manier [pam-02] verwijderen. De logberichten zijn dan als volgt:
| janv. 05, 2012 11:21:07 AM org.springframework.context.support.AbstractApplicationContext doClose
Infos: Closing org.springframework.web.context.support.XmlWebApplicationContext@5d9131fa: display name [Root WebApplicationContext]; startup date [Thu Jan 05 11:11:10 CET 2012]; root of context hierarchy
janv. 05, 2012 11:21:07 AM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
Infos: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@7b66d238: defining beans [config,metier,employeDao,indemniteDao,cotisationDao,entityManagerFactory,dataSource,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,txManager,org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0,org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor#0]; basis van de fabriekshiërarchie
janv. 05, 2012 11:21:07 AM org.springframework.orm.jpa.AbstractEntityManagerFactoryBean destroy
Infos: Closing JPA EntityManagerFactory for persistence unit 'pam-PU'
janv. 05, 2012 11:21:07 AM org.hibernate.impl.SessionFactoryImpl close
Infos: closing
janv. 05, 2012 11:21:07 AM org.apache.tiles.access.TilesAccess setContainer
Infos: Removing TilesContext for context: org.apache.catalina.core.ApplicationContextFacade
janv. 05, 2012 11:21:07 AM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
Grave: The web application [/pam-02] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
janv. 05, 2012 11:21:07 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
Grave: The web application [/pam-02] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak.
janv. 05, 2012 11:21:07 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
Grave: The web application [/pam-02] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.
janv. 05, 2012 11:21:08 AM org.apache.catalina.startup.HostConfig checkResources
Infos: Repli (undeploy) de l'application web ayant pour chemin de contexte /pam-02
|
Op regels 12, 14 en 16 worden ernstige fouten gemeld. Twee daarvan duiden op een mogelijk geheugenlek. De applicatie [pam-02] vertoont inderdaad geheugenlekken. Na een tijdje is de applicatie niet meer bruikbaar. NetBeans moet dan worden afgesloten en de applicatie moet opnieuw worden geïmplementeerd.
De fouten hebben allemaal betrekking op threads. De applicatie [pam-02] maakt zelf geen gebruik van threads. We moeten dus de gebruikte frameworks Struts 2, Spring 2.5 en Tiles in het vizier nemen. We kunnen Tiles redelijkerwijs uitsluiten, aangezien dit framework waarschijnlijk geen threads ondersteunt. Dan blijven Struts en Spring over.
We voeren vervolgens nog een test uit:
We implementeren de laag [web] met het framework JSF in plaats van Struts 2. Verder verandert er niets. We krijgen dan dezelfde foutmeldingen als met Struts 2.
De boosdoener lijkt dus Spring te zijn, de dbcp-verbindingspool die hier door Spring wordt gebruikt, of ikzelf als ik Spring niet op de juiste manier heb gebruikt. Misschien ben ik een Spring-configuratie vergeten die ervoor zorgt dat de aangemaakte threads worden opgeruimd, misschien heb ik ... De oplossing voor dit geheugenlekprobleem moet dus nog worden gevonden.
Nog een experiment. IDE NetBeans wordt geïnstalleerd met de Tomcat- en GlassFish-servers. Laten we eens proberen een applicatie die in dit document is gemaakt, op GlassFish uit te voeren:
- in [2] de projecteigenschappen van [exemple-08] [1]
- in [3], de keuze van de webserver
Dit is de pagina die in de browser wordt weergegeven:
De verwachte overdraagbaarheid is niet gerealiseerd. Er zijn hier twee fouten:
- in [1] heeft de internationalisering niet gewerkt
- in [2] treedt er een uitzondering op
Bij de meeste applicaties die in dit document zijn ontwikkeld, treden dezelfde twee fouten op. Ik heb niet geprobeerd dit nieuwe probleem op te lossen.