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ış )