Kurumsal Java Yazılımı

1 view
Skip to first unread message

Kurumsal Java Yazılımı

unread,
Dec 9, 2009, 10:22:04 AM12/9/09
to kurums...@googlegroups.com

Kurumsal Java Yazılımı

Link to 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


EOF ( End Of Fun)
Özcan Acar

Post to Twitter Twittere Ekle Post to Digg Digg Post to Facebook Facebook

Kreditwerk Wohnrente Projesi

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 :) 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

Post to Twitter Twittere Ekle Post to Digg Digg Post to Facebook Facebook

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


EOF (End of Fun)
Özcan Acar

Post to Twitter Twittere Ekle Post to Digg Digg Post to Facebook Facebook

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:

  • Bilgibankası ekibi, bilgibankası üzerinde işlem yapmak için kullanılan tüm sınıfları, bu sınıflar birbirleriyle ilişkili olduğu için aynı paket içine koymalıdır. Bu tekrar kullanımı kolaylaştırır.
  • Tekrar kullanımı desteklemek için oluşturulan paketin bir versiyon numarasıyla yeni sürümünün oluşturulması gerekmektedir.
  • Paket kullanıcıları paket üzerinde yapılan değişikliklerden haberdar edilmelidir. Onlar için kullanabilecekleri yeni bir paket sürümünün oluşturulması yanı sıra, mevcut kodun kırılmasını önlemek için paketin eski versiyonlarının da paralel kullanıma açık tutulması gerekir. Sadece bu durumda paket kullanıcıları paket üzerinde yapılan değişiklerinden etkilenmeden eski versiyonlarla çalışmaya devam edebilirler. Zaman içinde yeni paket versiyonuna geçerek, son değişiklikleri entegre ederler.

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.
Note: There is a file embedded within this post, please visit this post to download the file.


EOF (End of Fun)
Özcan Acar

Post to Twitter Twittere Ekle Post to Digg Digg Post to Facebook Facebook

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
Reply all
Reply to author
Forward
0 new messages