<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kurumsal Java Yazılımı &#187; Proje Günlüğü</title>
	<atom:link href="http://www.kurumsaljava.com/category/projegunlugu/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kurumsaljava.com</link>
	<description>Java Enterprise Architecture by Ozcan Acar</description>
	<lastBuildDate>Fri, 30 Dec 2011 09:28:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Credit Suisse &#8211; Zürich</title>
		<link>http://www.kurumsaljava.com/2011/04/24/credit-suisse-zurich/</link>
		<comments>http://www.kurumsaljava.com/2011/04/24/credit-suisse-zurich/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 07:43:06 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Proje Günlüğü]]></category>
		<category><![CDATA[Corba]]></category>
		<category><![CDATA[Credit Suisse]]></category>
		<category><![CDATA[Mainframe]]></category>
		<category><![CDATA[Webservice]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1344</guid>
		<description><![CDATA[<p>4.4.2011 tarihinden itibaren İsviçre&#8217;nin Zürich kentinde bulunan Credit Suisse bankası için freelance danışman olarak çalışmaya başladım. <span id="more-1344"></span></p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/cs_logo.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/cs_logo.jpg" alt="" title="cs_logo" width="488" height="360" class="aligncenter size-full wp-image-1345" /></a></p>
<p>Banka bünyesindeki uygulamaların çoğunu IBM Mainframe sistemleri üzerinde çalışan PL/1 uygulamaları oluşturuyor. Bu uygulamalar Iona firmasının Corba ORB (Object Request Broker) ürünü kullanılarak diğer sistemler tarafından kullanılır hale getirilmiş. Webservis teknolojilerinin gelişmesi ile Corba teknolojileri yanında Webservis teknolojileri de kullanılmaya başlanmış.</p>
<p>Benim ilk faaliyet alanım, Mainframe üzerinde çalışan Corba ve Webservis uygulamaları için yapılacak performans testlerinin standart bir hale getirilmesi olacak. Bu amaçla testleri otomatik olarak oluşturacak bir generatör programı üzerinde çalışıyorum. Bu generatör, HP Loadrunner programı bünyesinde çalışacak olan Corba ve Webservis servis testlerini otomatik olarak oluşturarak, performans testlerini koşturacak olan test mühendislerinin testlere odaklanmalarını sağlamış olacak.</p>
<p>Credit Suisse bünyesindeki çalışmalarım hakkında gelişmeleri burada sizlerle paylaşmaya devam edeceğim.</p>
<p><i><br />
EOF (End Of Fun)<br />
Özcan Acar<br />
</i></p>
]]></description>
			<content:encoded><![CDATA[<p>4.4.2011 tarihinden itibaren İsviçre&#8217;nin Zürich kentinde bulunan Credit Suisse bankası için freelance danışman olarak çalışmaya başladım. <span id="more-1344"></span></p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/cs_logo.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/cs_logo.jpg" alt="" title="cs_logo" width="488" height="360" class="aligncenter size-full wp-image-1345" /></a></p>
<p>Banka bünyesindeki uygulamaların çoğunu IBM Mainframe sistemleri üzerinde çalışan PL/1 uygulamaları oluşturuyor. Bu uygulamalar Iona firmasının Corba ORB (Object Request Broker) ürünü kullanılarak diğer sistemler tarafından kullanılır hale getirilmiş. Webservis teknolojilerinin gelişmesi ile Corba teknolojileri yanında Webservis teknolojileri de kullanılmaya başlanmış.</p>
<p>Benim ilk faaliyet alanım, Mainframe üzerinde çalışan Corba ve Webservis uygulamaları için yapılacak performans testlerinin standart bir hale getirilmesi olacak. Bu amaçla testleri otomatik olarak oluşturacak bir generatör programı üzerinde çalışıyorum. Bu generatör, HP Loadrunner programı bünyesinde çalışacak olan Corba ve Webservis servis testlerini otomatik olarak oluşturarak, performans testlerini koşturacak olan test mühendislerinin testlere odaklanmalarını sağlamış olacak.</p>
<p>Credit Suisse bünyesindeki çalışmalarım hakkında gelişmeleri burada sizlerle paylaşmaya devam edeceğim.</p>
<p><i><br />
EOF (End Of Fun)<br />
Özcan Acar<br />
</i></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F04%2F24%2Fcredit-suisse-zurich%2F&amp;linkname=Credit%20Suisse%20%26%238211%3B%20Z%C3%BCrich"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/04/24/credit-suisse-zurich/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Corebanking Next Generation</title>
		<link>http://www.kurumsaljava.com/2011/04/17/corebanking-next-generation/</link>
		<comments>http://www.kurumsaljava.com/2011/04/17/corebanking-next-generation/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 09:42:43 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Haberler]]></category>
		<category><![CDATA[Proje Günlüğü]]></category>
		<category><![CDATA[AOP]]></category>
		<category><![CDATA[AspectJ]]></category>
		<category><![CDATA[CBNG]]></category>
		<category><![CDATA[Corebanking]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Nexus]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1282</guid>
		<description><![CDATA[<p>Yaklaşık 10 aylık bir çalışmanın sonunda 1 şubat 2011 tarihinde İşbankası Corebanking projesindeki görevimi tamamladım. Corebanking projesi, İsbankası’nın 2 sene önce başlatmış olduğu, Cobol ile geliştirilen Mainframe sistemlerinden açık sistemlere (Java, J2EE)  geçişi öngören bir proje. Projenin nihayi amacı uzun vadede bankanın alt yapısını tamamen açık sistemlere taşımak ve Mainframe sistemlerini devre dışı bırakmak.</p>
<p><span id="more-1282"></span></p>
<p>Danışman, teknik ekip lideri ve programcı olarak çalışmış olduğum bu 10 aylık zaman diliminde, Corebanking projesindeki faaliyet alanlarım şu şekilde oldu:</p>
<ul>
<li>Test güdümlü yazılımın proje genelinde kullanımı</li>
<li>Continuous Integration ve Continuous Deployment gibi çevik metotların projeye entegrasyonu</li>
<li>Yazılım sürecinin iterasyon bazlı organizasyonu (Extreme Programming)</li>
<li>Build işlemlerinin otomatize edilmesi (Ant,Maven)</li>
<li>Lokal yazılım geliştirme işlemi için Websphere uygulama sunucusunun devre dışı bırakılması ve uygulama sunucusu kullanmak zorunda kalmadan test güdümlü yazılım yapılabilmesi</li>
<li>Lokal testler için gerekli referans verilerinin cachelenmesi ve uygulama sunucusunun start-up zamanının optimize edilmesi</li>
<li>Veri tabanı üzerindeki yükü azaltmak için proje genelinde bir caching mekanizmasinin implementasyonu (hazelcast)</li>
<li>Maven kullanılarak tüm Corebanking projesinin modüler bir yapıya geçirilmesi</li>
<li>Nexus kurulumu ve  otomatik dependency yönetimi</li>
<li>Performans analizi ve logmalası için AOP (Aspect Oriented Programming) kullanımı</li>
<li>Performans testlerini yapılması ve performans testlerinde ortaya çıkan problemlerin lokalizasyonu ve eliminasyonu</li>
<li>Ekibin çevik süreç, çevik metotlar ve tasarım prensipleri konusunda eğitimi</li>
<li>Code ve architecture review</li>
<li>Açık sistemler ile Mainframe arasındaki komunikasyonu sağlamak için REST tabanlı bir mimarinin oluşturulması (JBoss EasyREST)</li>
</ul>
<p>İlk çalışma alanlarımdan birisi build ve deployment işlemlerini otomatize etmek oldu. Bunun için gerekli Ant skriptleri oluşturdum ve build işlemlerinin merkezi bir yerden tetiklenmesini sağladım. </p>
<p>Bir proje bünyesinde kodun sürekli entegre edilmesi (Continuous Integration) önemli ve gerekli bir işlemdir. Bu şekilde entegrasyon problemlerini zamanında lokalize etmek mümkündür. Bu amaçla Corebanking projesi için Cruise Control kullanarak bir sürekli entegrasyon serveri oluşturdum. Bu server programcıların yaptığı her commit sonunda otomatik olarak tüm kodu Clear Case’den alarak derliyor ve mevcut testleri kosturuyor. Altta yer alan resimlerde de görüldüğü gibi bir build monitörü kullanarak, projelerin entegrasyon işlemlerinin ne durumda olduğunu takip etmemiz mümkün. Herhangi bir kırılma olması durumunda gerekli programcılar email aracılığı ile uyarılıyor. Bunun yanısıra entegrasyon monitörü herkesin gözü önünde olduğundan, entegrasyon sürecinin hangi safhada olduğunu görmek her zaman mümkün.</p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_1.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_1.jpg" alt="" title="isbank_1" width="600" height="450" class="aligncenter size-full wp-image-1286" /></a></p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_1.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_2.jpg" alt="" title="isbank_1" width="600" height="450" class="aligncenter size-full wp-image-1286" /></a></p>
<p>Diğer bir faaliyet alanım performans testleri esnasında performans ölçümünde kullanılabilecek metriklerin oluşturulması idi. Bu amaçla AspectJ (Java’da Aspect Oriented Programming yapmak için kullanılan bir framework) kullanarak perfomans aspektleri oluşturdum. Bu aspektleri kullanılan teknolojiye göre (Webservice, Rest, JDBC) metot bazında işlem tamamlama süresini ölçecek şekilde programladım. Tüm proje bu aspektler kullanılarak derlendikten sonra, kod bazında bir değişiklik yapmak zorunda kalmadan, işlem tamamlama sürelerini ölçmek mümkün oldu. </p>
<pre name="code" class="java">

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect(&quot;perthis(execution(public * com.kurumsaljava.core.restapi.*Resource.*(..)))&quot;)
public class RestPerformanceMonitor extends  AbstractPerformanceMonitor
{
    @Before(&quot;execution(public * com.kurumsaljava.restapi.*Resource.*(..))&quot;)
    public void before()
    {
    	startMonitor();
    }

    @After(&quot;execution(public * com.kurumsaljava.restapi.*Resource.*(..))&quot;)
    public void after()
    {
    	stopMonitor(&quot;[performance:rest]&quot;);
    }
}
</pre>
<p>Çevik süreçleri kullanarak iterasyon bazlı proje yönetimi yapabilmek için kullanıcı hikayelerinin  (user story) oluşturulması gerekiyor. Corebanking bünyesindeki bir projenin yazılım sürecini hikaye kartları (story card) kullanarak yapılandırdık. Hikaye kartları üzerinde kullanıcı hikayeleri yer aldı. Aşağıdaki resimlerde görüldüğü gibi çalışma alanımızın bir duvarını hikaye kartlarını barındıracak biçimde şekillendirdik.</p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_3.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_3.jpg" alt="" title="isbank_3" width="600" height="450" class="aligncenter size-full wp-image-1295" /></a></p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_4.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_4.jpg" alt="" title="isbank_3" width="600" height="450" class="aligncenter size-full wp-image-1295" /></a></p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_5.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_5.jpg" alt="" title="isbank_3" width="600" height="450" class="aligncenter size-full wp-image-1295" /></a></p>
<p>Son dört aylık çalışmamın temelini, Corebanking projesinin daha modüler ve geliştirilebilir bir alt yapıya geçirilmesi işlemi oluşturdu. Corebanking uygulamaları, oluşturduğum ve Corebanking Next Generation (CBNG) ismini verdiğim bu yeni alt yapı ile şimdi İşbankasi’nın production sistemlerinde deploy ediliyor. </p>
<p>Neden CBNG&#8217;ye gerek duyulduğunu sizlere kısaca aktarmak istiyorum. Başlangıçta tek bir uygulama olarak yola çıkan Corebanking projesi, zaman içinde büyüyerek, bünyesinde üç ve daha fazla uygulama barındırmaya başlamış. Prensipte birbirlerinden bağımsız olan bu projeler ne yazık ki aynı kod köklerine sahip olduklarından, birbirlerinden bağımsız olarak deploy edilmeleri mümkün olmuyordu. Yaşadığımız en büyük sorun, hazır olmayan ve test edilmemiş kodun, Corebanking bünyesindeki herhangi bir uygulamanın test ya da production sistemlerine çıkmayı istemesi durumunda, bu projeyle beraber gitmek zorunda olmasıydı, çünkü tüm Corebanking uygulamaları bir EAR dosyası olarak deploy ediliyordu. Bir başka sorun ise, proje yöneticilerinin sürekli kendi test ya da production çıkışlarını diğer projelerle koordine etmek zorunda olmaları idi. Bu şartlar altında yeni Corebanking uygulamalarının geliştirilmesi, yani binanın üzerinde yeni katlar çıkılması imkansız bir hal alıyordu.</p>
<p>Buradan yola çıkarak mimari ekip / teknik lider toplantılari bünyesinde Corebanking Next Generation alt yapısına geçiş fikri oluştu ve kısa bir zaman sonra bu yeni alt yapıyı oluşturmak için çalışmalara başladım.</p>
<p>Prensip olarak yeni alt yapının &#8220;Programming in the large&#8221; modeline göre tasarlanması gerekiyordu. Bu modele göre proje bünyesindeki birçok alt proje, ufak ekipler tarafından, birbirlerini etkilemeden, versiyonlanmış modüler ve komponentler kullanılarak geliştirilebilir hale geliyor.</p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_6.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_6.jpg" alt="" title="isbank_6" width="582" height="431" class="aligncenter size-full wp-image-1300"/></a></p>
<p>Yeni alt yapı büyük bir gökdelen inşa etmek yerine, bir site oluşturarak, bu site içerisinde 2-3 katlı villalar kurulmasına izin veriyor. Her bir villayı bir proje olarak düşünürsek, ekipler birbirlerinden bağımsız olarak kendi villalarını oluşturabiliyorlar.</p>
<p>Kulağa hoş gelen bu model, ne yazik ki 2 senelik bir kod tabanına sahip bir projeden yola çıkıldığında uygulaması çok zor bir hal alabilir. Karşılaştığım en büyük problemlerden birisi, her proje tarafından kullanılan ortak sınıfların lokalize edilmesi ve her proje tarafından kullanılabilir bir modül haline getirilmesi oldu. Bunun yanısıra sınıflar arasında sirküler bağımlılıkların (circular dependency)  olması, ortak kullanılabilir modüllerin ortaya çıkmasını zorlayan bir durumdu. Yer yer DRY (Do  not repear yourself) prensibine uyulmadığı için aynı özellikleri taşıyan sınıfların birden fazla lokasyonda bulunması ve konsolide edilmesi karşılaştığım diğer bir sorundu.</p>
<p>İşe mevcut tüm projeleri Maven projesi olacak şekilde yeniden yapılandırarak başladım. Daha sonra Corebanking bünyesindeki en ufak çaplı projeyi seçerek, bu projeyi yeni modele uygun şekilde yeniden yapılandırdım. Bu esnada diğer projelerinde kullanabileceği ortak modüller şekillenmeye başladı. Bu şekilde adım adım ilerleyerek ilk Corebanking uygulamasını CBNG konform hale getirdim. Bu işlemin ardından projenin tüm testlerini (1000 üzerinde acceptance testleri) koşturarak, yeni yapıyı test ettik. Testler yüzde yüz çalışır hale gelinceye kadar yeni alt yapıyı rekonfigüre ettim. Bu işlemler tamamlandıktan sonra yeni alt yapıyı programcı ekibe teslim ettim. Bu şekilde yeni alt yapı sahada yayılmaya başladı. Bu noktadan itibaren iki Corebanking uygulaması, eski ve yeni dünya olarak paralel yaşamaya başladı. Tüm projeyi durdurup, 1-2 ay yeni alt yapıyı oluşturmak için ayıramayacağımız için bu şekilde bir seçim yapmak zorunda kaldık.</p>
<p>Kısa bir zaman sonra ilk CBNG uygulaması bir EAR dosyası olarak production sistemlerinde deploy edildi. Akabinde diğer bir Corebanking uygulamasını aynı şemayi takip ederek eski alt yapıdan yeni alt yapıya uyarladım ve sahada kullanılır hale gelmesini sağladım. Bu sürecin sonunda Corebanking tamemen transform edilmiş ve CBNG olarak hayatını sürdürmeye devam ediyor olacak. Bu gerçekleşene kadar eski ve yeni alt yapı iki değişik EAR olarak yanyana yaşamaya devam edecek.</p>
<p>Lokal repository olarak Nexus serverini kurdum. Bu server bünyesinde ortak kullanılan tüm modüller versiyonlanmış JAR dosyalar olarak yer aldı. Nexus ve Maven bağımlılıkların otomatik yönetimini ve kod birimlerinin ortak ve yeniden kullanımını sağlayan alt  yapı komponentleri. Bu şekilde herhangi bir CBNG projesi ihtiyaç duydugu bir modülü Nexus‘dan temin edebilir. Aynı şekilde bu proje diğer projelere sunmak istediği modülleri versiyonlanmış bir Jar dosyası olarak Nexus bünyesine katabilir.</p>
<p>Benim için şüphesiz en heyecan verici faaliyet alanı CBNG oldu. Geliştirme plarformu olarak kullandığımız RAD 7 (Eclipse 3.2)  mümkün olan tüm engelleri ortaya koyarak, yaptığım işin hergün heyecan verici kalmasını sağladı <img src='http://www.kurumsaljava.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  En büyük sorunlardan birisi RAD‘ın eski bir Eclipse versiyonu olduğu için M2Eclipse pluginini aktüel versiyonunda kullanamıyor olmamdı.  Eski ve birçok bugı olan bir M2Eclipse plugin versiyonu ile çalışmanın ne kadar ve heyecan verici olabileceğini düsünebilirsiniz <img src='http://www.kurumsaljava.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Oluşan birçok problem için birçok workaround bulmak zorunda kaldım. Bu kadar sorunla karşılaşacağımı önceden biliyor olsaydım, acaba CBNG‘yi hayata geçirmeye kalkarmıydım? Beni tanıyanlar bu sorunu cevabını biliyor <img src='http://www.kurumsaljava.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Corebanking Next Generation (CBNG)  hakkında yazabileceğim sayfalar dolusu anılarım var. Lakin banka bünyesinde olup bitenleri çok detaylı bir şekilde anlatmak doğru olmaz. Danışman ya da banka çalısanı olarak dikkat etmemiz gereken en önemli konulardan birisi, gizlilik prensibine uymaktır.</p>
<p>Corebanking projesi bünyesinde birçok yetenekli programcıyla çalışma fırsatı buldum. Bilgi alışverişine açık bir ortamda çalışmak gerçekten çok zevk vericiydi. Bu programcı arkadaşlara bu vesile ile buradan kucak dolusu selam ve sevgilerimi gönderiyorum.</p>
<p>EOF ( End of Fun)</p>
<p>Özcan Acar</p>
]]></description>
			<content:encoded><![CDATA[<p>Yaklaşık 10 aylık bir çalışmanın sonunda 1 şubat 2011 tarihinde İşbankası Corebanking projesindeki görevimi tamamladım. Corebanking projesi, İsbankası’nın 2 sene önce başlatmış olduğu, Cobol ile geliştirilen Mainframe sistemlerinden açık sistemlere (Java, J2EE)  geçişi öngören bir proje. Projenin nihayi amacı uzun vadede bankanın alt yapısını tamamen açık sistemlere taşımak ve Mainframe sistemlerini devre dışı bırakmak.</p>
<p><span id="more-1282"></span></p>
<p>Danışman, teknik ekip lideri ve programcı olarak çalışmış olduğum bu 10 aylık zaman diliminde, Corebanking projesindeki faaliyet alanlarım şu şekilde oldu:</p>
<ul>
<li>Test güdümlü yazılımın proje genelinde kullanımı</li>
<li>Continuous Integration ve Continuous Deployment gibi çevik metotların projeye entegrasyonu</li>
<li>Yazılım sürecinin iterasyon bazlı organizasyonu (Extreme Programming)</li>
<li>Build işlemlerinin otomatize edilmesi (Ant,Maven)</li>
<li>Lokal yazılım geliştirme işlemi için Websphere uygulama sunucusunun devre dışı bırakılması ve uygulama sunucusu kullanmak zorunda kalmadan test güdümlü yazılım yapılabilmesi</li>
<li>Lokal testler için gerekli referans verilerinin cachelenmesi ve uygulama sunucusunun start-up zamanının optimize edilmesi</li>
<li>Veri tabanı üzerindeki yükü azaltmak için proje genelinde bir caching mekanizmasinin implementasyonu (hazelcast)</li>
<li>Maven kullanılarak tüm Corebanking projesinin modüler bir yapıya geçirilmesi</li>
<li>Nexus kurulumu ve  otomatik dependency yönetimi</li>
<li>Performans analizi ve logmalası için AOP (Aspect Oriented Programming) kullanımı</li>
<li>Performans testlerini yapılması ve performans testlerinde ortaya çıkan problemlerin lokalizasyonu ve eliminasyonu</li>
<li>Ekibin çevik süreç, çevik metotlar ve tasarım prensipleri konusunda eğitimi</li>
<li>Code ve architecture review</li>
<li>Açık sistemler ile Mainframe arasındaki komunikasyonu sağlamak için REST tabanlı bir mimarinin oluşturulması (JBoss EasyREST)</li>
</ul>
<p>İlk çalışma alanlarımdan birisi build ve deployment işlemlerini otomatize etmek oldu. Bunun için gerekli Ant skriptleri oluşturdum ve build işlemlerinin merkezi bir yerden tetiklenmesini sağladım. </p>
<p>Bir proje bünyesinde kodun sürekli entegre edilmesi (Continuous Integration) önemli ve gerekli bir işlemdir. Bu şekilde entegrasyon problemlerini zamanında lokalize etmek mümkündür. Bu amaçla Corebanking projesi için Cruise Control kullanarak bir sürekli entegrasyon serveri oluşturdum. Bu server programcıların yaptığı her commit sonunda otomatik olarak tüm kodu Clear Case’den alarak derliyor ve mevcut testleri kosturuyor. Altta yer alan resimlerde de görüldüğü gibi bir build monitörü kullanarak, projelerin entegrasyon işlemlerinin ne durumda olduğunu takip etmemiz mümkün. Herhangi bir kırılma olması durumunda gerekli programcılar email aracılığı ile uyarılıyor. Bunun yanısıra entegrasyon monitörü herkesin gözü önünde olduğundan, entegrasyon sürecinin hangi safhada olduğunu görmek her zaman mümkün.</p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_1.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_1.jpg" alt="" title="isbank_1" width="600" height="450" class="aligncenter size-full wp-image-1286" /></a></p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_1.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_2.jpg" alt="" title="isbank_1" width="600" height="450" class="aligncenter size-full wp-image-1286" /></a></p>
<p>Diğer bir faaliyet alanım performans testleri esnasında performans ölçümünde kullanılabilecek metriklerin oluşturulması idi. Bu amaçla AspectJ (Java’da Aspect Oriented Programming yapmak için kullanılan bir framework) kullanarak perfomans aspektleri oluşturdum. Bu aspektleri kullanılan teknolojiye göre (Webservice, Rest, JDBC) metot bazında işlem tamamlama süresini ölçecek şekilde programladım. Tüm proje bu aspektler kullanılarak derlendikten sonra, kod bazında bir değişiklik yapmak zorunda kalmadan, işlem tamamlama sürelerini ölçmek mümkün oldu. </p>
<pre name="code" class="java">

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect(&quot;perthis(execution(public * com.kurumsaljava.core.restapi.*Resource.*(..)))&quot;)
public class RestPerformanceMonitor extends  AbstractPerformanceMonitor
{
    @Before(&quot;execution(public * com.kurumsaljava.restapi.*Resource.*(..))&quot;)
    public void before()
    {
    	startMonitor();
    }

    @After(&quot;execution(public * com.kurumsaljava.restapi.*Resource.*(..))&quot;)
    public void after()
    {
    	stopMonitor(&quot;[performance:rest]&quot;);
    }
}
</pre>
<p>Çevik süreçleri kullanarak iterasyon bazlı proje yönetimi yapabilmek için kullanıcı hikayelerinin  (user story) oluşturulması gerekiyor. Corebanking bünyesindeki bir projenin yazılım sürecini hikaye kartları (story card) kullanarak yapılandırdık. Hikaye kartları üzerinde kullanıcı hikayeleri yer aldı. Aşağıdaki resimlerde görüldüğü gibi çalışma alanımızın bir duvarını hikaye kartlarını barındıracak biçimde şekillendirdik.</p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_3.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_3.jpg" alt="" title="isbank_3" width="600" height="450" class="aligncenter size-full wp-image-1295" /></a></p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_4.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_4.jpg" alt="" title="isbank_3" width="600" height="450" class="aligncenter size-full wp-image-1295" /></a></p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_5.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_5.jpg" alt="" title="isbank_3" width="600" height="450" class="aligncenter size-full wp-image-1295" /></a></p>
<p>Son dört aylık çalışmamın temelini, Corebanking projesinin daha modüler ve geliştirilebilir bir alt yapıya geçirilmesi işlemi oluşturdu. Corebanking uygulamaları, oluşturduğum ve Corebanking Next Generation (CBNG) ismini verdiğim bu yeni alt yapı ile şimdi İşbankasi’nın production sistemlerinde deploy ediliyor. </p>
<p>Neden CBNG&#8217;ye gerek duyulduğunu sizlere kısaca aktarmak istiyorum. Başlangıçta tek bir uygulama olarak yola çıkan Corebanking projesi, zaman içinde büyüyerek, bünyesinde üç ve daha fazla uygulama barındırmaya başlamış. Prensipte birbirlerinden bağımsız olan bu projeler ne yazık ki aynı kod köklerine sahip olduklarından, birbirlerinden bağımsız olarak deploy edilmeleri mümkün olmuyordu. Yaşadığımız en büyük sorun, hazır olmayan ve test edilmemiş kodun, Corebanking bünyesindeki herhangi bir uygulamanın test ya da production sistemlerine çıkmayı istemesi durumunda, bu projeyle beraber gitmek zorunda olmasıydı, çünkü tüm Corebanking uygulamaları bir EAR dosyası olarak deploy ediliyordu. Bir başka sorun ise, proje yöneticilerinin sürekli kendi test ya da production çıkışlarını diğer projelerle koordine etmek zorunda olmaları idi. Bu şartlar altında yeni Corebanking uygulamalarının geliştirilmesi, yani binanın üzerinde yeni katlar çıkılması imkansız bir hal alıyordu.</p>
<p>Buradan yola çıkarak mimari ekip / teknik lider toplantılari bünyesinde Corebanking Next Generation alt yapısına geçiş fikri oluştu ve kısa bir zaman sonra bu yeni alt yapıyı oluşturmak için çalışmalara başladım.</p>
<p>Prensip olarak yeni alt yapının &#8220;Programming in the large&#8221; modeline göre tasarlanması gerekiyordu. Bu modele göre proje bünyesindeki birçok alt proje, ufak ekipler tarafından, birbirlerini etkilemeden, versiyonlanmış modüler ve komponentler kullanılarak geliştirilebilir hale geliyor.</p>
<p><a href="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_6.jpg"><img src="http://www.kurumsaljava.com/wp-content/uploads/2011/04/isbank_6.jpg" alt="" title="isbank_6" width="582" height="431" class="aligncenter size-full wp-image-1300"/></a></p>
<p>Yeni alt yapı büyük bir gökdelen inşa etmek yerine, bir site oluşturarak, bu site içerisinde 2-3 katlı villalar kurulmasına izin veriyor. Her bir villayı bir proje olarak düşünürsek, ekipler birbirlerinden bağımsız olarak kendi villalarını oluşturabiliyorlar.</p>
<p>Kulağa hoş gelen bu model, ne yazik ki 2 senelik bir kod tabanına sahip bir projeden yola çıkıldığında uygulaması çok zor bir hal alabilir. Karşılaştığım en büyük problemlerden birisi, her proje tarafından kullanılan ortak sınıfların lokalize edilmesi ve her proje tarafından kullanılabilir bir modül haline getirilmesi oldu. Bunun yanısıra sınıflar arasında sirküler bağımlılıkların (circular dependency)  olması, ortak kullanılabilir modüllerin ortaya çıkmasını zorlayan bir durumdu. Yer yer DRY (Do  not repear yourself) prensibine uyulmadığı için aynı özellikleri taşıyan sınıfların birden fazla lokasyonda bulunması ve konsolide edilmesi karşılaştığım diğer bir sorundu.</p>
<p>İşe mevcut tüm projeleri Maven projesi olacak şekilde yeniden yapılandırarak başladım. Daha sonra Corebanking bünyesindeki en ufak çaplı projeyi seçerek, bu projeyi yeni modele uygun şekilde yeniden yapılandırdım. Bu esnada diğer projelerinde kullanabileceği ortak modüller şekillenmeye başladı. Bu şekilde adım adım ilerleyerek ilk Corebanking uygulamasını CBNG konform hale getirdim. Bu işlemin ardından projenin tüm testlerini (1000 üzerinde acceptance testleri) koşturarak, yeni yapıyı test ettik. Testler yüzde yüz çalışır hale gelinceye kadar yeni alt yapıyı rekonfigüre ettim. Bu işlemler tamamlandıktan sonra yeni alt yapıyı programcı ekibe teslim ettim. Bu şekilde yeni alt yapı sahada yayılmaya başladı. Bu noktadan itibaren iki Corebanking uygulaması, eski ve yeni dünya olarak paralel yaşamaya başladı. Tüm projeyi durdurup, 1-2 ay yeni alt yapıyı oluşturmak için ayıramayacağımız için bu şekilde bir seçim yapmak zorunda kaldık.</p>
<p>Kısa bir zaman sonra ilk CBNG uygulaması bir EAR dosyası olarak production sistemlerinde deploy edildi. Akabinde diğer bir Corebanking uygulamasını aynı şemayi takip ederek eski alt yapıdan yeni alt yapıya uyarladım ve sahada kullanılır hale gelmesini sağladım. Bu sürecin sonunda Corebanking tamemen transform edilmiş ve CBNG olarak hayatını sürdürmeye devam ediyor olacak. Bu gerçekleşene kadar eski ve yeni alt yapı iki değişik EAR olarak yanyana yaşamaya devam edecek.</p>
<p>Lokal repository olarak Nexus serverini kurdum. Bu server bünyesinde ortak kullanılan tüm modüller versiyonlanmış JAR dosyalar olarak yer aldı. Nexus ve Maven bağımlılıkların otomatik yönetimini ve kod birimlerinin ortak ve yeniden kullanımını sağlayan alt  yapı komponentleri. Bu şekilde herhangi bir CBNG projesi ihtiyaç duydugu bir modülü Nexus‘dan temin edebilir. Aynı şekilde bu proje diğer projelere sunmak istediği modülleri versiyonlanmış bir Jar dosyası olarak Nexus bünyesine katabilir.</p>
<p>Benim için şüphesiz en heyecan verici faaliyet alanı CBNG oldu. Geliştirme plarformu olarak kullandığımız RAD 7 (Eclipse 3.2)  mümkün olan tüm engelleri ortaya koyarak, yaptığım işin hergün heyecan verici kalmasını sağladı <img src='http://www.kurumsaljava.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  En büyük sorunlardan birisi RAD‘ın eski bir Eclipse versiyonu olduğu için M2Eclipse pluginini aktüel versiyonunda kullanamıyor olmamdı.  Eski ve birçok bugı olan bir M2Eclipse plugin versiyonu ile çalışmanın ne kadar ve heyecan verici olabileceğini düsünebilirsiniz <img src='http://www.kurumsaljava.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Oluşan birçok problem için birçok workaround bulmak zorunda kaldım. Bu kadar sorunla karşılaşacağımı önceden biliyor olsaydım, acaba CBNG‘yi hayata geçirmeye kalkarmıydım? Beni tanıyanlar bu sorunu cevabını biliyor <img src='http://www.kurumsaljava.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Corebanking Next Generation (CBNG)  hakkında yazabileceğim sayfalar dolusu anılarım var. Lakin banka bünyesinde olup bitenleri çok detaylı bir şekilde anlatmak doğru olmaz. Danışman ya da banka çalısanı olarak dikkat etmemiz gereken en önemli konulardan birisi, gizlilik prensibine uymaktır.</p>
<p>Corebanking projesi bünyesinde birçok yetenekli programcıyla çalışma fırsatı buldum. Bilgi alışverişine açık bir ortamda çalışmak gerçekten çok zevk vericiydi. Bu programcı arkadaşlara bu vesile ile buradan kucak dolusu selam ve sevgilerimi gönderiyorum.</p>
<p>EOF ( End of Fun)</p>
<p>Özcan Acar</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F04%2F17%2Fcorebanking-next-generation%2F&amp;linkname=Corebanking%20Next%20Generation"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/04/17/corebanking-next-generation/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Maven2 ve OutOfMemory</title>
		<link>http://www.kurumsaljava.com/2010/10/26/maven2-ve-outofmemory/</link>
		<comments>http://www.kurumsaljava.com/2010/10/26/maven2-ve-outofmemory/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 08:13:43 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Proje Günlüğü]]></category>
		<category><![CDATA[Püf Noktası]]></category>
		<category><![CDATA[Maven2]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1260</guid>
		<description><![CDATA[<p>Danışman olarak çalıştığım bir projenin modüllerini Maven2 kullanacak şekilde yeniden yapılandırdım. Birçok JAR ve WAR dosyası bir araya gelerek büyük bir EAR dosyası oluşturdu. JAR ve WAR&#8217;ları oluştururken bir sorun yaşamadım, lakin EAR dosyasını alırken durum farkli idi. EAR projesi için <i><b>maven clean install</b></i> komutunu kullandığımda aşağıdaki hata oluşuyordu:</p>
<p><span id="more-1260"></span></p>
<pre name="code" class="java">

java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:2882)
        at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
        at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515)
        at java.lang.StringBuffer.append(StringBuffer.java:306)
        at java.io.StringWriter.write(StringWriter.java:77)
        at hidden.org.codehaus.plexus.util.IOUtil.copy(IOUtil.java:214)
        at hidden.org.codehaus.plexus.util.IOUtil.toString(IOUtil.java:416)
        at hidden.org.codehaus.plexus.util.IOUtil.toString(IOUtil.java:405)
        at org.apache.maven.project.DefaultMavenProjectBuilder.readModel(DefaultMavenProjectBuilder.java:1595)
        at org.apache.maven.project.DefaultMavenProjectBuilder.readModel(DefaultMavenProjectBuilder.java:1571)
        at org.apache.maven.project.DefaultMavenProjectBuilder.findModelFromRepository(DefaultMavenProjectBuilder.java:562)
        at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromRepository(DefaultMavenProjectBuilder.java:251)
        at org.apache.maven.project.artifact.MavenMetadataSource.retrieveRelocatedProject(MavenMetadataSource.java:163)
        at org.apache.maven.project.artifact.MavenMetadataSource.retrieveRelocatedArtifact(MavenMetadataSource.java:94)
        at org.apache.maven.artifact.resolver.DefaultArtifactCollector.recurse(DefaultArtifactCollector.java:387)
        at org.apache.maven.artifact.resolver.DefaultArtifactCollector.recurse(DefaultArtifactCollector.java:435)
        at org.apache.maven.artifact.resolver.DefaultArtifactCollector.recurse(DefaultArtifactCollector.java:435)
        at org.apache.maven.artifact.resolver.DefaultArtifactCollector.collect(DefaultArtifactCollector.java:74)
        at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:316)
        at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:304)
        at org.apache.maven.plugin.DefaultPluginManager.resolveTransitiveDependencies(DefaultPluginManager.java:1499)
        at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:442)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
        at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Tue Oct 26 11:40:45 EEST 2010
[INFO] Final Memory: 9M/9M
[INFO] ------------------------------------------------------------------------
C:\CCVIEWS\itcs_oacar_UCM_YUKSELIS\CBVOB01\CorebankingAppBuilder&gt;
</pre>
<p>EAR dosyası birçok JAR ve WAR&#8217;dan oluştuğu için doğal olarak büyük bir hacme sahip. Default Maven2 ayarları bu boyuttaki bir EAR dosyasını oluşturmak için yeterli değil.</p>
<p>Bu sorunu aşmak için Maven&#8217;in daha fazla hafıza alanını kullanabilmesi gerekiyor. Bunu sağlamak için Windows işletim sistem ile çalışıyorsanız, console altında </p>
<p><b>set MAVEN_OPTS=-Xmx512m </b></p>
<p>ya da Linux/Unix altında</p>
<p><b>export MAVEN_OPTS=-Xmx512m</b></p>
<p>komutunu girmeniz yeterli. Bir sonraki mvn komutu tanımladığınız şekilde yeni hafıza alanı ile çalşacaktır.</p>
]]></description>
			<content:encoded><![CDATA[<p>Danışman olarak çalıştığım bir projenin modüllerini Maven2 kullanacak şekilde yeniden yapılandırdım. Birçok JAR ve WAR dosyası bir araya gelerek büyük bir EAR dosyası oluşturdu. JAR ve WAR&#8217;ları oluştururken bir sorun yaşamadım, lakin EAR dosyasını alırken durum farkli idi. EAR projesi için <i><b>maven clean install</b></i> komutunu kullandığımda aşağıdaki hata oluşuyordu:</p>
<p><span id="more-1260"></span></p>
<pre name="code" class="java">

java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:2882)
        at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
        at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515)
        at java.lang.StringBuffer.append(StringBuffer.java:306)
        at java.io.StringWriter.write(StringWriter.java:77)
        at hidden.org.codehaus.plexus.util.IOUtil.copy(IOUtil.java:214)
        at hidden.org.codehaus.plexus.util.IOUtil.toString(IOUtil.java:416)
        at hidden.org.codehaus.plexus.util.IOUtil.toString(IOUtil.java:405)
        at org.apache.maven.project.DefaultMavenProjectBuilder.readModel(DefaultMavenProjectBuilder.java:1595)
        at org.apache.maven.project.DefaultMavenProjectBuilder.readModel(DefaultMavenProjectBuilder.java:1571)
        at org.apache.maven.project.DefaultMavenProjectBuilder.findModelFromRepository(DefaultMavenProjectBuilder.java:562)
        at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromRepository(DefaultMavenProjectBuilder.java:251)
        at org.apache.maven.project.artifact.MavenMetadataSource.retrieveRelocatedProject(MavenMetadataSource.java:163)
        at org.apache.maven.project.artifact.MavenMetadataSource.retrieveRelocatedArtifact(MavenMetadataSource.java:94)
        at org.apache.maven.artifact.resolver.DefaultArtifactCollector.recurse(DefaultArtifactCollector.java:387)
        at org.apache.maven.artifact.resolver.DefaultArtifactCollector.recurse(DefaultArtifactCollector.java:435)
        at org.apache.maven.artifact.resolver.DefaultArtifactCollector.recurse(DefaultArtifactCollector.java:435)
        at org.apache.maven.artifact.resolver.DefaultArtifactCollector.collect(DefaultArtifactCollector.java:74)
        at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:316)
        at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:304)
        at org.apache.maven.plugin.DefaultPluginManager.resolveTransitiveDependencies(DefaultPluginManager.java:1499)
        at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:442)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
        at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Tue Oct 26 11:40:45 EEST 2010
[INFO] Final Memory: 9M/9M
[INFO] ------------------------------------------------------------------------
C:\CCVIEWS\itcs_oacar_UCM_YUKSELIS\CBVOB01\CorebankingAppBuilder&gt;
</pre>
<p>EAR dosyası birçok JAR ve WAR&#8217;dan oluştuğu için doğal olarak büyük bir hacme sahip. Default Maven2 ayarları bu boyuttaki bir EAR dosyasını oluşturmak için yeterli değil.</p>
<p>Bu sorunu aşmak için Maven&#8217;in daha fazla hafıza alanını kullanabilmesi gerekiyor. Bunu sağlamak için Windows işletim sistem ile çalışıyorsanız, console altında </p>
<p><b>set MAVEN_OPTS=-Xmx512m </b></p>
<p>ya da Linux/Unix altında</p>
<p><b>export MAVEN_OPTS=-Xmx512m</b></p>
<p>komutunu girmeniz yeterli. Bir sonraki mvn komutu tanımladığınız şekilde yeni hafıza alanı ile çalşacaktır.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2010%2F10%2F26%2Fmaven2-ve-outofmemory%2F&amp;linkname=Maven2%20ve%20OutOfMemory"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2010/10/26/maven2-ve-outofmemory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kreditwerk Wohnrente Projesi</title>
		<link>http://www.kurumsaljava.com/2009/12/09/kreditwerk-wohnrente-projesi/</link>
		<comments>http://www.kurumsaljava.com/2009/12/09/kreditwerk-wohnrente-projesi/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 10:09:52 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Proje Günlüğü]]></category>
		<category><![CDATA[Freelancer]]></category>
		<category><![CDATA[Proje]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=990</guid>
		<description><![CDATA[<p>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&#8217;de bugün itibariyle 5,5 ayı doldurmuş bulunuyorum <img src='http://www.kurumsaljava.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  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.</p>
<p><span id="more-990"></span></p>
<p><center><img src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&#038;d=prod&#038;k=kurumsaljava_352"/></center></p>
<p>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.</p>
<p>Benim çalıştığım projenin ismi <b>Wohnrente 2009</b>. Alman hümümeti emeklilik sonrasında çalışanların ev alabilmesi için her sene 600 EUR&#8217;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.</p>
<p>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.</p>
<p>JAXB ile <b>unmarshalling</b> (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 <b>OutOfMemory</b> 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.</p>
<pre name="code" class="java">

// Liste mit den MZahlungsanstoss Objekten
			List&lt;Zahlungsanstoss&gt; list = new ArrayList&lt;Zahlungsanstoss&gt;();

			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();
</pre>
<p>EJB3 komponentlerini tamamen <a href="http://www.kurumsaljava.com/2008/11/26/test-gudumlu-yazilim-test-driven-development-tdd/" target="_blank">test güdümlü (TDD &#8211; Test Driven Development)</a> geliştiriyorum. EJB komponentleri POJO sınıfları olduklarından test güdümlü geliştirilmeleri oldukça kolay. Bu şekilde %85&#8242;in üzerinde test kapsama alanı oluşturabildim. Bu yazılım metriğini elde etmek için <a href="http://www.eclemma.org/" target="_blank">EclEmma</a> aracını kullanıyorum.</p>
<p>JAXB teknoloji kullanılarak nasıl Java mapping sınıflarının oluşturulduğunu <a href="http://www.kurumsaljava.com/2009/10/01/jaxb-ile-java-xml-mapping/" target="_blank">daha önceki bir blog kaydımda</a> 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&#8217;dan Java nesneleri oluşturmak için aşağıdaki Ant hedefini (target) kullanıyorum:</p>
<pre name="code" class="java">

&lt;target name=&quot;ZusyAA01&quot; description=&quot;Compile all Java source files&quot;&gt;
		&lt;echo message=&quot;Compiling the schema...&quot; /&gt;
		&lt;mkdir dir=&quot;gen-src&quot; /&gt;
		&lt;xjc  schema=&quot;${basedir}/etc/jaxb/zusyaa01/ZusyAA01.xsd&quot;  package=&quot;de.***.mapping&quot;  destdir=&quot;${basedir}/gen-src&quot;&gt;
			&lt;produces dir=&quot;gen-src&quot; includes=&quot;**/*.java&quot; /&gt;
		&lt;/xjc&gt;
	&lt;/target&gt;
</pre>
<p>İlerleyen proje günlerinde üzerinde çalıştığım konular ve karşılaştığım sorunlar hakkında sizinle paylaşıma devam edeceğim.</p>
<p><i><br />
EOF ( Enf Of Fun )<br />
Özcan Acar<br />
</i></p>
]]></description>
			<content:encoded><![CDATA[<p>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&#8217;de bugün itibariyle 5,5 ayı doldurmuş bulunuyorum <img src='http://www.kurumsaljava.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  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.</p>
<p><span id="more-990"></span></p>
<p><center><img src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&#038;d=prod&#038;k=kurumsaljava_352"/></center></p>
<p>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.</p>
<p>Benim çalıştığım projenin ismi <b>Wohnrente 2009</b>. Alman hümümeti emeklilik sonrasında çalışanların ev alabilmesi için her sene 600 EUR&#8217;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.</p>
<p>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.</p>
<p>JAXB ile <b>unmarshalling</b> (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 <b>OutOfMemory</b> 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.</p>
<pre name="code" class="java">

// Liste mit den MZahlungsanstoss Objekten
			List&lt;Zahlungsanstoss&gt; list = new ArrayList&lt;Zahlungsanstoss&gt;();

			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();
</pre>
<p>EJB3 komponentlerini tamamen <a href="http://www.kurumsaljava.com/2008/11/26/test-gudumlu-yazilim-test-driven-development-tdd/" target="_blank">test güdümlü (TDD &#8211; Test Driven Development)</a> geliştiriyorum. EJB komponentleri POJO sınıfları olduklarından test güdümlü geliştirilmeleri oldukça kolay. Bu şekilde %85&#8242;in üzerinde test kapsama alanı oluşturabildim. Bu yazılım metriğini elde etmek için <a href="http://www.eclemma.org/" target="_blank">EclEmma</a> aracını kullanıyorum.</p>
<p>JAXB teknoloji kullanılarak nasıl Java mapping sınıflarının oluşturulduğunu <a href="http://www.kurumsaljava.com/2009/10/01/jaxb-ile-java-xml-mapping/" target="_blank">daha önceki bir blog kaydımda</a> 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&#8217;dan Java nesneleri oluşturmak için aşağıdaki Ant hedefini (target) kullanıyorum:</p>
<pre name="code" class="java">

&lt;target name=&quot;ZusyAA01&quot; description=&quot;Compile all Java source files&quot;&gt;
		&lt;echo message=&quot;Compiling the schema...&quot; /&gt;
		&lt;mkdir dir=&quot;gen-src&quot; /&gt;
		&lt;xjc  schema=&quot;${basedir}/etc/jaxb/zusyaa01/ZusyAA01.xsd&quot;  package=&quot;de.***.mapping&quot;  destdir=&quot;${basedir}/gen-src&quot;&gt;
			&lt;produces dir=&quot;gen-src&quot; includes=&quot;**/*.java&quot; /&gt;
		&lt;/xjc&gt;
	&lt;/target&gt;
</pre>
<p>İlerleyen proje günlerinde üzerinde çalıştığım konular ve karşılaştığım sorunlar hakkında sizinle paylaşıma devam edeceğim.</p>
<p><i><br />
EOF ( Enf Of Fun )<br />
Özcan Acar<br />
</i></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2009%2F12%2F09%2Fkreditwerk-wohnrente-projesi%2F&amp;linkname=Kreditwerk%20Wohnrente%20Projesi"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2009/12/09/kreditwerk-wohnrente-projesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dekra Projesi</title>
		<link>http://www.kurumsaljava.com/2009/01/08/dekra-projesi/</link>
		<comments>http://www.kurumsaljava.com/2009/01/08/dekra-projesi/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 16:24:40 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Proje Günlüğü]]></category>
		<category><![CDATA[Dekra]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=396</guid>
		<description><![CDATA[<p style="text-align: left;">7.1.2009 tarihinden itibaren Stuttgart (Almanya) şehrinde bulunan <a href="http://www.dekra.de" target="_blank">Dekra</a> firması için J2EE danışman (freelancer) olarak işe başladım. 6 aylık proje sözleşmesi imzaladım. Dekra mühendislik hizmetleri veren bir firma. Hizmet yelpazesi otomobil vizesinden, binalarda kullanılan asansörlerin kontrolüne kadar değişik alanları kapsıyor.</p>
<p><span id="more-396"></span></p>
<p style="text-align: center;"> </p>
<p style="text-align: center;"><strong>Dekra Merkez binası (Stuttgart - Almanya)</strong><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_72" alt="" width="400" height="267" /></p>
<p>Dekra&#8217;nın büyüklüğü hakkında fikir edinebilmeniz için firma hakkında bazı bilgiler:</p>
<ul>
<li>15.000 yakın çalışanı var.</li>
<li>4000 den fazla mühendis Almanya çapında kontrol yapıyor.</li>
<li>Yıllık cirosu 1.5 milyar EUR civarı.</li>
<li>Almanya çapında 250 ye yakın kontrol merkezi bulunuyor.</li>
</ul>
<p>Dekra dört hizmet biriminden oluşuyor (BU = Business UNIT):</p>
<ul>
<li>BU1 &#8211; Otomotif</li>
<li>BU2 &#8211; Endüstri</li>
<li>BU3 &#8211; Qualification / Consulting</li>
<li>BU4 &#8211; International</li>
</ul>
<p>Dekra&#8217;yı ben daha önce otomobiller için yaptıkları vize kontrollerinden tanırdım. Bunun yanısıra meydana gelen kazalarda Dekra mühendisleri hasar tespiti yapmaktalar. Projeye başladıktan sonra Dekra&#8217;nın diğer çalışma alanlarını da tanıma fırsatı buldum.</p>
<p>Dekra için oluşturulan altyapı tamamen J2EE tabanlı. Kontrol merkezleri ve mühendisler, kullandıkları mobil bilgisayarlar (notebook) aracılığıyla WAN (wide area network) üzerinden merkez ile bağlantı kuruyorlar ve oluşan tüm verileri merkeze aktarıyorlar. Veriler JMS (java Messaging System) üzerinden merkeze iletiliyor. Bu şekilde kullanılan komponentler hata toleransı yüksek bir altyapı meydana getiriyorlar.</p>
<p>Projenin ilerleyen safhalarında izlenimlerimi sizinle paylaşacağım.</p>
]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">7.1.2009 tarihinden itibaren Stuttgart (Almanya) şehrinde bulunan <a href="http://www.dekra.de" target="_blank">Dekra</a> firması için J2EE danışman (freelancer) olarak işe başladım. 6 aylık proje sözleşmesi imzaladım. Dekra mühendislik hizmetleri veren bir firma. Hizmet yelpazesi otomobil vizesinden, binalarda kullanılan asansörlerin kontrolüne kadar değişik alanları kapsıyor.</p>
<p><span id="more-396"></span></p>
<p style="text-align: center;"> </p>
<p style="text-align: center;"><strong>Dekra Merkez binası (Stuttgart - Almanya)</strong><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_72" alt="" width="400" height="267" /></p>
<p>Dekra&#8217;nın büyüklüğü hakkında fikir edinebilmeniz için firma hakkında bazı bilgiler:</p>
<ul>
<li>15.000 yakın çalışanı var.</li>
<li>4000 den fazla mühendis Almanya çapında kontrol yapıyor.</li>
<li>Yıllık cirosu 1.5 milyar EUR civarı.</li>
<li>Almanya çapında 250 ye yakın kontrol merkezi bulunuyor.</li>
</ul>
<p>Dekra dört hizmet biriminden oluşuyor (BU = Business UNIT):</p>
<ul>
<li>BU1 &#8211; Otomotif</li>
<li>BU2 &#8211; Endüstri</li>
<li>BU3 &#8211; Qualification / Consulting</li>
<li>BU4 &#8211; International</li>
</ul>
<p>Dekra&#8217;yı ben daha önce otomobiller için yaptıkları vize kontrollerinden tanırdım. Bunun yanısıra meydana gelen kazalarda Dekra mühendisleri hasar tespiti yapmaktalar. Projeye başladıktan sonra Dekra&#8217;nın diğer çalışma alanlarını da tanıma fırsatı buldum.</p>
<p>Dekra için oluşturulan altyapı tamamen J2EE tabanlı. Kontrol merkezleri ve mühendisler, kullandıkları mobil bilgisayarlar (notebook) aracılığıyla WAN (wide area network) üzerinden merkez ile bağlantı kuruyorlar ve oluşan tüm verileri merkeze aktarıyorlar. Veriler JMS (java Messaging System) üzerinden merkeze iletiliyor. Bu şekilde kullanılan komponentler hata toleransı yüksek bir altyapı meydana getiriyorlar.</p>
<p>Projenin ilerleyen safhalarında izlenimlerimi sizinle paylaşacağım.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2009%2F01%2F08%2Fdekra-projesi%2F&amp;linkname=Dekra%20Projesi"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2009/01/08/dekra-projesi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

