Weblogic shared library kullanımı
Günümüzde kurumsal birçok uygulama çok katmanlı yapılardan meydana geliyor. Bu çok katmanlı yapılar, uygulamaları artık basit tek bir uygulama olmak yerine, kendi işlerinde özelleşmiş birçok uygulama olmaya yönlendiriyorlar. Örneğin çok katmanlı mimariler veri katmanını, lojik katmanı ve sunum katmanını ayrı ayrı ele alıyor. Durum böyle olunca da aynı işleve sahip farklı uygulamalar zaman zaman aynı işleri yapan kod parçacıkları içermek durumunda kalabiliyorlar. Yazılan kodların modüler olması çok büyük kazanımlar getirdiği için bu yinelenen kod parçacıklarının birer library (kütüphane) olarak yazmak tabiki çok avantajlı. Özellikle de kütüphane boyutları arttığında, bu kütüphanelerin uygulamalar içerisine gömülmesi daha da güç hale geliyor. Yüksek boyutlu kütüphaneler hem uygulamanın deploy edilmesi aşamasında uzun zaman kayıpları oluşturmaktadır hem de uygulamaların yönetilmesini zor kılmaktadırlar. Kütüphaneler genellikle asıl işi yapan kod parçacıkları olduğu için akışta bir değişiklik yapılması durumda uygulamalarda her hangi bir major değişiklik yapılmasına gerek de kalmaz.
Weblogic, kütüphanelerin farklı uygulamalar tarafından paylaşılmasını desteklemektedir. Bu işi yapmak hem uygulama hem de kütüphane tarafında olduça basittir ve kodlama seviyesinde ayrıca bir efor gerektirmez. Kütüphane tarafında yapılması gereken, manifest dosyasında kütüphanenin adı, versiyonu, vb… gibi tanımlayıcı bilgilerin belirtilmesidir. Uygulama tarafında yapılması gereken ise, kütüphane manifest dosyasında belirtildiği gibi uygulamanın hangi kütüphaneyi kullanacağının belirtilmesidir.
Bir süre önce geliştirmiş olduğum Trend Analyzer uygulaması bu şekilde bazı ortak kütüphanelerin kullanılması ile oluşturulmuştur. Bu uygulamadan örnek verecek olursak şekildeki gibi ortak kullanılan kütüphaneleri görebiliriz. Örneğin TA.Core kütüphanesi her üç uygulama tarafından da kullanılmakta, TA.DataLayer kütüphanesi ise Servis ve yönetim panelleri uygulamaları tarafından kullanılmaktadır.
Yalnızca TA.DataLayer kütüphanesini ele alacak olursak, bu kütüphanenin manifest dosyasında aşağıdaki gibi tanımlamalar yapılamsı gerekecektir;
MANIFEST.MF (TA.DataLayer)
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: Cem Kefeli (cemkefeli.com)
Extension-Name: trendAnalyzer.datalayer
Implementation-Version: 1.0.0
Specification-Version: 1.0
Uygulama tarafında ise weblogic.xml içerisine kullanılması istenen kütüphanenin tanımlayıcı bilgileri verilmelidir. Buradaki versiyon ve kütüphane isimleri birebir olarak kütüphane tanımlamasında yapıldığı şekilde olmalıdır;
weblogic.xml (TA Services)
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app>
.
.
<library-ref>
<library-name>trendAnalyzer.datalayer</library-name>
<implementation-version>1.0.0</implementation-version>
<specification-version>1.0</specification-version>
</library-ref>
.
.
</weblogic-web-app>
Weblogic açısından kütüphanelerin deploy edilmesi aşamasında çok farklılık bulunmuyor. Kütüphaneler de uygulamalar nasıl deploy ediliyorsa o şekilde deploy edilmektedir. Fakat dikkat edilmesi gereken en önemli nokta uygulama/kütüphane deployment sırasıdır. İlk önce uygulamaların kullandığı kütüphaneler deploy edilmeli sonrasında ise uygulamalar deploy edilmelidir. Çalışan bir sistemde up&running olan bir uygulamanın kullanıdğı kütüphanenin silinmesine Weblogic izin vermez. Çünkü izin vermesi durumunda aktif uygulamanın kararlılığında ve fonksiyonalitesinde problem oluşacaktır. Nasıl ki ilk önce kütüphaneler deploy ediliyorsa, undeployment aşamasında da tam tersten önce uygulamalar sonra ise kütüphaneler undeploy edilmelidir.
Dikkat edilmesi gereken bir diğer nokta ise uygulama ile kütüphanenin aynı managed server’lar üzerinde deploy edilmiş olmasıdır. Eğer bu koşul sağlanmazsa uygulama, kütüphane tanımını göremeyecektir ve çalışmasında fonksiyonel oalrak problem oluşacaktır.
Aşağıdaki adımlar takip edilerek bir shared library deploy edilebilir;
Kütüphaneyi hem Management Panel hem de Servis uygulamasına deploy ediyoruz.
Deploy edilen kütüphane isminde görülen (1.0, 1.0.0) ifadesi manifest dosyası içerisinde yapılan tanımlamalardan gelmektedir.