21. Sonuç
Struts 2 çerçevesinin temelleri incelenmiş ve çeşitli teknolojileri bir araya getiren bir uygulama sunulmuştur. Başlangıç veya orta seviyedeki okuyucular, bu belgede kendilerini geliştirmek ve ilerlemek için gerekli bilgileri bulacaktır. Geriye bir referans kitabı ihtiyacı kalmaktadır. Yine şu eseri tavsiye ederim:
"Struts 2 in Action" adlı kitabı tavsiye ederim.
Bu belgedeki örnekleri yazarken karşılaştığım sorunları paylaşarak yazımı sonlandırmak istiyorum. Struts 2’nin özellikle sayı ve tarih girişlerinde sergilediği beklenmedik davranışlardan daha önce bahsetmiştim. Karşılaştığım diğer bazı sorunlar şunlardır:
[pam-01] uygulamasını Tomcat sunucusundan kaldıralım:
Bunun üzerine Apache konsolu aşağıdaki günlükleri görüntüler:
| 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
|
Uygulamanın kaldırılması sorunsuz gerçekleşti.
Aynı şekilde [pam-02] uygulamasını da kaldıralım. Günlük kayıtları şu şekildedir:
| 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]; fabrika hiyerarşisinin kökü
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
|
12., 14. ve 16. satırlarda ciddi hatalar bildiriliyor. Bunlardan ikisi, olası bir bellek sızıntısına işaret ediyor. Nitekim, [pam-02] uygulaması bellek sızıntısı gösteriyor. Bir süre sonra uygulama kullanılamaz hale geliyor. Bu durumda NetBeans'i kapatıp uygulamayı yeniden dağıtmak gerekiyor.
Hataların tümü iş parçacıklarıyla ilgilidir. [pam-02] uygulaması kendi başına iş parçacığı kullanmamaktadır. Dolayısıyla, kullanılan Struts 2, Spring 2.5 ve Tiles çerçevelerinden şüphelenmek gerekir. Muhtemelen iş parçacıklarını yönetmeyen Tiles'ı makul bir şekilde eleyebiliriz. Geriye Struts ve Spring kalır.
Bunun üzerine başka bir deneme yapıyoruz:
[web] katmanını Struts 2 yerine JSF çerçeve ile uyguluyoruz. Başka hiçbir şey değişmiyor. Sonuçta Struts 2 ile aynı hata mesajlarını alıyoruz.
Dolayısıyla sorun, Spring'de, Spring tarafından burada kullanılan dbcp bağlantı havuzunda ya da Spring'i doğru şekilde kullanmamışsam bende olabilir. Oluşturulan iş parçacıklarını temizlemeye yarayan bir Spring yapılandırmasını unutmuş olabilirim, ya da... Bu bellek sızıntısı sorununun çözümü hâlâ bulunmayı bekliyor.
Başka bir deneme. IDE NetBeans, Tomcat ve GlassFish sunucularıyla birlikte kuruluyor. Bu belgede oluşturulan bir uygulamayı GlassFish üzerinde çalıştırmayı deneyelim:
- [2]'te [exemple-08] projesinin özellikleri [1]
- [3]'te web sunucusu seçimi
İşte tarayıcıda görüntülenen sayfa:
Beklenen taşınabilirlik sağlanamamıştır. Burada iki hata vardır:
- [1]'te, uluslararasılaştırma işlemi başarısız oldu
- [2]'te bir istisna oluştu
Bu belgede geliştirilen uygulamaların çoğunda aynı iki hata görülmektedir. Bu yeni sorunu çözmeye çalışmadım.