Kurumsal Java Yazılımı
|
|
|
KurumsalJava’yı Takip Edenler Çoğalıyor Posted: 09 Dec 2009 03:11 AM PST Resimde görüldüğü gibi online üye adedi 17. Bu son zamanlarda ulaştığımız en iyi rakam, birisinin bot, birisinin ben olmama ragmen
KurumsalJava.com bünyesinde bulunan makalelerin 30.000 den fazla indirildiğini daha önceki yazımda sizinle paylaşmıştım
|
|
Posted: 09 Dec 2009 02:09 AM PST 21.7.2009 tarihinden itibaren Schwäbisch Hall (Almanya) şehrinde bulunan Kreditwerk firması için JEE danışman ve yazılım mimari (freelancer) olarak işe başladım. 40 iş günü olarak anlaşdığım proje’de bugün itibariyle 5,5 ayı doldurmuş bulunuyorum
Kreditwerk, Schwäbisch Hall isimli Alman bankasının BT işlerini yürüten bir yazılım ve altyapı firması. Bu firmanın büyük bir hissesi Schwäbisch Hall bankasına ait. Schwäbisch Hall bankası için kendi işlerini sahip olduğu BT firmalarına yaptırıyor diyebiliriz. Benim çalıştığım projenin ismi Wohnrente 2009. Alman hümümeti emeklilik sonrasında çalışanların ev alabilmesi için her sene 600 EUR’a kadar yardımda bulunuyor. Eğer 1 den fazla cocuğunuz varsa bu rakam binleri geçebiliyor, çünkü çocuk başına devlet 300 Eur yardımda bulunuyor. Alman hükümetinin amacı her çalışanın emeklilikten sonra bir ev sahibi olabilmesi ve emeklilik maaşının az oluşundan etkilenmemelerini sağlamak. Proje JEE tabanli ve EBJ3 teknolojisini kullanıyoruz. Bankanın IBM Host tabanlı sistemlerinde bulunan verilerin devletin Wohnrente projesinden sorumlu kurumuyla XML bazında değiş-tokuş edilmesi gerekiyor. Bu işlemler için JAXB teknolojisinin en uygun olacağını düşündüm ve sistemi bu şekilde implemente ettim. EJB3 komponentleri ve Host sistemleri arasındaki bağlantıyı Corba üzerinden gerçekleştiriyoruz. JAXB ile unmarshalling (XML den Java nesneleri oluşturmak) performansını artırmak için Stax teknolojisini kullanmayı tercih ettim. Stax, SAX gibi event bazlı bir teknoloji ve XML dosyalarının adım adım işlenmelerini mümkün kılmakta. XML dosyalarının içinde yüzlerce ya da binlerce veri olabilir. Eğer default olan DOM teknolojisini kullanırsanız, tüm XML dosyasının işlem öncesi hafızaya yüklenmesi gerekmektedir. Bu kısa bir zamanda OutOfMemory hatası doğurabilir. Hızlı transformasyon ve az hafıza kullanımını sağlamak için unmarshalling işlemini aşağıdaki şekilde gerçekleştiriyorum.
// Liste mit den MZahlungsanstoss Objekten
List<Zahlungsanstoss> list = new ArrayList<Zahlungsanstoss>();
XMLInputFactory xmlif = XMLInputFactory.newInstance();
FileReader fr = new FileReader(file);
XMLEventReader xmler = xmlif.createXMLEventReader(fr);
EventFilter filter = new EventFilter() {
public boolean accept(XMLEvent event) {
return event.isStartElement();
}
};
XMLEventReader xmlfer = xmlif.createFilteredReader(xmler, filter);
StartElement e = (StartElement) xmlfer.nextEvent();
JAXBContext ctx = JAXBContext.newInstance(JAXB_PACKAGE);
Unmarshaller um = ctx.createUnmarshaller();
while (xmlfer.peek() != null)
{
Object o = um.unmarshal(xmler);
if (o instanceof Zahlungsanstoss)
{
Zahlungsanstoss m = (Zahlungsanstoss)o;
list.add(m);
}
}
fr.close();
EJB3 komponentlerini tamamen test güdümlü (TDD – Test Driven Development) geliştiriyorum. EJB komponentleri POJO sınıfları olduklarından test güdümlü geliştirilmeleri oldukça kolay. Bu şekilde %85′in üzerinde test kapsama alanı oluşturabildim. Bu yazılım metriğini elde etmek için EclEmma aracını kullanıyorum. JAXB teknoloji kullanılarak nasıl Java mapping sınıflarının oluşturulduğunu daha önceki bir blog kaydımda sizinle paylaşmıştım. Java sınıflarını oluşturabilmek için (generated) XML DTD dosyalarından faydalandım. Geçen hafta üzerinde çalıştığım implementasyon bünyesinde bir XML Schema kullanmam gerekti. Bir XML Schema’dan Java nesneleri oluşturmak için aşağıdaki Ant hedefini (target) kullanıyorum:
<target name="ZusyAA01" description="Compile all Java source files">
<echo message="Compiling the schema..." />
<mkdir dir="gen-src" />
<xjc schema="${basedir}/etc/jaxb/zusyaa01/ZusyAA01.xsd" package="de.***.mapping" destdir="${basedir}/gen-src">
<produces dir="gen-src" includes="**/*.java" />
</xjc>
</target>
İlerleyen proje günlerinde üzerinde çalıştığım konular ve karşılaştığım sorunlar hakkında sizinle paylaşıma devam edeceğim.
|
|
Intercepting Filter Tasarım Şablonu Posted: 09 Dec 2009 01:23 AM PST Front Controller tasarım şablonunda, kullanıcıdan gelen isteklerin (request) merkezi bir yerde toplanarak, işlem yapıldığını daha önce görmüştük. Intercepting Filter tasarım şablonu ile, kullanıcının isteği (request) işleme alınmadan önce filtreler kullanılarak süzgeçten geçirilir. Örneğin bir filtre ile kullanıcının işlem öncesi login yaptığını konrol edebiliriz. Filtremiz, session (HttpServletSesion) içinde login bilgilerini bulamadığı taktirde, kullanıcıyı login sayfasına yönlendirebilir.
Aynı şekilde işlem tamamlandıktan sonra kullanıcıya gönderilecek cevap (response) filtreler yardımı ile modifike edilebilir. Bu yazıyı PDF olarak edinebilirsiniz. Note: There is a file embedded within this post, please visit this post to download the file.Konuyla İlgili Kitaplar
|
|
Reuse-Release Equivalence Principle (REP) – Tekrar Kullanım ve Sürüm Eşitliği Posted: 09 Dec 2009 01:03 AM PST Program modülleri paketler (packages) kullanılarak organize edilir. Paketler arasında sınıfların birbirlerini kullanmalarıyla bağımlılıklar oluşur. Bunun bir örneği resim 1 de yer almaktadır. Eğer paket B bünyesindeki bir sınıf paket A bünyesinde bulunan bir sınıf tarafından kullanılıyorsa, bu paket A’nin paket B’ye bağımlılığı olduğu anlamına gelir. Bu tür bağımlılıkların oluşması doğaldır. Amaç bu bağımlılıkları ortadan kaldırmak değil, kontrol edilebilir hale getirmek olmalıdır. Bu amaçla paket bazında uygulanabilecek tasarım prensipleri oluşturulmuştur. Bunlardan birisi Reuse-Release Equivalence (tekrar kullanım ve sürüm eşitliği) prensibidir.
Bir proje bünyesinde değişik modüllerden oluşan bir yazılım sistemini implemente etmek için çalıştığımızı düşünelim. Her modülden ayrı bir ekip sorumlu olsun. Üzerinde çalıştığımız modülün implementasyonunu yapabilmek için büyük bir ihtimalle diğer modülleri kullanmamız gerekecektir. Örneğin bilgibankası üzerinde işlem yapmamızı sağlayacak bir modülü başka bir ekip implemente etmiş olabilir. O ekip bilgibankası üzerindeki işlemler için gerekli tüm sınıfları dao isimli bir paket içine yerleştirmiş olabilir. Bizim bu paket içindeki sınıfları tekrar kullanabilmemiz (reuse) için belirli şartların yerine gelmesi gerekmektedir. Bunlar:
Tekrar kullanımı kolaylaştırmak için paket sürümlerinin oluşturulması şarttır. REP’e göre tekrar kullanılabilirlik (reuse) sürüm (release) ile direk orantılıdır. Sürüm ne ihtiva ediyorsa, o tekrar kullanılabilir. Bu yazıyı PDF dosyası olarak aşağıdaki linkten edinebilirsiniz.
|
| You are subscribed to email updates from Kurumsal Java Yazılımı
To stop receiving these emails, you may unsubscribe now. |
Email delivery powered by Google |
| Google Inc., 20 West Kinzie, Chicago IL USA 60610 | |