Kreditwerk Wohnrente Projesi

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 :) Bu son iki yılın projelerinde az rastlanan bir durum değil. Projeye 40 ya da 60 iş günü olarak alınırsınız ve performansınıza ve proje bütçesine göre bu süre uzayıp gidebilir. 2010 senesi için de 160 iş günü devam etmem isteniyor.

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.


EOF ( Enf Of Fun )
Özcan Acar



Proje Günlüğü kategorisinden son yazılar

Share Button
0.00 avg. rating (0% score) - 0 votes

Bir Cevap Yazın