21 Aralık 2012 Cuma

HttpURLConnection İle Web Sayfası İçeriği Almak

Java'da basit bir şekilde ve herhangi bir ekstra kütüphane kullanmadan HTTPURLConnection sınıfı ile bir web sitesine bağlanıp içeriğini almak konusunda ufak bir kod parçası ile örnek vereceğim. Bu işlemi, bir web sayfasını tamamen String olarak çekip parse etmek ya da GET, POST vs. ile çalışan bir REST servisi çağırmak için kullanabilirsiniz.

Aşağıdaki örnekte http://www.mehmetaktas.org?param1=VALUE1&param2=VALUE2 şeklinde bir adresin içeriğini çekeceğiz.

public String getURLContent(){
        String uri = "http://www.mehmetaktas.org?param1=value1&param2=value2";
        HttpURLConnection connection = null;        
        
        try {
            
            //Bağlantımızı açıyoruz
            URL url = new URL(uri);
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");//POST, PUT, DELETE ...
            connection.setUseCaches(false);
            connection.setDoInput(true);
            connection.setDoOutput(true);
            /*
             * Content-Type, Content-Language gibi request property set etmek
             * istersek aşağıdaki metod kullanılabilir:
             * connection.setRequestProperty("Content-Language", "tr-TR");
             */
            //Response'ı alıyoruz
            InputStream is = connection.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(is));
            String line;
            StringBuilder response = new StringBuilder();            
            while ((line = rd.readLine()) != null) {
                response.append(line);
                response.append('\r');
            }
            rd.close();
            is.close();
            
           return response.toString();
            
        } 
        catch (Exception e) {} 
        finally {
            if (connection != null) {
                connection.disconnect();                
            }
        }
    } 

httpurlconnection, screenscraper, java, url, connection, web page, parse, rest, get, post )

13 Aralık 2012 Perşembe

Operation Not Allowed After ResultSet Closed

Merhaba,

JDBC kullanarak Java'da veritabanı bağlantısı yapıp veri çekmeye çalışırken "rs.next()"ile bir veriye ulaşırız. Bu metodu çağırdığımız esnada "java.sql.SQLException: Operation not allowed after ResultSet closed" şeklinde bir taha alıyorsanız olası bir kaç sebebi var. Bu sebeplerin başında ResultSet nesnenizi kullanırken bir döngü ya da başka bir metodun içerisinde "rs.close()" metodunu kullanarak ya da nesneyi null yaparak hata alma durumunuz vardır. Bu problemi, biraz araştırarak çözebilirsiniz fakat "Ben ResultSet nesnemi kesinlikle kapatmıyorum ya da null yapmıyorum neden böyle oluyor?" derseniz sebebi bulmak biraz zor olabilir. Böyle bir durum başıma geldi ve çözümünden bahsedeceğim.

Java tarafında veritabanına bağlanırken ResultSet nesnesini doldurmak için bir Statement ya da PreparedStatement nesnesi kullanırız. Bu nesne teoride bir adet ResultSet'e hizmet verebilir. Statement kapandığı zaman, ona bağlı olan ResultSet de kapanır. Sıkıntı da aslında buradan kaynaklanıyor. Özellikle uzun sürede sonuç getiren bir sorgu çalıştırdığınız zaman Statement, uygulama sunucusunun pool ayarlarında tanımlı olan Statement Timeout'una takılıyor. Bu esnada Statement, uygulama sunucusu tarafından kapatıldığı için ResultSet nesnesi de kapanmış oluyor. Siz de herhangi bir veri çekmeye çalıştığınızda en tepede bahsettiğim hatayı alıyorsunuz.

Bu sorunu, SQL sorgunuzu optimize ederek ya da uygulama sunucusundaki kullandığınız veritabanı pool'unun Statement Timeout süresini uzatarak çözebilirsiniz. Glassfish için bu ayara "Resources > JDBC > JDBC Connection Pools > POOL_ADI > Advanced" menüsünden ulaşabilirsiniz.

java, jdbc, statement, resultset, pool, timeout, sqlexception, connection )

12 Aralık 2012 Çarşamba

Aspx Html Çift Title Sorunu

Aspx kullanarak oluşturulan web sitelerinde işimiz yarayan MasterPage'den kaynaklı olarak bir duplicate <title> tag problemi yaşıyor olabilirsiniz. Bunun başlıca sebebi, master sayfasının <head> tagleri arasında bulunan ContentPlaceHolder aslında. Her bir sayfada farklı bir title kullanmak istediğimizde <title>Sayfa Bilgisi</title> kodunu master sayfadaki <head> tagi arasına koymak yerine master sayfasındaki <head> tagi içerisine bir adet ContentPlaceHolder atarız. Sonrasında oluşturduğumuz sayfada bu ContentPlaceHolder'ın içeriğini koyacağımız yere <title> tagimizi koyarız. Bu işlem, sayfa render edildiğinde biri boş olmak üzere iki adet <title> tagine sebep olmaktadır. Bunun sebebi, server tarafında çalışan ve <head> içerisinde bulunan ContentPlaceHolder'ın, <title> tagini bulamayıp kendisinin ekstra bir adet daha üretmesidir.

Sorunun çözümü ise basit. Title bilgisini <title> tagi arasına koymak yerine sayfanın en tepesindeki <%@ Page Title=""... içerisine koymak. Sırasıyla sorunlu kod ve düzeltilmiş kod aşağıdaki gibi olmalıdır.

Hatalı Kod:
<%@ Page Title="" Language="C#" MasterPageFile="~/Mstr.master" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    <title>BASLIK</title>
     ...
</asp:Content>


Doğru Kod:
<%@ Page Title="BASLIK" Language="C#" MasterPageFile="~/Mstr.master" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    ...
</asp:Content>

( aspx, .net, <title>, <head>, çift title, contentplaceholder, masterpage, content, runat="server" )



6 Kasım 2012 Salı

Java İle Basit Tek Taraflı Şifreli Metin Üretme

Özellikle veritabanında tutulmaması gereken veriler olduğunda ya da network üzerinde açık olarak gitmesini istemediğimiz veriler olduğu durumlarda tek taraflı olarak verileri şifreleriz. Örneğin girilen bir şifrenin doğru olup olmadığını kontrol ederken veritabanındaki şifrelenmiş metin ile kullanıcıdan gelen açık metini şifreleyerek karşılaştırırız. Böylece kullanıcının şifresini bilmeden şifresini doğrulayabiliriz. Bunun için kullanılabilecek en basit yöntemi aşağıda göstereceğim.
import java.security.MessageDigest;
import sun.misc.BASE64Encoder;
public final class Sifre {
     public static String sifrele(String mesaj,String algoritma, String encoding){
          MessageDigest md = null;
          String hash = null;
          try {
               md = MessageDigest.getInstance(algoritma);
               md.update(mesaj.getBytes(encoding));
               md.update("TUZ".getBytes(encoding));
               byte rawByte[] = md.digest();
               hash = (new BASE64Encoder()).encode(rawByte);
          } catch (Exception e) {
          }
           return hash;
     }

     public static void main(String args[]) throws Exception {
          String sifre = "PASSWORD";
          System.out.println(sifrele(sifre, "SHA", "UTF-8"));
          System.out.println(sifrele(sifre, "MD5", "UTF-8"));
     }
}
( java, hash, password, encrypt, salt, sha, md5 )

19 Ekim 2012 Cuma

Glassfish'de Request URI Is Too Large Hatası

Glassfish uygulama sunucuna yüklenmiş bir web uygulamasındaki servlet'e GET ya da POST ile gitmeye çalıştığınızda Request URI is too large. java.nio.BufferOverflowException gibi bir hata almanız olası. Böyle bir durumda sıkıntı aslında TCP ile ilgili yani networksel bir problem. Yaşamadım fakat tahminimce Glassfish üzerine herhangi bir byük boyutlu uygulama yüklerken de benzer bir hata ile karşılabilirsiniz. Bu noktada yapılması gereken ise Glassfish'in network ayarlarındaki buffersize'ı artırmak olacak.

4848 portundan (default) Glassfish'in admin arayüzünü açıyoruz. Sonrasında sol taraftaki menüden sırasıyla: Configurations > Server-Config > Network Config > Transports > Tcp 'ye tıklayarak TCP menüsünü açıyoruz. Buradaki buffer size kısmını ihtiyacımız olduğu ölçüde artırıp uygulama sunucusuna restart attığımızda aynı problem ile karşılaşmayacağız.

( glassfish, tcp, buffer size, request uri too large, servlet, get, post ) 

3 Ekim 2012 Çarşamba

Alex de Souza ve Vefazıslık



Gelişini daha dün gibi hatırlıyorum. Yine rakiplerin klasik 'Tabi tabi alırsınız' tepkileri ile birlikte Brezilya milli takımının 10 numarasını ve kaptanını transfer etmiştik. Katkı yapacağını, iyi işler yapacağını düşünmüştüm fakat bu noktaya gelineceğini çoğu kişi gibi ben de hayal bile edemezdim. Fakat zamanla o kadar sevdik ki seni, takımımızın kaptanı yaptık. O zamanki çocuk aklımla biriktirdiğim türlü türlü videonun içinde -çoğu kişinin belki de hatırlamadığı- İstanbulspor'a attığın gol, Fenerbahçe formasıyla attığın ilk gol hala duruyor, hatta buraya da ekliyorum.


Kaç teknik direktör eskittiğini bile hatırlamıyorum fakat hepsiyle gelen giden futbolcular olmasına rağmen tek değişmeyen sendin. Oyununla, duruşunla, efendiliğinle, aile yaşantınla, çoğu kişi takımdan atılacağı korkusuyla ağzını bile açamazken dobra dobra Türk futbolu ve altyapıdan, genç oyunculara verilmeyen değerlerden bahsetmenle sevdik seni. Her bir taraftara, zorunlu olmadığın halde sanki masada beraber sohbet edercesine twitterdan verdiğin cevapları sevdik. Bunca yaşattığın başarılardan sonra şimdi ise gelinen noktayı hazmedemiyorum.

Haberi ilk duyduğumda, sevdiğim birisini kaybetmiş ya da kız arkadaşımdan ayrılmış gibi hissettim. Aynı mide bulantısı, aynı iç daralması... 2000li yılların efsane Galatasaray'ın durumuna, dışarıdan bir tarafta gözüyle baktığımda o başarıları yaratan insanlara yapılan vefasızlığa, Hakan Şükür'lere Bülent Korkmaz'lara verilmeyen haklara ben bile isyan ederken kendi takımımda bir gün böyle bir durumla karşılaşmam, hele de bu oyundaki kişinin KrAlex olması beni en çok sıkan şey (Tam tersi ve örnek olanı için bkz. Tugay Kerimoğlu: tıklayın). Bu tarz durumlarda, biraz futboldan anlayan, futbolcuya değer veren, yaptığı işleri yücelten ve körü körüne taraftar olmayan herkes zaten benzer tepkileri verir. Aşağıya, Alex'in takımı bırakmasından sonra bir kaç Galatarasaylı ve Beşiktaşlı arkadaşımın yorumlarını yazacağım, sanırım daha iyi anlaşılır söylemek istediklerim.

  • Alex gibileri böyle gönderen futbol yönetimleri oldukça bir yere gelemeyiz. Bir Scholes'a bak bir Bülent'e, Alex'e bak
  • Bir Galatasaray'lı olarak, Fenerbahçe'nin başında Aykut Kocaman'ın olmasına ben bile üzülüyorsam, varın gelin durumun vehametini siz düşünün.
  • En azından devre arasına kadar bekleseydiniz be..Alex gibi sihirbaz cok az gelir.Kendine iyi bak kaptan.İzlemek keyifti.

Kaptanımız ne yazık ki başkanımızın egolarına yenik düştü ve onu kaybettik. Fakat hep böyle olmamış mıydı, hep istediği gibi yönlendirmemiş miydi taraftarı, kendi doğrularını diretmemiş miydi? 10 küsür yıldır bu takımın başkanıyken, gönderdiği onlarca teknik direktör varken, bahsedilen istikrar kelimesi bunca yıl bulunamamış mıydı da bu sefer anlam kazanacaktı? İnanılmaz toplar oynayıp, Avrupa'da adımızdan söz ettirip çeyrek finallere çıktığımızda, çok büyük emekleri olan Zico'ya, ufacık isteklerinden ötürü, yine aynı 'Hiç kimse takımdan üstün değildir!' edebiyatı yapıp yolu gösterirken neredeydi istikrar kelimesi? Tabi, yıllarca beklenildi ve her istenilen şeyi yapacak bir teknik direktör beklendi; başarı ya da teknik bilginin hiç bir önemi yoktu ne de olsa önemli olan maşalık yapmaktı. Bu fırsat ele geçti yıllar sonra. Hiç kimsenin Fenerbahçe'den, taraftardan üstün olmadığını söyleyen kişi kendisini Fenerbahçe'nin üzerine koydu. Kendisini yücelten o taraftarın bağrına bastığı başarılı insanları birer birer gönderdi (Alex, Volkan Ballı, H.Bilal Kutlualp vs). Kendisini oralara getiren taraftara ne diyeceğini, kime nasıl tezahürat edeceğini söylemeye kalktı... Yapılan bütün işlere, stadyum yapımı, ekonomik düzen, amatör branşlara katkı, bunlara saygım sonsuz ve gerçekten teşekkür ediyorum tüm bu yapılanlar için fakat her şeyin bir sonu vardır ve bir yerde çok kalan bir insanın diktatörleşmesi de kaçınılmaz bir durumdur ki günümüzde her yerde görüyoruz bunu. Bu sebeptendir ki Aykut falan hikaye, başkan takımını birazcık seviyorsa artık ayrılmalıdır, gerçekten ama! (Not: Ben eski istifalarının hiçbirisinde geri dönmesini istemedim.)

Tüm yukarıda bahsettiklerimden ötürü koskoca Fenerbahçe Futbol Kulübü harcandı. Bazıları Alex'in son zamanlarında takımı toparlamamasından, takımdan kopmasından ve yeterli destek vermemesinden bahsetmiş. Sevgili arkadaşlar, bu adam durduk yere mi bu hale geldi sizce? Kimin tahtında gözü var da sinsi sinsi planlar yaptı ha? Böyle bir şey mümkün mü? Takımdaki 11 kişinin birisi bile top oynamazken, teknik direktör, taktik namına hiçbir katkı sağlayamazken, bunlara bağlı her başarısızlıktan sonra ortaya sizin kelleniz atılsa ve takımın en tepesindeki başkanınız tarafından size arka çıkılmayıp o çok sevidiğiniz taraftar size karşı dolduruşa getirilse siz ne yapardınız, aynen devam edebilir miydiniz? Ben sanmıyorum.

Alex için söylenecek zaten çok birşey yok, yıllar sonra bu adamın bu şekilde gönderilmesi sonrasında hiç bir açıklama dinlenilmeyecek ve yalnızca katkıları konuşulacak emin olun. Fakat beni en çok üzen şey, yıllar öncesinin Fenerbahçe'sinde en çok sevdiğim iki futbolcudan birisi olan (diğeri Rıdvan) Aykut'un bu oyuna alet olması ve takımına bu kadar zarar vermesi. Onun yıllar önce Oğuz ile birlikte gönderilişini de hatırlıyorum, olaylar yine benzerdi ve çocuk halimle gidişine ağladığımı bilirim. Aynı şeyi yıllar sonra Alex'e kendisinin yapmasını da hazmedemiyorum. O karmaşa ve olumsuzluklar içerisinde takımdaki birliği gerçekten çok iyi sağladı ve hiç olmayacak bir şekilde şampiyonluk yarışına ortak etti bize. Büyük bir kriz yönetimini yapabileceğini gösterdi fakat bu süreçte ve hala devam eden süreçte de gördük ki bu nokta sportif anlamda herhangi bir olumlu durum göremedik. Futbolcuların içerisindeki birlik ve beraberlik duygusu ile takım bu kadar tutundu şampiyonluğa, oynanan kaliteli futbol ile değil.

Bu yaşananlar, zaten takım rezalet top oynadığı için içimde hiç kalmayan futbol ve takım izleme aşkını da öldürdü. Takım kötü top oynarken şimdi kimin girip bizi kurtarmasına umut bağlayacağız? Takımda kime top geldiğinde heyecanla ne yapacak diye bekleyeceğiz? Frikik kazandığımızda kim heyecanlandıracak bizi? Takım korner, penaltı kullanırken herkes hüzünlenmeyecek mi? Normal bir gidiş olsa yalnızca hüzünlenirdi insan fakat böyle bir ayrılık sonrası hep öfkelenmeyecek miyiz artık? Şu saatten sonra takıma ben içimden gelip de nasıl destek vereyim? Manevi anlamda bu duygu her türlü aşılır zira taraftarın içindeki Fener aşkı Aziz Yıldırım'ın bu yaptıklarını da unutturur bize fakat uzunca bir süre takıma maddi olarak destek vermeme kararı aldım. Bu bir karar da değil aslında, bana böyle bir vefasızlık örneği sunan kişilerin aynı şeyi bir daha bir daha yapması için mi para vereceğim ben?

Yaşananlar her ne olursa olsun sonu böyle olmamalıydı. Kırılan Fenerbahçe taraftarının kalbini geri kazanmak çok ama çok zor olacaktır. Daha yazılacak, söylenecek çok şey var belki fakat bi noktadan sonra insanın boğazında düğümleniyor kelimeler. Hani o her maçtan önce Şükrü Saraçoğlu'nda çoşkuyla söylediğimiz 'Samanyolu' şarkısı vardı ya, şarkının sözlerindeki anlam bir yana onu seslendiren Berkant Akgürgen'in ölümü ile Alex'in Fenerbahçe'den bu şekilde ayrılışının aynı güne denk gelmesi nasıl bir tesadüftür öyle...

Bize yaşattığın bütün güzel anılar ve başarılar için teşekkür ederiz büyük kaptan. Yolun açık, efsaneleştiğin kulübe dönüşün çabuk olsun!


Alex de Souza, kaptan, efsane, fenerbahçe, kralex, aykut kocaman, aziz yıldırım, vefasızlık, ayrılış )

11 Eylül 2012 Salı

RHCP'yi Türkiye'de İzlemek de Varmış

Fazla konser kültürü olmayan ve konserlere de çokça gitmeyen ben, son yıllarda 'Kim gelse gözüm kapalı giderim?' diye düşündüğümde ilk aklıma gelen isim hep RHCP oluyordu nedense. Her şarkısını bilmesem de, çok yakından takip etmesem de bu adamlara vereceğim paranın hakkını fazlasıyla alacağımı biliyor ve çok istediğim bir hayali gerçekleştiriyor olacaktım. Ve sıkça, 'Bu sefer gelecekler' dedikoduları altında geçen yıllardan sonra gerçekten geldiler. 8 Eylül 2012 tarihinde Red Hot Chili Peppers'ı ülkemizde, İstanbul'da ağırladık.


Son albümlerinde ölesiye severek dinlediğimiz şarkıların yaratıcılarından Frusciante'nin olmaması belki bir eksiklik olacaktı fakat sonrasında izlenen konser videolarından belliydi her şeye rağmen iyi olacağı. Zaten benimle birlikte gelen kişilere de sürekli aktardığım gibi, adamlar, bir Madonna, bir Michael Jackson tarzı show adamı değiller. Öyle uçan kaçan hareketler de olmayacaktı. Müziklerini ana amacım olarak belirleyip gidiyordum sadece. Bu anlamda hiçbir hayal kırıklığı yaşamadan ayrılacağım hemen hemen kesindi ve nitekim de öyle oldu. Belki bu işlerden başkaları kadar anlamamdan kaynaklı, belki adamları çok sevdiğimden kaynaklı fakat bence inanılmaz bir konser oldu. Adamların 50 yaşına geldiklerine inanmak gerçekten zor.

Tüm organizasyon saçmalığını da içine katarak bir kere daha olsa yine gözüm kapalı giderim diyor ve detaylara geçiyorum:

  • Gitmeden ipoduma doldururken düşündüğüm gibi, bize yakın bir coğrafyada bulunan Yunanistan'daki setlist çaldılar. Belki bir Otherside ya da Snow bekliyordum fakat ikinci sırada gelen Can't Stop ile olay rengini verdi. Biraz üzüldüm belki fakat 5 saniye sürmedi diyebilirim.
  • Belki konserlerini daha önce çok izlemememden kaynaklı fakat Dosed'un girişini çaldıklarında içimde kelebekler uçuştu fakat sonra öğrendim ki konserlerinde zaten bu şekilde ucundan koklatıp çalmıyorlarmış. Olsun, Under The Bridge de benim için oldukça kafi oldu:)
  • Josh Klinghoffer, Türk bayraklı tshirt'ü ile gönülleri fethetti. Bence oldukça da başarılı çaldı fakat özellikle Californication solosunda Frusciante'ninkileri hatırlayınca oldukça vasat geldi diyebilirim. Onun dışında adam 10 numara çaldı. Özellikle kırık ayakla bile ayağa kalkıp eşlik etmeye çalışması, bis için sahnenin yarısına koltuk değnekleriyle gelip onları atarak yerine geçmesi falan inanılmazdı.
  • Flea'nın görüntü yakından 80 yaşında gibi fakat adam yemin ediyorum benden genç durumda; o amuda kalkma nedir arkadaş, bas performansına zaten bi lafım yok. Zaten konserde iletişim konusunda zayıf olan Anthony yerine grubun kitle ile yegane iletişimini sağlayan kişi konumundaydı. Ezan ile ilgili söyledikleriyle seyirciyi bir kere daha coşturdu.
  • İlhan Erşahin ise bonusumuz oldu. Fakat kendi adıma söyleyeyim, sahnede o kişiler varken hiçbir şekilde dikkatimi çekemedi. Zaten bence oldukça tutuktu da.


  • Hemen hemen herkes ses sistemine laf etmiş fakat ben hiçbir problem hissetmedim. Can't Stop'un başlarında basların fazla gelmesi ile ilgili bir ayar çekildi gibi geldi bana, zira ondan sonra tertemizdi ses. Bilemiyorum belki de kulağım alıştı o an. Ama konseri, fazladan bir hoparlör seti olan sol taraftan izlemek oldukça akıllıca bir tercih oldu diyebilirim. Kendi çektiğim intro videosu aşağıda (Kolona çok yakın olduğum için ses kötü fakat maksat ortam gözüksün.)


  • Çoğu kişi aşırı kalabalıktan ve sahneyi görememekten yakınmış. Açıkçası izlediğimiz yerden, 1.60'lık kız arkadaşım da oldukça rahat bir şekilde sahneyi izledi. Hatta iyi bir açı yakalamak için önümüze 1-2 metrelik boşluk bile açabildik. Tüm bunlar için sahneyi ortadan değil de biraz kenardan görmeyi tercih ettik tabi bu arada.
  • Ekranlar ve o ekranların kullanımı ise inanılmazdı. Adamlar her bir şarkı için canlı canlı klip çektiler. Sahneye uzak olanlar için konulan ekranlar yetersiz denmiş bilemeyeceğim fakat uzun boylu bir insan olarak diyebilirim ki sahnenin yüksekliği biraz fazla gibiydi.
  • Seyirci biraz zayıf gibi geldi bana, belki de herkesin bildiği ya da söylemek istediği şarkıların çalınmamasından kaynaklı fakat malum şarkılarda vaziyet oldukça iyiydi.
  • Gelelim organizasyona... İstanbul trafiği sağolsun zaten konser alanına gelmemiz zaman aldı. Sonrasında ucu gözükmeyen bir kuyruk vardı kategori 1 için. O kuyrığun başındaki az kalabalık ise kuyruk beklemeden içeri giriyordu, direkt olarak aynısını yaptık valla, bu konseri riske atamazdım. Bekleyenler neden bekliyordu onu da anlamış değilim hala.
  • İçeride felaket bir tuvalet kuyruğu vardı. Hayır alkol satılmadan vaziyet böyle ise satılsa ne olurdu orada düşünemiyorum bile.
  • Çıkıştan bahsetmek istemiyorum bile. Muhtemelen hayatımda RCHP'yi bir kez göreceğim diye tadını çıkarıp bitinceye kadar gitmek istemedim. Sonrasında haliyle izdihamda kaldık. Konser alanından, istiflenmiş balık modunda çıktıktan sonra geçmeyen otobüsler, dolu dolmuşlar, geçmeyen taksiler, geçip de durmayan taksiler eşliğinde farklı farklı yönlere yürüyüp durduktan sonra 23:40'da biten konserden tam bir buçuk saat sonra bir taksi bulabildik. Ankara otobüsünü kaçırmamak için Beşiktaş'tan Kavacık'a taksiyle geçtik vs. hatırlamak bile istemiyorum, bahsettikleri ringler falan neredeydi gerçekten merak ediyorum. Hayır zaten mekanın o kadar insanı kaldırmayacağı belli, bari çıkış için bir düzenleme yap. O konserin sonu böyle olmamalıydı gerçekten.

Herşeyi bir kenara bırakırsak, hayatımdaki en keyifli anlardan bir tanesiydi. En rezalet anlarıyla yine olacak deseler yine giderim. Californication ve By The Way'i canlı canlı dinlemek... Gerçekten anlatılmaz yaşanır bir duyguymuş. Yine beklediğim isimler var, yine gelecekler, yine izlemeye gideceğim fakat bende aynı etkiyi yaratırlar mı emin değilim. Harika konseriniz için tekrar teşekkürler, umarım hala bu enerjiye sahipken sizi bir kez daha görme imkanım olur...

rhcp, red hot chili peppers, istanbul, türkiye, santralistanbul, pozitif, californication, by the way, flea, ilhan erşahin )

16 Ağustos 2012 Perşembe

Servlet Web Service Endpoint '' Failure

Java ile web servis geliştirirken basit tipleri ve sınıfları kullanırken çok fazla problem yaşanmaz fakat kendi oluşurduğumuz sınıfları kullanmak istersek bir takım sorunlar yaşayabiliyoruz. Karşılaştığım  ve sebebini gerçekten çok zor bulabildiğim bir problemin çözümünden bahsedeceğim şimdi.

JAX-WS web servis oluştururken, daha önce başka bir projemde oluşturduğum bir sınıfı web servis metodunun dönüş nesnesi olarak belirledim. Fakat bu metodu yazıp projeyi derlemeye ya da çalıştırmaya çalıştığımda aşağıdaki hatayı aldım:

Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.RuntimeException: Servlet web service endpoint '' failure. Please see server.log for more details.
/.../nbproject/build-impl.xml:725: The module has not been deployed.
See the server log for details.

Hata da çok fazla bir detay yok, derinlemesine koda girmem gerekti. Söylediğim gibi web servisler xml tabanlı olduğu için uğraştığınız sınıflarda herşeyin tanımlı olması lazım. Benim metodumda dönen sınıfın default constructor'ı tanımlanmamıştı. Bunu fark ettiğimde hemen bir cosntructor tanımlayıp denedim ve web servisin çalıştığını gördüm. Yani sorun, dönmek istediğim sınıfta default constructor olmamasıydı. Benim sınıfımda public olan başka hiç constructor yoktu dolayısıyla belki parametreli public constructor tanımlayarak da aynı şekilde çözüme gidilebilir.

( java, web servis, jax-ws, default constructor, illegalstateexception, lifecycleexception, endpoint, build-impl.xml )

23 Temmuz 2012 Pazartesi

android.database.sqlite.SQLiteMisuseException: error code 21

Merhaba,

Android tarafında karşılaştığım bir sorunu ve kısmi çözümünden bahsetmek istiyorum. Geliştirdiğim uygulamanın bir bölümünde SQLite bağlantısı yapıp veritabanına bir veri insert etmem gerekti. Bunu yaparken ilk önce SQLiteStatement kullanım parametreleri bind ederek kullanmak istedim. Bu şekilde parametreleri set edip executeInsert() metodunu çağırdığımda:
java.lang.RuntimeException: Unable to start activity ComponentInfo: android.database.sqlite.SQLiteMisuseException: error code 21: not an error
Şeklinde bir hata ile karşılaştım. Biraz araştırma yaptığımda öncelikle kaynaklarda, bu hatanın, birden çok threadin aynı anda veritabanı bağlantısı açıp kapaması esnasında olabildiğinden bahsediliyordu. Benim kodumda threadli bir yapı olmadığı gibi benzer bir kullanım da yoktu. Bu nedenle sorun bundan kaynaklı değildi. Sonrasında bir forumda başka bir arkadaş sorunun cihazın Türkçe set edilmiş Locale ayarlarından kaynaklı olabileceğini söylemişti. Bunu denemeye karar verdim. Cihazı İngilizceye çevirdiğim zaman sorun ortadan kalktı. Fakat kod tarafında bir şekilde Locale set ederek bu hatadan kurtulunmuyordu. Sonrasında kendi çözümümü ürettim. Belki bu soruna direkt olarak bir çözüm değil fakat benzer problemle karşılaşan arkadaşlar SQLiteStatement kullanmak yerine SQLiteDatabase sınıfının insert() metodunu kullanırlarsa bu sorunu çözebilirler. Tabi ki burada parametreleri artık ContentValues ile set etmek gerekecek. İlk başta belirttiğim gibi bu nedenle bu çözüm kısmi bir çözüm ama en azından hatadan kurtulabilirsiniz. 

Merak eden arkadaşlar için, hatayı aldığım cihazın gerekli bilgileri şu şekildedir:
Samsung Galaxy TabAndroid 3.2, Türkçe Locale  
( android, honeycomb, 3.2, sqlitemisuseexception, error code 21: not an error, sqlitedatabase, sqlitestatement, contentvalues )
Kaynak: http://stackoverflow.com/questions/9685633/sqlitemisuseexception-error-code-21-when-inserting-a-row 

2 Nisan 2012 Pazartesi

java.io.IOException: Server returned HTTP response code: 505 Çözümü

Glassfish üzerinde Java Web uygulaması geliştirirken bir adreste bulunan veriyi okumam gerekti. java.net.URL sınıfı ile bu URL'i okumak isterken başlıkta belirttiğim "java.io.IOException: Server returned HTTP response code: 505" hatasını aldım. Diğer parametrelerimde herhangi bir sorun gözükmemesine rağmen, özellikle localhost'da bulunan bir adresi çağırdığımda bu hata ile karşılaşmaya başladım. Biraz araştırma yaptıktan sonra sorunun URL'de geçen parametrelerin encode edilmeden URL'in çağrılmasından kaynaklı olduğunu buldum. Sorunun çözümü için ise yine aynı pakette bulunan URLEncoder sınıfını kullanmak yeterli. Bu sınıf içerisindeki encode() metoduna, encode edilmesini istediğiniz parametreyi ya da URL'in tamamını verip character encoding olarak da utf8 kullanmanız yeterli.
URLEncoder.encode("Test Parameter", "utf8");
URLEncoder.encode(myURL, "utf8"); 
( java, glassfish, url, encode, utf8, http 505, urlencoder, java.io.ioexception ) 

26 Mart 2012 Pazartesi

Netbeans’de Java Class Library Projesine JAR Ekleme

Farklı bazı projelerde kullanmak üzere bir takım sınıfları içeren JAR dosyası oluşturmak için Java Class Library projesini Netbeans kullanıcılarının büyük kısmı kullanmıştır. Oluşturulan projenin içerisine herhangi başka bir kütüphane eklemek istediğimizde bir problem yaşamadan ilgili JAR dosyasını kullanabiliyoruz. Fakat oluşturduğumuz projeyi build edip sonrasında oluşturulan JAR dosyasını başka bir projede kullanmak istersek bu sefer o proje içerisine eklediğimiz kütüphaneye ulaşamayız. Ulaşmaya çalışırsak ClassNotFoundException almamız ise muhtemel.

Buradaki temel problem aslında şu. Bildiğiniz gibi JAR dosyaları, içerisinde derlenmiş class dosyaları taşır. Bu nedenle bir projede rahatlıkla kullanılabilir. Fakat bir class library projesine bu JAR dosyasını koyarsak ve sonrasında projeyi build edersek JAVA class dosyalarını yeniden derlemeyecektir. Bu da bizim yeni üretilen JAR dosyamızın içerisinde, projeye eklediğimiz diğer kütüphanelerin olmaması anlamına gelecektir.

Sözü fazla uzatmadan konuya giriyorum. Yapmamız gerekenler şu şekilde. Projemizi tamamladıktan sonra build etmeden hemen öncebuild.xml dosyasının içerisinde bir değişiklik yapacağız. Böylece istediğimiz JAR dosyalarını içeren bir JAR dosyası elde edeceğiz. Örneğin projemize gson-2.1.jar‘ı ekleyelim. Bunun için build.xml dosyamızda aşağıdaki gibi bir değişiklik yapmalıyız. İlgili alanları kendi dosya isimleriniz ile değiştirebilirsiniz.

<target name="SON-JAR">
   <jar jarfile="dist/SON_DOSYA.jar">
      <zipfileset src="${dist.jar}"excludes="META-INF/*"/>
      <zipfileset src="lib/gson-2.1.jar"excludes="META-INF/*"/>
      <manifest>
         <attribute name="Main-Class"value="com.test.maktas.Main"/>
      </manifest>
   </jar>
</target>

Bu işlemden sonra projemizi build ettiğimizde çıkacak JAR dosyasında ilgili kütüphane dosyalarının da olduğunu göreceğiz.

( java, netbeans, jar, library, ClassNotFoundException, referring, java class library, jar inside jar )

1 Mart 2012 Perşembe

org.hibernate.HibernateException: Wrong column type Found Çözümü

Merhaba, hibernate kullanırken ortaya çıkan basit ama can sıkıcı bir problemin çözümünü paylaşmak istiyorum. Java tarafında @Entity annotation'ı ile oluşturduğum bir sınıfta, String değişkenleri @Column annotation'ı ile bağladım. Bu işlemi yaparken annotation parametresi olarak yalnızca column name'i verdim. Bu şekilde veritabanı tarafına bağlanmaya çalıştığımda, başlıkta geçen "org.hibernate.HibernateException: Wrong column type Found: char, expected: varchar2(255)" hatasını aldım. Bu hatayla karşılaşanlar için gelelim sebebine ve çözümüne...
@Column(name = "veritabani_alani")
public String getAlan() {
   return alan;
}
Hatayı alırken kullandığım veritabanı MySQL'di. Hibernate ile oluşturmadığım, daha önce elle tanımlanmış tabloları kullanıyordum. Bu tabloların karakter içeren alanları ise CHAR tipinde tanımlanmıştı. Hibernate, entity sınıflarında String olarak tanımlanan değişkenleri veritabanında eşlerken VARCHAR(255) kullanır. Herhangi bir spesifik karakter tipi belirtilmediği için ve Hibernate, alanın veritabanındaki karşılığını VARCHAR(255) değil de, tanımadığı bir tip olan CHAR görünce böyle bir hata ortaya çıkıyor. Benzer durumda bu hata belki alınmayabilir fakat schema validation alanı validate yapıldığı zaman Hibernate alanı valdiate edemediği için bu hata alınıyor. 

Hatayı düzeltmek için yapılması gereken şey aslında basitçe Hibernate'e bu alanın tipinin CHAR olduğunu göstermek. Bunu için de @Column'a bir parametre daha ekliyoruz ve tipi belirtiyoruz.
@Column(name = "veritabani_alani", column_definition="char")
public String getAlan() {
   return alan;
}
( char, column_definition, database, hibernate, java, mysql, org.hibernate.HibernateException, varchar, wrong column type found )
Kaynak: http://cedar715.wordpress.com/2009/10/13/org-hibernate-hibernateexception-wrong-column-type-found-char-expected-varchar2255/