• Çalışmalarım

  • Favori Linklerim

  • Önemli Yazılarım

  • Kategoriler

  • Hit Counter

    • 27,444 hits

Java Servlette parametreden gelen degerlerden otomatik nesne yaratmak

Java servletleri ve jsp ile çalışırken eğer büyük bir formunuz var ve bu formun alanları bir nesneye denk geliyorsa, gelen parametreleri tek tek okuyup nesneye aktarmak tam bir işkencedir çünkü nesnenin 20 tane alanı var ise alt alta 20 tane request.getParameter işlemi yapmak gerekir.
Bazı frameworkler bu işleri otomatize edip parametrelerden gelen bu değerleri otomatik olarak nesneye dönüştürüyorlar ama bazı durumlarda framework kullanmamanız gerekiyor (örn : hız kaygılarının olduğu projelerde) ya da framework kullanmak istemiyorsunuzdur. İşte böyle durumlarda yukarıda anlattığım sorun ile karşılaşma ihtimaliniz yüksektir.
Bu sorunu frameworklerin yaptığı gibi otomatize etmek ama bunu yaparken framework kullanmamak için Java Reflection apilerini kullanarak bir sınıf oluşturdum. Bu sınıf ile parametreden gelen bir nesneyi aşağıdaki gibi 2 satırda oluşturabiliyorsunuz, nesnenin ne kadar alanı olursa olsun !

ObjectBuilder builder = new ObjectBuilder();
HedefNesne ocmsuniversitiesSponsor = (HedefNesne)builder.parametersToObject(request, HedefNesne.class);

Yukarıdaki örnekteki gibi yapmanız gereken 2 şey var birincisi ObjectBuilder (ismini böyle seçtim ama siz kodu oynarak istediğiniz bir isim verebilirsiniz) nesnesini oluşturmak ve ObjectBuilder’in parametersToObject fonksiyonuna request ve hedef nesnenin class’ını aktarmak.

ObjectBuilder sınıfını indirmek için tıklayınız

Tomcat Sub Domain Nasıl Yapılır ?

Tomcat serverinde “subdomain1.example.com” gibi subdomainleri var olan webapp’larımız ile ilişkilendirmek için 2 şey yapıyoruz, 1.si tomcat’in server.xml dosyasını düzenlemek 2.si ise DNS ayarları.
Burada kritik olay DNS ayarıdır eğer DNS ayarını yapabilecek konumda değilseniz buradaki işlemleri bir sonuca ulaştıramazsınız.

1. adım – Tomcat ayarı :
Bu adımda tomcat ayar dosyasına (conf/server.xml) subdomain ve webapp ilişkisini tanımlayacağız.
<Engine> ağacı içine şu şekilde bir ekleme yapılacak.

<Host name="subdomain1.example.com" appBase="webapps/web_app_adi"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Alias>greencard.olitech.com</Alias>
<Context path="/" docBase="C:\Tomcat\webapps\web_app_adi" debug="5" reloadable="false" crossContext="true"></Context>
</Host>

Buradaki ayarların en önemlilerinin anlamı şunlardır :

  • appBase : webapp’inizin webapps klasörü altındaki kısa yolu (webapps/web_app_adi).
  • path : url içinde webappinizin domain adresinden sonra gelen hangi context adını ele alacağı bunu “/” bırakmak root manasına gelir yani “http://subdomain1.example.com/” yazılıp enterlanırsa ayarladığınız webapp çalışır.
  • docBase : webappinizin kodlarının yer aldığı fiziksel adres. Tam yol vermeniz faydalıdır.

2. adım DNS ayarı :
Bu adımda DNS serverinize subdomain1.example.com adresini ve tomcatinizin dinlediği IP adresini belirtmeniz gerekli.

Eğer xml dosyasında bir hata yapmamışsanız ve DNS ayarını düzgün yaptıysanız subdomaininiz aktif hale gelecektir.

Notlar :

  • Tomcat versiyonu : 6.0.20
  • webapps klasörü standard klasör yani ilk kurulumda gelen klasör
  • server.xml tomcatin conf klasörü içinde yer almakta.
  • Eğer local de deneme yapmak isterseniz HOSTS dosyasına (windowsta system32/drivers/etc altındadır) domain adı ve ip yani 127.0.0.1 girdisi yapmanız ve tomcate ilgili xmli girmeniz yeterlidir. Eğer girdiğiniz domain adı gerçek bir domain ise testlerden sonra HOSTS dosyasındaki girdiyi silmeyi unutmayın

Google Chrome OS – Google’ın yeni işletim sistemi

Yıllardır hayalini kurduğum bir şey vardı, yaptırım gücü çok yüksek olan bir firmanın Linux’u temel alan bir işletim sistemi geliştirmesini istiyordum en sonunda Google hayalimi gerçeğe dönüştürecek gibi görünüyor.
Neden Linux’u güçlü bir firmanın geliştirmesini istediğime gelirsek : Biz Linux sevenler ne kadar çırpınsak da piyasa para ile dönüyor ve bu da Linux’a “piyasanın” kendi işine gelen kısımları ile ilgilenmesine neden oluyordu, örneğin nvidia ekran kartı sürücülerini Linux için daha önce hiç yapmazken şimdi windows sürümü kadar güncel tutuyor.
Bu noktada Google gibi güçlü bir firma domino etkisi yaratacaktır ve firmaların artık Linux temelli bu işletim sistemini de hedef almasına neden olacaktır ki bu bütün Linux temelli sistemleri etkiler. Domino etkisine kapılacak firmalar ilk olarak donanım firmaları olacaktır ardından uzun vadede başarı sağlanırsa Adobe gibi tasarım yazılımı geliştiren ve windowsu windows yapan (hatta Adobe Maci mac yapan yegane firmadır bkz : Dünya genelinde tasarımcılara Mac kullanmaları önerilir) firmaların etkilenmesini bekliyorum.
Eğer bu gelişmeler gerçekleşirse ve Goole Chrome OS başarılı olursa Linux dünyasını güzel günler bekliyor demektir :)

Windowsta bilgisayara 2. tomcat kurmak

Windosta bir bilgisayara 2. tomcat kurmak gerekli olduğunda tomcat servis olarak kurulmalıdır. Servisi kurmak için tomcat/bin dizini içindeki service.bat scripti kullanılır.
scriptin kullanımı şu şekildedir : service.bat install servisAdi komutunu konsolda verirseniz servisAdi ile belirttiğiniz servis adında bir servis yaratılır.
Burada dikkat edilmesi gereken nokta servisAdi hiç bir şekilde alfa numerik karakter içeremez yani belirlediğiniz harf sadece a-z,A-Z,0-9 aralığında olmalıdır.
servisi kurduktan sonra tomcati başlatmak isterseniz şuna dikkat etmelisiniz bir tomcat tomcat/conf içinde yer alan server.xml deki konfigurasyona göre dinleme (listen) yapar yani 1 ip + port eşleşmesinde de 2 tomcat olmaz yani 2 tomcat 192.168.1.1 port 80 de yer alamaz. ya 2 IP adresiniz olmalı ya da 1 tomcat 80 dışında bir porta kurulmalı.
Ayarlamayı server.xml dosyasında gerçekleştirdikten sonra servis yöneticisinden tomcatleri başlatabilirsiniz.
Tomcatler aynı klasörleri kullanabilir ama tavsiyem farklı tomcat klasörleri kullanmanız.

JPA ile stored procedure çağırmak

JPA’da stored procedure çağırmak için yapılması gereken şey EntityManager nesnesinin createNativeQuery fonksiyonunu kullanmaktır.

Query q = getEM().createNativeQuery("{call sp_myProcedure(?)}", Nesne.class);
q.setParameter(1 , param1);
liste = (List) q.getResultList();
ya da
nesne = q.getSingleResult();

Üstteki kod bloğunda getEM() ile EntityManager nesneni almalısınız yani getEM() fonksiyonunu siz yazacaksınız. Nesne.class geriye dönecek olan resultset’teki alanları kullanarak oluşturulacak nesnenin tipi.
Geriye 1 sonuç dönecek ise q.singleResultSet birden fazla dönecek ise getResultSetList fonksiyonunu kullanmak gerekli.

Javascript Patternleri – Browser Side Cache

Browser side cache yapılan işlemlerin sonuçlarının bir değişken ya da dizi içinde saklanmasıdır. En çok ajax yanıtlarının cachelenmesinde ve matematiksel işlemlerin sonuçlarının cachelenmesi için kullanılır. Eğer basit düşünürseniz olayı uygulamak ço kolaydır, 1 değişken oluşturup yaptığınız bir ajax isteğinin sonucunu değişkene atadıktan sonra işlem yaparsınız.
Örn :
var cache;
ajaxCall(,,ajaxHandler);
ajaxHandler(resp){
cache = resp;
//yanıt ile ilgili işlemleri
}

Cacheleme şu şekilde işe yaramaktadır, eğer 1 kere alınıp sonra aynı kalacağını düşündüğünüz alanlar var ise bu alanları cacheleyip bir daha almakla uğraşmazsınız, ya da bir işlemin sonucunu ajax ile alırsınız ve bir sonraki işlemlerde ajax çağrısı yerine cacheden alırsınız.
Gerçek bir örnek vermek gerekirse, daha önceki projelerimde bir resime ait etiketleri ajax ile getirmem gerekli idi ve 1 kere alınması yeterli idi, 1 kere alıp cacheledim ve bir sonraki çağrıları cacheden aldım.

C link işlemi için öneri

Linuxta C de yazdığını programları link ederken bazen “xxxx library is not found” hatası alırsınız. Bu hatanın adından da anlaşılacağı gibi “xxxx” kütüphanesi bulunamadı demektir. Tabi bulunamamasının 2 sebebi olabilir kütüphane ya makefile dosyasında belirlenen yollar içinde değildir ya da sisteme yüklenmemiştir.
Yüklenip yüklenmediğini anlamak için “/usr/lib”, “/usr/share/lib” gibi klasörlerin içinde “xxxx” adını arayın bulursanız bu o kütüphanenin yüklendiği ama derleme sırasında görülemediği manasına gelir.
Onu görünür hale getirmek için “/usr/lib” altında değil ise “/usr/lib” altına sembolik link oluşturabilirsiniz ya da ilgili .so ve .o dosyalarını “/usr/lib” altına taşıyabilirsiniz. Diğer bir yöntemde makefile dosyası ile haşır neşir olarak kütüphanenin yolunu eklemektir, makefile çok karmaşık olmasına rağmen aslında çok basittir sadece ilgilendiğimiz kelimelerin olduğu yerlere bakmak gerekli, bunlar “library path” benzeri kelimelerdir.
Eğer makefile ve “/usr/lib” altına taşıma işlemi de fayda etmez ise en garanti yol şudur : kütüphaneye ait .o, .so dosyalarını dermele yaptığınız dizine kopyalamak. Bu en son yöntemdir ama garanti işe yarar çünkü görmemesi imkansızdır.

ZK yeni nesil ajax tabanlı web applikasyon geliştirme sistemi

ZK tamamen ajax’ı destek alan ve eventları server tarafında çalıştırmayı hedefleyen bir framework’tür. ZK gerçekten çok ilginç bir framework çok kolay geliştirme yapılabiliyor, masaüstü programı yazar gibi program yazıyorsunuz.
ZK Mozilla’nın XUL tanımlama sistemini örnek alarak geliştirilmiş ve bu yüzden anlaşılması çok kolay. Elbette her framework’un olduğu gibi ZK’nın da zayıf gibi görünen yanları var mesela en çok kritiği yapılan olay event handling kodlarını server tarafına yığması ki bu servera yük bindiren bir olay ki günümüzde bilgisayarlar çok hızlı iken bu saçma bir girişim gibi görünebilir.
Ben bir kaç deneme yaptım açıkçası çok hoşuma gitti ama ben kodlarımı mümkün olduğunca istemci tarafında çalıştırmak istediğim için event handling kodlarını javascript ile ele almayı tercih ediyorum.
link : http://www.zkoss.org

Javascript – Lazy loading

Web2.0 tarzı web applikasyonları için javascript ile geliştirme yaparken karşılaşılma ihtimali en yüksek olan sorunlardan biri javascript yüklenme süresidir. Geliştirme yaparken <javascript src=”" şeklinde js dosyasının tanımı yapıldığı zaman tarayıcı o js dosyasının indirip çalıştırıncaya kadar sayfanın akışını bekletir (her tarayıcı özellikleri farklıdır, bazı tarayıcılar js dosyalarını paralel olarak indirip çalıştırma işlemini sıra ile yapar). Bu bekleme anları uzun sürerse sayfa gösterimi gecikeceği için yazdığını web applikasyonu yavaş çalışıyor damgası yiyecektir.
Javascriptlerin bu tür sorununa çözüm için Lazy loading tekniği geliştirilmiştir. Lazy loading javascript dosyalarının yüklenmesini ileriki bir zamana atarak sayfa gösterimini hızlandırmayı amaçlar. bir javascript dosyası siz istemediğiniz sürece yüklenmez böylece daha hızlı sayfa yüklemesi ve daha kullanışlı bir applikasyon ortaya çıkar.

Örneğin aşağıdaki kod sayfa yüklendikten 100ms sonra js dosyasını yükletir ve çalıştırır


<html>
<head>
<script>
function loadAndRun(jsName){
var head = document.getElementsByTagName("head")[0];
script = document.createElement('script');
script.type = 'text/javascript';
script.src = jsName;
head.appendChild(script);
}
window.onload = function(){window.setTimeout(function(){loadAndRun("test.js");}, 500);}
</script>
</head>
<body>
</body>
</html>

Aşağıda test.js dosyasının içeriği var.


alert('i am test.js');

Yukarıdaki test kodları çalıştırıldığı zaman sayfa onload olduktan 500ms sonra test.js yüklenir ve çalıştırılır. bu özelliği kullanarak daha sonra da yüklense olur dediğiniz js dosyalarını bu şekilde yükleyebilirsiniz.
Eğer lazy load işinize yarayacak ise tavsiyem hazır fonksiyonlar ya da kütüphane kullanmanız böylece lazy load işleminden daha çok verim alırsınız.

Webmin – web tabanlı linux sistemi ayarlama

Windows dünyasından admin’ler her zaman linux’taki konsolları ve ne kadar zor iş olduğunu anlatırlar, windows’ta GUI güdümlü ayarlama sistemleri sayesinde her işlerini kolayca yaptıklarını anlatırlar :) (kimse alınmasın ama öyle)
Linux adminleri konsolu sevmekle beraber gözü kara değiller ve işleri GUI güdümlü ve hızlıca halledebilmek için webmin adı verilen web tabanlı ayarlama yazılımını kullanırlar.
Webmin sayesinde linuxa sıfır kişiler bile ayarlamaları kolayca yaparlar. Linux üzerinde uzman olsanız da webmin gerçekten çok işe yarayabiliyor.

link : http://www.webmin.com/