26 Temmuz 2012 Perşembe

net.sf.jasperreports.engine.JRRuntimeException: Subreport overflowed on a band that does not support overflow.

iReport kullanıyorsanız ve aşağıdaki hatayı alıyorsanız;

net.sf.jasperreports.engine.JRRuntimeException: Subreport overflowed on a band that does not support overflow.

bu hatanın sebebi, sayfanızın herhangi bir bolumune koymuş olduğunuz subreport'tan kaynaklanmaktadır. Neden mi? Çünkü, subreport'u ana jrxml'a yerleştirdiniz diyelim, eğer bölümün yüksekliği subreport içeriği dolduktan sonra  küçük geliyorsa böyle bir hata alıyorsunuz.

Daha net açıklamak gerekiyorse;

Sayfamın page footer'ına bir subreport yerleştirdim. bunun orjinal yüksekliği belki 200, ama ben ana jrxml'deki yüksekliği 100 bırakmışım. Bu durumda jrxml'leriniz compile olmuyor.

1. Ya subreportunuz büyüyebilir olmayacak
2. ya da ana jrxml'deki ilgili kısmın boyutunu yükselteceksiniz.

4 Temmuz 2012 Çarşamba

Hibernate'te kolay sorgu yazma (Example.create)


Hibernate'e elimiz değmişken biraz daha karıştırayım dedim.
Şöyle bir güzellik ve kolaylık gördüm.

Yeni bir instance yaratıyorsunuz ve istediğiniz özellikleri set ediyorsunuz. Example.create(X) X yerine ilgili instance'ı veriyorsunuz. ve listeme işlemi gerçekleşiyor.

Tek tek Restrictions.eq("name", "Mavis").add(....).list() diye yazmaktansa bu daha kolay.

Cat cat = new Cat();
cat.setSex('F');
cat.setColor(Color.BLACK);
List results = session.createCriteria(Cat.class)     .add( Example.create(cat) )     .list();


Sorgu, cinsiyeti dişi ve rengi siyah olan kedileri listeleyecek.

kaynak sayfa: http://docs.jboss.org/hibernate/orm/3.5/reference/en/html/querycriteria.html

3 Temmuz 2012 Salı

Hibernate'de çoklu kriter oluşturmak (Multiple OR, Hibernate Criteria Expression Or)

http://docs.jboss.org/hibernate/orm/3.5/reference/en/html/querycriteria.html

"Restrictions.or"u çoklu bir şekilde kullanmak istedik, fakat aklımıza gelmedi, derken araştırdım buldum. Yukarıda link'ten ilgili sayfaya gidebilirsiniz.

//Normal Or kullanımı
aşağıdaki sorgu ismi Fritz'le başlayan ve yaşı null olmayan veya 0 olanları listeleyecek.

List cats = sess.createCriteria(Cat.class)
    .add( Restrictions.like("name", "Fritz%") )
    .add( Restrictions.or(
        Restrictions.eq( "age", new Integer(0) ),
        Restrictions.isNull("age")
    ) )
    .list();
 
Çoklu Or kullanımı için ise Restrictions.disjunction() 'ı kullanabilirsiniz. : 
 
List cats = sess.createCriteria(Cat.class)
      //ismi listenin içinde varolanlar
    .add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) ) 
 //ve yaşı null olmayan veya 0 veya 1 veya 3 olanlar
     .add( Restrictions.disjunction()
        .add( Restrictions.isNull("age") )
        .add( Restrictions.eq("age", new Integer(0) ) )
        .add( Restrictions.eq("age", new Integer(1) ) )
        .add( Restrictions.eq("age", new Integer(2) ) )
    ) )
    .list(); 

4 Haziran 2012 Pazartesi

Java'da String ve StringBuffer/StringBuilder arasındaki fark

Java'da String ve StringBuffer/StringBuilder arasındaki en önemli fark : String objesi değiştirilemezken StringBuffer/StringBuilder objelerinin değiştirilebilir olmasıdır.

String objenin içine saklanan değer değiştirilemez. Peki nasıl oluyor da ben istediğim zaman string bir değişkeni değiştirebiliyorum diye sorabilirsiniz. Sizin görmüş olduğunuz nesene aynı nesne değildir. String objesi değişmek için arka planda yeni bir String nesnesi oluşturur. Her değişikilte yeni bir String class'ı oluşuyor. Bu da zamanla performansı kötü yönde etkiliyor.

StringBuffer/StringBuilder objelerini kullanırsanız performan açısından daha iyi sonuçlar elde edersiniz. Çünkü Objenin içinde saklanan değer değiştirilebilir bir değerdir.

StringBuffer ile StringBuilder arasında ki tek fark ise "senkronizasyon"dur.
StringBuffer "synchronized" iken StringBuilder "synchronized" değildir.

Thread kullancaksanız; StringBuffer, kullanmayacaksanız StringBuilder kullanmanız daha verimli olcaktır.

Kaynak: http://www.techtamasha.com/difference-between-string-and-stringbufferstringbuilder-in-java/28

1 Haziran 2012 Cuma

Java'da hızlı method oluşturmak (Extract Method)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." Martin Fowler

Biliyorum, java da method oluşturmayı bu alandaki herkes biliyordur. Bilmiyorsa da henüz yolun başındadır. İlk java öğrenmeye başladığımda kod yazıyordum fakat bir metod nasıl oluşturulur, metoda parametre nasıl verilir bilmiyordum. Gözümde büyüttüğüm kadar da değilmiş. Henüz emekliyordum çünkü.
Metod nasıl yazılır, parametre nasıl gönderilir öğrendim çok geçmeden. Ama bundan birkaç ay öncesine kadar hızlı bir şekilde nasıl metod oluşturulur, Proje Müdürümüz Çağrı Bey'den öğrendim.

Özellikle refactor yaparken çok hızlı ve güvenilir bir yol "Extract Method" seçeneği.

Tek yapmanız gereken önceden yazmış olduğunuz kodu (metod olacak) seçiniz ve sağ tıklayınız. Refactor > Extract Method
gelen ekranana metod ismini yazıyorsunuz ve Tamam diyorsunuz. Metod oluştu hem de ne cinsinden deger döndüreceğini de kendisi ayarlayarak.

Bu yöntem son zamanlarda refactor yaparken çok fazla işimi kolaylaştıran bir yol.

Local Variable oluşturmak
Bunların yanında aynı class'ın bir degerini sürekli süreli "x.getZzz()" diyerek almaktansa hızlı bir şekilde local variable oluşturmakta işimi bir hayli kolaylaştırıyor. Bunu da aynı şekilde Refactor seçeneğindeki local variable'ı seçip, eğer programın sizin için vermiş olduğu isimlendirmeyi beğenmediyseniz yeni bir isim vererek yeni bir yerel değişken oluşturabilirsiniz.

Umarım bu bilgi işinize yarar. Paylaşmak istedim.

17 Mayıs 2012 Perşembe

Java'da herhangi bir dosya nasıl byte'a çevrilir? (how to convert a file to byte array)

//Dosyanın yolu verilir ve yeni bir file elde edilir
   File file = new File(".././dosyaAdi.xls");

   FileInputStream fis = new FileInputStream(file);
   ByteArrayOutputStream bos = new ByteArrayOutputStream();
   byte[] buf = new byte[1024];
   try {
    for (int readNum; (readNum = fis.read(buf)) != -1;) {
     bos.write(buf, 0, readNum); // no doubt here is 0
    }
   } catch (IOException ex) {
    throw new java.lang.IllegalStateException("Hatalı içerik!");
   }
   
   byte[] byteFile = bos.toByteArray();

11 Mayıs 2012 Cuma

List ve Set arasındaki fark

Bildiğimiz gibi elma ve armut bir birinden çoook farklı iki meyvedir. :) Bugün bahsedeceğim başlığın konusu bildiğim ama benim bazen "acaba hangisiydi!" dediğim bir konu aslında. Bir daha unutmamak adına bu bloga yazmaya karar verdim. Aslında çok basit: Her nesneyi eklemek istiyorsanız List'i, her aynı nesneden sadece birini eklemek istiyorsanız Set'i kullanıyoruz. Örnekle açıklayacak olursak,


public static void main(String[] args) {
  List stringList = new ArrayList();
  stringList.add("aaa");
  stringList.add("aaa");
  stringList.add("bb");
  stringList.add("cc");
  System.out.println("String List :" + stringList.toString());
  
  Set stringSet = new HashSet();
  stringSet.add("aaa");
  stringSet.add("aaa");
  stringSet.add("bb");
  stringSet.add("cc");
  System.out.println("String Set :"+ stringSet.toString());
 }


Bunu çalıştırdığımda çıktı aşağıdaki gibi olacaktır.

String List : [aaa, aaa, bb, cc]
String Set : [aaa, bb, cc] 
Eğer listenizi List tipinden oluşturursanız, içine eklediğiniz tüm String tipindeki nesneleri kabul edecektir. Ama listenizin içinde her birinden bir tane olacak şekilde nesneler bulunsun istiyorsanız o zaman Set kullanmanızı öneririm.