Wednesday, August 22, 2012

Java Application-dan Baglanti Kurulmadan Once MS SQL Server Ayarlar

Merhaba arkadaslar bizler MSSQL Server kurduktan sonra Java Application-dan Database ulamak istedigimizde oncelikle asagidaki ayarlari yapmamiz gerekiyor.















Asagidaki resimde goruldugu uzer butun IP-lerde
     Active       : Yes
     Enabled    : Yes
     TCP Port  : 1433

olarak ayarlandikran sonra.












Iyi gunler.

JSoup Example

import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.Jsoup;
import org.jsoup.select.Elements;

import java.net.URL;
import java.io.IOException;

public class JSoupExample {

    public static void main(String[] args) throws IOException {
        URL url = new URL("http://selcukoglu.blogspot.com/");
        System.out.println("URL : " + url.toExternalForm());

        Document doc = Jsoup.parse(url, 3 * 1000);

        Elements types = doc.select("link[type]");

        System.out.println("Size : (" + types.size() + ")");
        for (Element link : types) {
            System.out.println("*");
            System.out.println("        link[type] : " + link.tagName());
            System.out.println("        href       : " + link.attr("abs:href"));
            System.out.println("        rel        : " + link.attr("rel"));
        }

    }
}

Tuesday, August 21, 2012

Sertifika (Göz Boyamaca )

Size herhangi bir şey satmak için kapınıza gelen bir satış temsilcisine ne gözle bakarsınız? Ben bu durumla karşılaşınca, beynimde otomatik olarak şahsı başımdan savma rutinleri devreye giriyor. Birilerinin benim üstüme bu şekilde gelerek bana bir şey satması imkansız. Bu inisiyatifin benden kaynaklanması lazım.


Yazılım sektöründe de durum anlaşılan farklı değil. Birileri biz yazılımcılara devamlı bir takım, ne işe yaradıkları belirsiz sertifikalar satmaya çalışıyor. Tek dertleri para kazanmak. Kullandıkları ve insanları en çok etkileyen argümanları ise yazılım kalitesini artırmak ve eleman yetiştirmek için çaba sarfediyor oluşları. Yesinler! Ben bunu ispatlayan ne bir araştırma ne de bir rapor gördüm.

Bir gün içinde alınan sertifikalar var. Artık para basma makinasının sesi o kadar yükselmiş ki utanıp, sıkılıp, hadi daha fazla dikkat çekmeden para basmaya devam edelim ama sertifikayı vermeden önce çakma bir imtihanla sertifikanın alınmasını zormuş gibi gösterelim diyenler ve bunu uygulayanlar var. Daha önce herkese para karşılığında dağıttıkları sertifikaları şimdilerde dandik bir imtihanla vermeye devam ediyorlar. Ne kadar büyük bir gelişme! Artık yazılım sektörü bu sertifikalarla iş başına gelen yazımcıların meydana getirdikleri yazılım kalitesinde boğulup gidecek. Bu sertifika satıcıları bana cennetten tapu satanları hatırlatıyor. Bir gün içinde sertifika almış ve karşıma geçip bana çevik süreçlerin nasıl işlediğini anlatmaya çalışan birisini ben ciddiye almıyorum.

Peki yazılımcılar neden böyle şeylere aldanıp, zor kazandıkları paralarını pencereden dışarı atıyorlar? Ha ben gidip bir günlük bir eğitim almışım, akabinde bir test ile bana sertifika verilmiş, ha bu adamlar benim kapıma gelmişler ve sertifikayı bana kapıda satmışlar. İkisi de aynı şey değil mi? Neden bunlara aldanıyor insan?

Devir ne yazık ki göz boyama devri. İş görüşmelerinde sertifikasyona gereğinden çok fazla önem veriliyor. İşveren eğer bu programcı A, B, C sertifikalarına sahipse, iyi bir programcı olmalı diye düşünüyor. Ne kadar yanlış! Bu sadece programcının bir yolunu bulup, sertifikayı aldığını gösterir. Ne kadar iyi bir programcı olduğunu göstermez.
Çok gezen mi çok bilir, çok okuyan mı? Çok sertifika sahibi mi çok bilir, çok pratik yapan bir programcı mı?

Bir programcıyı iş başına getirme kriteri sahip olduğu sertifika kolleksiyonun genişliği olmamalı. Bu sertifikalar programcının sahasında ne kadar iyi olduğunun göstergesi olamaz. Bir programcının iyi olup olmadığını anlamak için, onunla bir gün boyunca çalışıp, hangi yeteneklere ve bilgi seviyesine sahip olduğunu anlamak zor değil. Buna alternatif olarak işveren programcının eski çalışma arkadaşlarından referans getirmesi isteyebilir. Eski patronundan referans demedim, eski mesai arkadaşlarından dedim. Programcılar birbirlerini tanır, karşılıklı yetenek, beceri ve bilgi seviyelerini tartabilirler. Hiçbir programcı, iyi bir seviyede olmayan bir programcı için iyi bir programcı diyerek, kendi itibarını zedelemek istemez. Bu yüzden programcının eski mesai arkadaşları her zaman onun hakkında bilgi edinmek için kullanılabilecek güvenli bir kaynaktır.

Bizim yazılımcı olarak bu sertifika sövüşlemesine gelmeden, kendimizi yazılımcı olarak nasıl geliştirebiliriz sorusuna cevap aramamız gerekir. Eğer programcı mutlaka bir sertifika sahibi olmak istiyorsa, o sertifikayı edinsin. Ama kendisi için yapsın, etrafta A,B,C sertifikalarım var diyerek, böbürlenmek için ya da daha kolay iş bulurum düşüncesiyle değil.

Ambalajın güzelliğine aldanmayalım. Ambalajın içinden ne çıktığı önemli. Sertifikaların çok büyük bir kısmı güzel ambalajdan başka bir şey değil. Bunu Oracle Certified Master, Java EE Enterprise Architect (SCEA 5) sertifikası sahibi olarak söylüyorum.

EOF (End Of Fun)
Özcan Acar


www.kurumsaljava.com

Thursday, August 16, 2012

Exception in thread "main" java.lang.IllegalArgumentException: Invalid row number (-32768) outside allowable range (0..65535)

Row row = sheet.createRow((short) r++);
 
 short-u int yaparsaniz duzelir.
 
Row row = sheet.createRow((int) r++);
 

Swing ile yazilmis, jar olarak paketlenmiş projeyi neden çift tıklamayla başka bilgisayarda çalıştıramıyorum?

Aldığın hata "main class'ı bulamadım, main class yolunu bilmiyorum" hatası gibi gözüküyor. Jar içinde bir manifest.mf dosyası olmalı. İçinde manifesto versiyonu, main class(main metodunu barındıran class) gibi bilgileri barındıran bu dosyayı açıp

Main-Class: az.mb.MainApp
 
 
gibi bir tanım var mı ona bakmalısın. Yok ise bu jar'ın manifest dosyasında main class tanımlanmamış demektir. Bunu yukarda gösterdiğim şekli ile, tam paket ismi ile dosyaya eklersen sorun çözülecektir.

Monday, August 13, 2012

JSF Türkçe Karakter (Application Server Glassfish)

WEB-INF/glassfish-web.xml içinde



Daha fazla bilgi icin btsoru.com

Javascript yardımıyla windows'un hesap makinasıni acmak

ilk önce projeye generic handler dosyası ekledim sonra javascipt tarafında ise aşadaki kodları ekleyerek generic handler dosyasının içindeki hesap makinesi kodu çagırma kodunu çalıştı.


    function HesapMakinesi() {
        $.ajax({
            url: "HesapMakinesi.ashx",
            type: "POST",
        });
    }


generic handler dosyasının içinde ise şu kodu yazdım HesapMakinesi.ashx dosyasi
System.Diagnostics.Process.Start("calc.exe");

Daha fazla bilgi icin btsoru.com

jsf 2 sayfa yönlendirme ve Redirect

jsf 1.2 yönlendirme işlemini faces-config.xml ile yapıyorduk.Jsf 2.0'da diğer xml ayarlarından kurtulduğumuz gibi yönlendirmede de xml'e birşey yazmaktan kurtulduk. jsf'de iki türlü yönlendirme yapabiliriz.

1. Bir web sayfasından diğer web sayfasına doğrudan yönlendirme :  




2. Managed Bean'den yönlendirme :



                                                                                     public String goTargetPage() {

    return "targetPage";

 }                                                             


Yönlendirme yaparaken action 1. durumda action'a yazdığımızı 2. durumda ise return ile döndürdüğüm sayfa adının .xhtml uzantılı dosyasını bulup onu görütüler. Ayrıca isterseniz dosyanın .xhtml'li adını yada .jsf'li adını yazsanızda yine aynı şekilde yönendirme çalışacaktı.

Aşağıdaki 3 buton aynı işi yapacaktır.

 





Bu şekilde normal yönlendirme yapıyoruz. Bunu dışında bir de redirect özelliğimiz var. jsf 1.2'de faces-config'e tagını ekleyerek yapabiliyorduk. jsf 2'de ise sayfaya faces-redirect=true parametresi geçerek yapabiliyoruz. 

Örneğin



yada bean üzerinden

daha fazlasi icin ibrahim demir bulabilirsiniz.

SQL ROW NUMBER Kullanımı

Wep projelerinde sayfalama ihtiyacı duyulduğunda ya data kontrollerinin sayfalama özelliği aktif edilir (ki bu benim hemen hemen hiç kullanmadığım yöntemdir) ya da bu işlem veritabanında halledirlir. Data kontrollerinin sayfalama özelliği aktif edilse de gerekli verilerin tümü veritabanından çekilerek viewstate'de saklanır ve sayfalama yapılır. Tüm verinin bir anda çekilmesi performansı olumsuz yönde etkileyecektir. 10 ya da 100 satır verinin bir anda çekilmesi gözle görülür bir yavaşlığa sebep olmayabilir fakat bir anda 10 bin ya da 100 bin verinin çekilmesi ziyaretçilerinizin uzun süre boş sayfaya bakmalarına ve sıkılıp sitenizi terk etmelerine sebep olacaktır. Benim kullandığım yöntem veritabanından gerekli satırları sayfa bazında çekmektir. Bunun için sql server bize row_number adında kullanımı çok basit bir fonksiyon sunar. Row_Number fonksiyonu kısaca anlatmak gerekirse bu fonksiyon bize her bir kaydın kaçında satırda olduğunu verir ve Over ifadesi ile birlikte kullanılır.
Ben sayfalama yapacapım veritabanını aşağıdaki şelikde hazırlayıp 23 adet veri girdim.

Burada URUNID int, URUNADI nvarchar(50) türündendir. Şimdi hemen row_number fonksiyonunun kullanımına bir örnek verelim.
?
1

SELECT ROW_NUMBER() OVER(ORDER BY URUNID) AS 'SATIR',* FROM URUNLER
Yukarıdaki kodda ROW_NUMBER() fonksiyonundan sonra OVER ifadesi gelmektedir. Burada sıralamanın hangi alana göre ve nasıl yapılacağını bildiriyoruz. Over ifadesini aşağıdaki şekilde yazarak sıralamayı tersten de yaptırabilirdik.
?
1

SELECT ROW_NUMBER() OVER(ORDER BY URUNID DESC) AS 'SATIR',* FROM URUNLER
Her iki sorgunun ekran görüntüsü aşağıdadır.


Over() ifadesinden sonra kayıtların sıra numarasını verecek alan adını belirtiyoruz. Yukarıdaki resimlerde de görülüdüğü gibi tablomuza 'SATIR' adında yeni bir alan eklenmiş ve kayıtlar burada birer birer artmaktadır. Şimdi sorgumuza biraz eklemeler yaparak sayfalı olarak nasıl sorgulama yapacağımızı görelim.
?
1
2
3
4
5
6

WITH SAYFALIKAYIT AS
(
SELECT ROW_NUMBER() OVER(ORDER BY URUNID) AS 'SATIR',* FROM URUNLER
)

SELECT * FROM SAYFALIKAYIT WHERE SATIR BETWEEN 5 AND 10
Yukarıdaki kodları açıklamak gerekirse WITH deyimi ile SAYFALIKAYIT adında temp bir tablo oluşturuyoruz ve bu tabloda 5. ve 10. sıradaki kayıtlarımızın bulunmasını sağlıyoruz. Bunu da BETWEEN 5 AND 10 komutuyla gerçekleştiriyoruz. Bu sorgudan sonra ekran görüntümüz şöyledir;

Bu ekran görüntüsünde de görüldüğü gibi tüm kayıtlardan sadece 5. ve 10. kayıtlar arasındaki satırlar gelmiştir.


Bu Konu Hakinda daha fazla bilgi icin asagidaki Siteden ulasabilirsiniz.

http://dirlikt.com/7_SQL-ROW-NUMBER--Kullanimi.html

Wednesday, August 8, 2012

String compareTo

public Int compareTo(String str)
Diğer metodumuz olan compareTo(),  equals() metoduna göre biraz daha gelişmiştir. Çünkü kelimeleri sadece eşit olup olmadıkları ile değil, sözlük sıralamalarına göre de karşılaştırabilir ve aralarındaki farkı + veya – değerde bir sayı yani Integer olarak dönebilir. Bu metotta karşılaştırma iki metindeki yazıların Unicode değeri ile yapılır.
Burada kelimelerin sözlük sıralamaları önemlidir. Eğer bir kelime sözlükte diğer bir kelimeden önce geliyorsa o sözcükten küçüktür ve eğer sonra geliyorsa da o sözcükten büyüktür.
  • Eğer karşılaştırma sonucunda iki değer birbirine eşitse 0 sayısı döner.
  • Eğer ilk String diğerinden büyükse 0′dan büyük bir değer döner.
  • Eğer ilk String diğerinden küçükse 0′dan küçük bir değer döner.
Sonucun Int dönmesi bize kelimeleri sözlük sıralamasına göre karşılaştırmada kolaylık sağlar.

String nesnesi  birbirine göre uzunluk, sözlük sıralaması ve küçük büyük harflerine göre karşılaştırılır. Eğer küçük büyük harflere göre karşılaştırma istemiyorsak compareToIgnoreCase metodunu kullanırız.,

Tuesday, July 3, 2012

Date increment hour

public static void main(String[] args) {
        try {
          
            Calendar calendar = Calendar.getInstance();
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            calendar.setTime(format.parse("2012-06-30 18:30:12"));
            System.out.println("Original = " + format.format(calendar.getTime()));
            calendar.add(Calendar.HOUR, 5);
            calendar.add(Calendar.MINUTE, 00);
            calendar.add(Calendar.SECOND, 0);
            System.out.println("Updated  = " + format.format(calendar.getTime()));
        } catch (Exception e) {
        }
}

Monday, July 2, 2012

JSF Email Validator

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

/**
 *
 * @author AbdulkadirS
 */
@FacesValidator(value="emailVal")
public class EmailValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
        Pattern pattern = Pattern.compile(EMAIL_PATTERN);
        Matcher matcher = pattern.matcher(value.toString());
        boolean b = matcher.matches();
        if (!b) {
            FacesMessage message = new FacesMessage();
            message.setSummary("Geçersiz email...");
            throw new ValidatorException(message);
        }
    }
}

Tuesday, June 26, 2012

File IO Buyuk Olculu Dosyalarin Okunmasi

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

vm'i başlatırken -Xms500M -Xmx500M parametreleri ile heap size değiştirebilirsin, ms initial heap size, mx maximum heap size dır. Bunlara uygun değerleri vererek kullanmak mümkün, uygulaman ide içerisinde ise run options gibi bir menü ile bunu yapabilirsin, eğer jar ise command prompt tan "java -jar uygulama.jar -Xms500M -Xmx500M" ile uygulama başlatılır ve 500MB heap alanı jvm için ayrılmış olur.


http://www.btsoru.com/questions/1879/file-io-buyuk-olculu-dosyalarin-okunmasi

Friday, June 22, 2012

Date increment days

 public static void main(String[] args) {

         try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

            Date startDate = (Date) format.parse("2012-06-22");;
            String start = format.format(startDate);
            String end = format.format(addDays(startDate, 9));

            System.out.println("Start : " + start);
            System.out.println("End   : " + end);
        } catch (Exception e) {
            e.printStackTrace();
        }

}

public static Date addDays(Date date, int days)
    {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, days);
        return cal.getTime();
    }

Thursday, June 7, 2012

Iki Data Arasinda Aylarin Hesablanmasi

public static int months(Date start, Date end) {
     int count = 0;
     Calendar cal = Calendar.getInstance();
     cal.setTime(start);
     int startDate = cal.get(Calendar.DATE);
     int startMonth = cal.get(Calendar.MONTH);
     int startYear = cal.get(Calendar.YEAR);
     cal.setTime(end);
     int endDate = cal.get(Calendar.DATE);
     int endMonth = cal.get(Calendar.MONTH);
     int endYear = cal.get(Calendar.YEAR);
     count = ((endYear - startYear) * 12) + (endMonth - startMonth) + ((endDate >= startDate) ? 1 : 0);
     return count - 1;
}

Thursday, May 24, 2012

Eclipse kısa yol tuşlarını (shortcut key) kullanımi

STRG + SHIFT + T = Sinif arama 
STRG + SHIFT + R = Kaynak dosya arama 
STRG + SHIFT + F = Kod formatlama 
STRG + SHIFT + O = import siniflarin organizasyonu 
ALT + SHIFT * R = Isim degistirme (degisken, metot, sinif) 
ALT + SHIFT + M = Yeni metot olusturma 
CTRL + SHIFT + R = Open Resource
CTRL + SHIFT + O = Organize Import
ALT + SHIFT + S sonra R = Generate Getter and Setter
ALT + LEFT
ALT + RIGHT = tab gecisleri
CTRL + SHIFT + X (uppercase) name = NAME
CTRL + 7 = comment
CTRL + 1 = getter setter
ALT + SHIFT + F1= plugin kodlarini gorebiliyorsunuz 
ALT + SHIFT + M = yeni methodu oluştur, kod içinde kullanılan aynı olan yerler var ise de yeni oluşturduğunu koy süper.


Asagidaki link-ten alinmistir daha ayrintili bilgi icin bu link btsoru.com tiklayin



 
 

Java'da Windows işletim sisteminin ekranını kilitleme

public class Runnig {

    public static void main(String[] args) {
        try {
            Runtime.getRuntime().exec("C:\\\\Windows\\\\System32\\\\rundll32.exe user32.dll,LockWorkStation");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Friday, May 11, 2012

Base64

String text = "U2FsYW0gQWJkdWxrYWRpciBCZXksDQoNCkJpeiBLb3Ryb2xsZXJpbWl6aSB5YXBpcCBzaXppIGhhYmVyZGFyIGVkZWNlei4NCg0KVGVzZWtrdXJsZXIuDQo=";
  String decoded = new String(Base64.decodeBase64(text.trim().getBytes()),"UTF-8");
  System.out.println(decoded);


Console

Salam Abdulkadir Bey,

Biz Kotrollerimizi yapip sizi haberdar edecez.

Tesekkurler.

Thursday, April 12, 2012

Date between days list

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class TestDate {
    public static void main(String[] args) {
        try {
            List days = new ArrayList();
            String start = "21/07/2011";
            String end = "08/08/2011";
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
            DateFormat outFormatter = new SimpleDateFormat("yyyy-MM-dd");
            Date startD = (Date) formatter.parse(start);
            Date endD = (Date) formatter.parse(end);
            long ara = 24 * 1000 * 60 * 60;
            long endTime = endD.getTime();
            long time = startD.getTime();
            while (time <= endTime) {
                days.add(new Date(time));
                time += ara;
            }
            for (int i = 0; i < days.size(); i++) {
                Date d = (Date) days.get(i);
                String day = outFormatter.format(d);
                System.out.println(day);
            }
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
    }
}

Tuesday, April 10, 2012

Clipboard

class ClipboardListener extends Thread implements ClipboardOwner {

    Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
    boolean bEnough = false;

    @Override
    public void run() {
        Transferable trans = sysClip.getContents(this);
        regainOwnership(trans);
        while (true) {
            if (isitEnough()) {
                break;
            }
        }
    }

    public void itisEnough() {
        bEnough = true;
    }

    public void itisNotEnough() {
        bEnough = false;
    }

    boolean isitEnough() {
        return bEnough;
    }

    @Override
    public void lostOwnership(Clipboard c, Transferable t) {
        try {
            sleep(200);
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
        try {
            Transferable contents = c.getContents(this);
            regainOwnership(contents);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    void processContents(Transferable t) {
        if (isitEnough()) {
            return;
        }
        DataFlavor[] flavors = t.getTransferDataFlavors();
        for (int i = flavors.length - 1; i >= 0; i--) {
            try {
                Object o = t.getTransferData(flavors[i]);
                if (o instanceof String) {

                    System.out.println(o.toString().toLowerCase());

                    break;
                }
            } catch (UnsupportedFlavorException | IOException exp) {
                exp.printStackTrace();
            }
        }
    }

    void regainOwnership(Transferable t) {
        sysClip.setContents(t, this);
        processContents(t);
    }

    public static void main(String[] args) {
        ClipboardListener b = new ClipboardListener();
        b.itisNotEnough();
        b.start();
    }
}

Double Format

public class Main {

    public static void main(String[] args) {
  
        java.text.DecimalFormat df = new java.text.DecimalFormat("###.##");
        double val = 63.5666;
     
            try {
                val = df.parse(df.format(val)).doubleValue();
                System.out.println(val);
            } catch (ParseException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
       
    }
}

Saturday, April 7, 2012

PERSISTENCE API İNCELEME

Java persistence api java geliştiricilerine uygulamalarında kullanacakları veriye nesne
göreli olarak erişim imkanı sunar. Java persistence üç ana alana ayrılır:
• Java Persistence API
• Java sorgu dili
• Fiziksel veriyi nesne göreli eşleme

1- Varlıklar
Varlık java persistence ın tanım nesnesidir. Genel olarak varlık göreli veri tabanında
tablolara karşılık gelir ve her varlık örneği bu tabloda bir satırı ifade eder. Bir varlığın
persistent durumunu varlığın ilgili alanları yada özellikleriyle belirlenir. Bu alanlar ve
özellikler varlıkların belleklerde tutulan verilerle eşlenmesi için nesne/göreli eşleme
yöntemlerini kullanırlar.

1.1- Varlık Sınıflarının Gereksinimleri

Bir varlık sınıfı şu gereksinimleri izlemelidir:

• Sınıf javax.persistence.Entitiy bilgilendirmelerine uymalıdır.

• Sınıfın public veya private argümansız bir yapılandırıcısı olmalıdır. Sınıfın
bunun dışında başka yapılandırıcıları da olabilir.

• Sınıf final tanımlanmamalıdır. Hiçbir metot ve persistence bağımlı değişken
final tanımlanmamalıdır.

• Eger sınıfın bir kopyası ayrı bir nesne gibi bir değer olarak atanmak isteniyorsa
bu sınıf Serializable ara yüzünü gerçekleştirmelidir.

• Varlık sınıfları hem varlık sınıflarını hem de diğer sınıfları extend edebilir. Diğer
sınıflar da varlık sınıflarını extend edebilirler.

• Persistence ilişkili değişkenlerin tümü private, protected yada paket içi private
olarak tanımlanmalıdır ve direk erişimleri sınıf içi metotlarla olmalıdır.

1.2- Varlık Sınıfında Persistence İlişkili Alanlar ve Özellikler

Varlığın persistence durumu o varlığın değişkenleri veya JavaBeans-style özellikleri
tarafından erişilebilirdir. Bu alanlar ve özellikler şu türlerde olmalıdır

• Java İlkel Türleri
• Java.lang.String
• Diğer Türler:

o Java.math.BigInteger
o Java.math.BigDecimal
o Java.util.Date
o Java.util.Calendar
o Java.sql.Date
o Java.sql.Time
o Java.sql.TimeStamp
o Kullanıcı tanımlı türler
o byte[]
o Byte[]
o char[]
o Character[]

• Sayılı türler
• Diğer varlıklar ve/veya varlık grupları
• Gömülü sınıflar

1.2.1- Persistent Alanlar

Eger varlık sınıfı persistent alanlar içeriyorsa, Persistence çalışma zamanı
varlık sınıfı değişkenlerine doğrudan erişebilir.

1.2.2- Persistent Özellikler

Eger varlık sınıfı persistent özellikler içeriyorsa, varlık JavaBeans in metot
çevirimlerini takip etmelidir. JavaBeans-style özellikleri getter ve setter methodları
kullanır. Bu metotların isimleri varlık sınıfının değişken isimlerinden sonra tanımlanır.
Her özellik için bir getter (getProperty) ve setter (setProperty) bulunur. Tek değerli
özellikler için method şekli şöyledir:
Type getProperty()
void setProperty(Type type)

1.3- Varlıklarda Birincil Anahtarlar

Her varlık bir tek nesne tanımlayıcısına sahiptir. Örneğin bir tüketici varlığı
tüketici numarası ile simgelenir. Birincil anahtarlar istemcilerin ilgilendikleri varlık
nesnesine ulaşmalarını sağlar. Her varlığın bir birincil anahtarı olmak zorundadır. Bir
varlık basit yada bileşik birincil anahtara sahip olabilir. Basit birincil anahtarlar
javax.persistence.Id notasyonunu kullanırlar. Bileşik birincil anahtarlar bir birincil
anahtar sınıfında tanımlanmalıdır. Bileşik birincil anahtarlar
javax.persistence.EmbeddedId ve javax.persistence.IdClass notasyonlarını
kullanırlar.
Birincil anahtarlar veya bileşik anahtarların özellik yada alanları şu türleri
kullanmalıdır:

• Java İlkel Türleri
• Java.lang.String
• Java.util.Date
• Java.sql.Date

Kayan noktalı gösterim birincil anahtarlar için asla kullanılmamalıdır.

1.3.1- Birincil Anahtar Sınıfları

Bir birincil anahtar şu özellikleri karşılamalıdır:

• Sınıfın erişim tanımlayıcısı public olmalıdır.

• Özellik tabanlı erişim kullanılıyorsa sınıfın özellikleri public yada protected
olmalıdır.

• Sınıfın bir public yapılandırıcısı olmalıdır.

• Sınıf hashCode() ve equals(Object other) metotlarını gerçekleştirmelidir.

• Bileşik birincil anahtarlar çoklu alan ve özelliklerle eşleşmiş olarak yada
gömülebilir sınıf şeklinde ifade edilmelidir.

• Eger birincil anahtar sınıfı bir varlığın alanları yada özellikleriyle eşleşmişse,
birincil anahtar sınıfının özellikleri ve alanlarının isimleri ve türleri o varlık
kümesinin isimleri ve türleriyle uyuşmalıdır.

public final class LineItemKey implements Serializable {

public Integer orderId;

public int itemId;

public LineItemKey() {}

public LineItemKey(Integer orderId, int itemId) {
this.orderId = orderId;
this.itemId = itemId;
}

public boolean equals(Object otherOb) {
if (this == otherOb) {
return true;
}

if (!(otherOb instanceof LineItemKey)) {
return false;
}

LineItemKey other = (LineItemKey) otherOb;
return (
(orderId==null?other.orderId==null:orderId.equals
(other.orderId)
)
&&
(itemId == other.itemId)
);
}

public int hashCode() {
return (
(orderId==null?0:orderId.hashCode())
^
((int) itemId)
);
}
public String toString() {
return "" + orderId + "-" + itemId;
}
}

Tablodaki kod bir bileşik birincil anahtar sınıfının gerçekleştirimidir. orderId ve itemId
değerleri birlikte tek olarak bir varlığı ifade eder.


1.4- Varlıklarda Çokluk Bağıntısı

Varlıklarda 4 çeşit çokluk vardır. Bire bir, bire çok, çoğa bir ve çoğa çok.
Bire-bir ilişki : Her varlığın bir özelliği başka bir bağıntının sadece tek bir özelliği ile
eşleştirilmişse bire bir ilişki vardır denir. Bire bir ilişkiler javax.persistence.OneToOne
biçimini kullanırlar.

Bire-çok ilişki : Bir varlığın bir özelliği bir başka varlığın birden fazla alanı ile
ilişkilendirilmiş olabilir. Bire çok ilişkiler javax.persistence.OneToMany biçimini
kullanırlar.

Çoğa-bir ilişki : Bir varlığın birçok özelliği bir başka varlığın yalnız bir alanı ile
ilişkilendirilmiş olabilir. Bu durumda çoğa bir ilişki vardır denir. Çoğa bir ilişkiler
javax.persistence.ManyToOne biçimini kullanırlar.

Çoğa-çok ilişki : Bir varlığın birçok özelliği bir başka varlığın birden fazla alanı ile
ilişkilendirilmişse çoğa çok ilişkiden söz edilir. Çoğa çok ilişkiler
javax.persistence.ManyToMany biçimini kullanırlar.

1.5- Varlık Bağıntılarının Yönü

Varlıklar arası ilişkiler iki yönlü yada tek yönlü olabilir. iki yönlü ilişkiler hem sahip
taraf hem de ters tarafa sahiptir. tek yönlü ilişkilerde ters taraftan söz edilmez,
yalnızca sahip taraf vardır. Persistence ın ilişkiye dair günlemeleri veri tabanında
nasıl yapacağı sahip tarafa bağlıdır.

1.5.1- İki Yönlü İlişkiler

İki yönlü ilişkilerde her varlığın başka bir varlığa ilişkin alan yada özelliği
bulunur.

İki yönlü ilişkiler şu kurallara uymalıdır:

• İlişkinin ters tarafı mappedBy elemanı kullanılarak sahip tarafa ait olmalıdır.

• Çoğa çok ve çoğa bir ilişkilerin çok tarafları mappedBy elemanı tarafından
tanımlanmamalıdır. Çok taraf her zaman sahip taraf olmalıdır.

• Bire bir iki yönlü ilişkilerde sahiplik yabancı anahtara sahip olan tarafa aittir.

• Çoğa çok ilişkilerde her iki yön de sahip taraf olabilir.


1.5.2- Tek Yönlü İlişkiler

Tek yönlü ilişkilerde yalnızca bir varlığın ilişki alanı yada özelliği bulunur. İlişki
alanı bulunan varlık ilişkili olduğu varlıktan haberdardır fakat ilişkili olunan varlığın
ilişki alanı olan varlıktan haberi olmaz.

2- Varlık Yönetimi

Varlıklar varlık yöneticisi tarafından yönetilirler. Varlık Yöneticisi
javax.persistence.EntityManager örnekleriyle ifade edilir. Her bir varlık yöneticisi
örneği persistence bağlamlarıyla birleşirler. Persistence bağlamının görev aralığının
içinde varlık örneklerinin yaratılması , üstelenmesi ve silinmesi bulunur.

2.1- Persistence Bağlamı

Persistence bağlamı, yönetilen varlık örneklerinin oluşturduğu bir yapıdır ve bu
yapı özel bir veri tabanında bulunur.

2.2- Varlık yöneticisi

Varlık yöneticisi, varlık örneklerini yaratır ve yok eder. Ayrıca, varlıkları temel
anahtarına göre bulur ve sorguların bu varlıklara uygulanmasını sağlar.


2.2.1- Varlık Yöneticisi Denetleyici Yönetimi

Herhangi bir varlık yöneticisinin persistence bağlamı denetleyici kullanarak
otomatik olarak çoğalır. Uygulamanın tüm bileşenleri tarafından kullanılan varlık
yöneticisi örneği Java Transaction Architecture (JTA) denilen işlemin içinde bulunur.
JTA işlemi diğer uygulamanın bileşenlerini de işin içine sokar. Bu JTA
işleminin bileşenleri persistence bağlamına erişmek ister. Bunun olması için varlık
yöneticisinin javax.persistence.PersistenceContext aracılığıyla uygulama
bileşenlerine enjekte edilmesi gerekir. Persistence bağlamı JTA işlemi sırasında
otomatik olarak artar ve varlık yöneticisi bu JTA işlemi sırasında Persistence bağlamı
ile aynı persistence parçasını işaret eder. Bu sayede uygulamanın bileşenleri varlık
yöneticisine parametre geçmek zorunda kalmaz sadece JTA işleminde değişiklik
yapmak yeterlidir. Java EE denetleyicileri buradaki yaşam döngüsünü yönetirler.
Varlık yöneticisi örnekleminin uygulama bileşenlerine enjekte edilmesi:

@PersistenceContext
EntityManager em;

2.2.2- Varlık Yöneticisi Uygulama Yönetimi

Persistence bağlamı uygulamanın bileşenlerinde otomatik olarak artmıyorsa
ya da varlık yöneticisinin yaşam döngüsü uygulama tarafından yönetiliyorsa bu
durum ortaya çıkar.

Varlık yöneticileri bir uygulama tarafından persistence bağlamına erişmek için
kullanılıyorsa ve JTA işleminde tarafından artırılmıyorsa kullanılır. Başka bir deyişle
varlık yöneticisi yeni ve izole olmuş persistence bağlamını oluşturur.Varlık yöneticisi
ve onun yarattığı persistence bağlamı uygulama tarafından yaratılır ve yok edilir.
Uygulamalar javax.persistence.EntityManagerFactory metodunu kullanarak
varlık yöneticisini oluşturur.

@PersistenceUnit
EntityManagerFactory emf;
EntityManagerFactory örneklemi kullanarak varlık yöneticisi oluşturulur.
EntityManager em =emf.createrEntityManager();

2.2.3- Varlık Yöneticisi Kullanarak Varlıkları Bulmak

EntityManager.find metodu kullanarak varlık biricik anahtarına göre
depolanmış varlıkları buluruz.

@PersistenceContext
EntityManager em;

public void enterOrder(int custID, Order newOrder) {
Customer cust = em.find(Customer.class, custID);
cust.getOrders().add(newOrder);
newOrder.setCustomer(cust);
}

2.2.4- Varlık Örneklem Yaşam Döngüsünün Yönetimi

Varlıklar üstündeki işlemleri varlık yönetici kopyalarıyla yönetiyoruz. Varlık
örneklemleri 4 durumda bulunabilir: yeni , yöneten , silinen ve ayıran durumlar.

Yeni varlık örneklemlerinin persistent kimlikleri yoktur ve varlık bağlamıyla
ilişkendirilecek durumda değillerdir.

Yöneten varlık örneklemlerinin persistent kimlikleri vardır ve varlık
bağlamlarıyla ilişkilendirilirler.

Ayıran varlık örneklemlerinin persistent kimlikleri vardır ve varlık bağlamıyla
ilişkendirilecek durumda değillerdir.

Silinen varlık örneklemlerinin persistent kimlikleri vardır ve varlık bağlamlarıyla
ilişkilendirilirler


2.2.4.1- Varlık Örneklemleri

Yeni varlık örneklemleri persistent metodu tarafından yönetilirler. Yani persist
metodu tamamlanmış işlem gerçekleştiği zaman varlığın bilgileri bir veri tabanında
saklanır.
@PersistenceContext
EntityManager em;
...
public LineItem createLineItem(Order order, Product product,
int quantity) {
LineItem li = new LineItem(order, product, quantity);
order.getLineItems().add(li);
em.persist(li);
return li;
}
@OneToMany(cascade=ALL, mappedBy="order")
public Collection getLineItems() {
return lineItems;
}

2.2.4.2- Varlık Örnekleminin Silinmesi

Varlık örneklemlerinin yönetiminde silme işlemini yapmak için silme metodunu
kullanırız ya da cascade silme işlemini kullanırız. Bunu birebiriyle ilişkili varlıklarda
kullanırız. Eğer bu silme metodu yeni bir varlık tarafından çağırılıyorsa bu komut
askıya alınır. Eğer silme metodu Ayıran bir varlık tarafından çağırılıyorsa bu bir hata
oluşmasına sebep olur ne IllegalArgumentException fırlatır.
Public void removeOrder (Inteder orderId){
try {
Order order =em.find(Order.class,orderId)
em.remove(order);
}
}

2.2.5- Sorguların Oluşturulması

EntityManager.createQuery ve EntityManager.createNamedQuery metotları
Java Persistence sorgulama dillerindeki sorgulamaları kullanarak saklanmış bilgileri
sorgulamak için kullanılır.
CreateQuery metodu dinamik sorgular yaratmak için kullanılır.
public List findWithName(String name) {
return em.createQuery(
"SELECT c FROM Customer c WHERE c.name LIKE :custName")
.setParameter("custName", name)
.setMaxResults(10)
.getResultList();
}
CreateNamedQuery metodu ise statik sorgular yaratmak için kullanılır. Bu sorgular
javax.persistence.NamedQuery de tanımlıdır.
@NamedQuery(
name="findAllCustomersWithName",
query="SELECT c FROM Customer c WHERE c.name LIKE
:custName"
)
Alt tarafta createNamedQuery metodunun kullanımına ait bir örnek var. Bu örnekteki
NamedQuery yukarıda tanımlanmıştır.

@PersistenceContext
public EntityManager em;
...
customers = em.createNamedQuery("findAllCustomersWithName")
.setParameter("custName", "Smith")
.getResultList();

2.2.5.1- Sorgulardaki İsim Parametreleri

Parametre geçiren isimler javax.persistence.Query.setParamater (String
name, Object value) metodu kullanarak sınırlandırılırlar. Aşağıdaki örnekte
findWithName ve setParameter metodu kullanarak parametre geçiliyor.
public List findWithName(String name) {
return em.createQuery(
"SELECT c FROM Customer c WHERE c.name LIKE :custName")
.setParameter("custName", name)
.getResultList();

2.2.5.2- Sorgulardaki Durumsal Parametreler

İsim yerine durumsal parametre de kullanılır. Kullanım yapısı (?) den sonra
gelen sayı gelen parametrenin sorgudaki yerini verir.Query.setParameter(integer
position ,Object value) bu metot parametre geçmek için kullanılır.
public List findWithName(String name) {
return em.createQuery(
“SELECT c FROM Customer c WHERE c.name LIKE ?1”)
.setParameter(1, name)
.getResultList();
}
Giriş parametreleri 1. giriş parametrelerinden sıralanmaya başlar.

2.3- Persistence Birimleri

Persistence bolumu varlık yöneticisi örnekleri tarafından yönetilen bütün varlık
sınıflarını tanımlar.Bu varlık grupları tek bir bilgi deposunda bulunan bilgileri temsil
eder.

tanımlanır.META-INF dizini persistence.xml içeren JAR dosyası ya da dizini,
persistence bölümünün kaynağı olarak adlandırılır.
Persistence bölümünün çalışma alanı persistence bölümünün kaynağı tarafından
belirlenir.Her bir persistence bolumu kendi çalışma alanına özel bir isimle
tanımlanmak zorundadır.
Persistence bölümleri WAR ya da EJB JAR dosyalarını parçası olarak birlikte
kullanılabilir.Ayrıca WAR ya da EAR dosyalarının içine eklenebilecek bir JAR dosyası
olarak da birlikte kullanılabilir.
Eğer persistence bölümünü bir grup olarak bir EJB JAR dosyası içinde
kullanırsanız, persistence.xml EJB JAR in META-INF dizini içine yerleştirilmelidir.
Eğer persistence bölümünü bir grup olarak bir WAR dosyası içinde kullanırsanız,
persistence.xml WAR dosyasının WEB-INF/classes/META-INF dizini içine
yerleştirilmelidir.
Eğer persistence bölümünü WAR ya da EAR dosyası içine dahil edilecek bir
JAR dosyası içinde kullanırsanız, JAR dosyası aşağıdaki bölümlerden birisine
yerleştirilmelidir.

- WAR in WEB-INF/lib dizini
- Bir EAR dosyasının en üst seviyesi
- EAR dosyalarının kütüphane dizini

2.3.1- Persistence.xml Kütüğü

Persistence.xml bir ya da birçok persistence birimi tarafından tanımlanır.
Aşağıdaki örnek bir persistence.xml kütüğüdür.


This unit manages orders and customers.
It does not rely on any vendor-specific features and can
therefore be deployed to any persistence provider.

jdbc/MyOrderDB
MyOrderApp.jar
com.widgets.Order
com.widgets.Customer


Persistence bölümleri persistence.xml konfigürasyon dosyası tarafından

Bu dosyanın içinde OrderManagement denilen bir persistence parçası tanımlıdır ve
JTA tarafından kullanılırlar. JAR dosyası ve sınıf elemanları persistence sınıflarını
yönetirler .

EJB Join Tables


@Entity
public class Employee {
@Id private int id;
private String name;
@ManyToMany
@JoinTable(name="EMP_PROJ",
joinColumns=@JoinColumn(name="EMP_ID"),
inverseJoinColumns=@JoinColumn(name="PROJ_ID"))
private Collection projects;
// ...
}

---------------------------------------------------------------------------------------------------------------------


@Entity
public class Employee {
@Id private int id;
private String name;
@OneToMany
@JoinTable(name="EMP_PHONE",
joinColumns=@JoinColumn(name="EMP_ID"),
inverseJoinColumns=@JoinColumn(name="PHONE_ID"))
private Collection phones;
// ...
}

MS Access Connection




import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import sun.jdbc.odbc.JdbcOdbcDriver;

public class Main {

public static void main(String[] args) {
try {
DriverManager.registerDriver(new JdbcOdbcDriver());
Connection connection = DriverManager.getConnection("jdbc:odbc:selcukogluODBC");
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery("Select * From Student");
while(rs.next()){
System.out.println(rs.getInt(1) +" "+rs.getString(2)+" "+rs.getString(3)+" "+rs.getInt(4));
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}



Arif Cavadov

Friday, April 6, 2012

EJB Mappings Genel Bakış

1. Many-to-one
2. One-to-one
3. One-to-many
4. Many-to-many

Many-to-One Mappings


@Entity
public class Employee {
// ...
@ManyToOne
private Department department;
// ...
}



@Entity
public class Employee {
@Id private int id;
@ManyToOne
@JoinColumn(name="DEPT_ID")
private Department department;
// ...
}

One-to-One Mappings





@Entity
public class Employee {
@Id private int id;
private String name;
@OneToOne
@JoinColumn(name="PSPACE_ID")
private ParkingSpace parkingSpace;
// ...
}

@Entity
public class ParkingSpace {
@Id private int id;
private int lot;
private String location;
@OneToOne(mappedBy="parkingSpace")
private Employee employee;
// ...
}

One-to-Many Mappings


@Entity
public class Department {
@Id private int id;
private String name;
@OneToMany(mappedBy="department")
private Collection employees;
// ...
}


@Entity
public class Department {
@Id private int id;
private String name;
@OneToMany(targetEntity=Employee.class, mappedBy="department")
private Collection employees;
// ...
}

Many-to-Many Mappings



@Entity
public class Employee {
@Id private int id;
private String name;
@ManyToMany
private Collection projects;
// ...
}


@Entity
public class Project {
@Id private int id;
private String name;
@ManyToMany(mappedBy="projects")
private Collection employees;
// ...
}

EJB Automatic Id Example

@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
// ...
}

EJB Calendar , Date Example

@Entity
public class Employee {
@Id
private int id;
@Temporal(TemporalType.DATE)
private Calendar dob;
@Temporal(TemporalType.DATE)
@Column(name="S_DATE")
private Date startDate;
// ...
}

EJB Enumerated Types Example

---------------- 1. Adim ----------------
public enum EmployeeType {
FULL_TIME_EMPLOYEE,
PART_TIME_EMPLOYEE,
CONTRACT_EMPLOYEE
}

---------------- 2. Adim ----------------
@Entity
public class Employee {
@Id
private int id;
private EmployeeType type;
// ...
}

---------------- 3. Adim ----------------
@Entity
public class Employee {
@Id
private int id;
@Enumerated(EnumType.STRING)
private EmployeeType type;
// ...
}

EJB Lob Example


@Lob
@Column(name="PIC")
private byte[] picture;

----------------------------------------------------------------------------------------------

Veritabanındaki PARTDETAIL tablosunun DRAWING kolonu BLOB türündedir. BLOB Resim gibi
ikili(binary) verileri tutmada kullanılan binary large objects’ e dayanır. DRAWING kolonu
java.io.Serializable türündeki Part. drawing alanına eşlenmiştir. @Lob gösterimi alanın large object
türünde olduğunu göstermek için kullanılmıştır.

@Column(table="EJB_ORDER_PART_DETAIL")
@Lob
public Serializable getDrawing() {
return drawing;
}

----------------------------------------------------------------------------------------------

PARTDETAIL ‘a ait olan SPECIFICATION kolonuda , CLOB türündedir. CLOB, bir VARCHAR
kolonunda tutulamayacak kadar büyük olan dizgileri tutmada kullanılan character large objects’lere
dayanır. SPECIFICATION, java.lang.String türündeki Part.specification alanına eşlenmiştir. @Lob
gösterimi burdada large object türünü göstermede kullanılmıştır.

@Column(table="EJB_ORDER_PART_DETAIL")
@Lob
public String getSpecification() {
return specification;
}

----------------------------------------------------------------------------------------------

Veritabanına dosya yükleme yapmak istiyorsanız aşağıdaki örneği kullanabilirsiniz. Öncelikle yüklemeyi yapacağımız entity yi hazırlıyoruz. Bu dosyayı saklayacağımız alan içerik alanıdır. Bunu @Lob olarak tanıtıyoruz bu sayede veritabanında istediğimiz tipte saklayacaktır.

EJB Column Mappings Example

@Entity
public class Employee {
@Id
@Column(name="EMP_ID")
private int id;
@Column(name="EMP_NAME")
private String name;
@Column(name="EMP_SALARY")
private long salary;

public Employee() {}

public Employee(int id) {
this.id = id;
}

public int getId() { return id; }

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public long getSalary() {
return salary;
}

public void setSalary (long salary) {
this.salary = salary;
}
}


EJB Remote Example

@Remote
public interface EmployeeBeanRemote {
List listEmployee();
}



@Local
public interface EmployeeBeanLocal {
List listEmployee();
}




@Stateless
public class EmployeeBean implements EmployeeBeanLocal, EmployeeBeanRemote {

@PersistenceContext(unitName = "EJB_ApplicationPU")
EntityManager em;


@Override
public List listEmployee() {
try {
return em.createQuery("Select a From Employee a").getResultList();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
.
.
.
}

EJB EntityManager Example

1 - @PersistenceContext(unitName = "EJB_ApplicationPU")
EntityManager em;




2 - EntityManagerFactory emf = Persistence.createEntityManagerFactory("EJB_ApplicationPU");
EntityManager em = emf.createEntityManager();

EJB Queries Example

TypedQuery query = em.createQuery("SELECT e FROM Employee e",Employee.class);
List emps = query.getResultList();





public List findAllEmployees() {
TypedQuery query = em.createQuery("SELECT e FROM Employee e",
Employee.class);
return query.getResultList();
}

EJB Transaction Example

em.getTransaction().begin();
createEmployee(123, "Abdulkadir Selcukoglu", 45000);
em.getTransaction().commit();

EJB Example

Birici Adim

public class Employee {
private int id;
private String name;
private long salary;

public Employee() {}

public Employee(int id) {
this.id = id;
}

public int getId() { return id; }

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public long getSalary() {
return salary;
}

public void setSalary (long salary) {
this.salary = salary;
}
}

Ikinci Adim

@Entity
public class Employee {
@Id
private int id;
private String name;
private long salary;

public Employee() {}

public Employee(int id) {
this.id = id;
}

public int getId() { return id; }

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public long getSalary() {
return salary;
}

public void setSalary (long salary) {
this.salary = salary;
}
}

Ucuncu Adim



Dorduncu Adim

@Stateless
public class EmployeeBean implements EmployeeBeanLocal {

@PersistenceContext(unitName = "EJB_ApplicationPU")
EntityManager em;


}

Besinci Adim

@Stateless
public class EmployeeBean implements EmployeeBeanLocal {

@PersistenceContext(unitName = "EJB_ApplicationPU")
EntityManager em;

@Override
public List listEmployee() {
try {
return em.createQuery("Select a From Employee a").getResultList();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

}


Altinci Adim

@Stateless
public class EmployeeBean implements EmployeeBeanLocal {

@PersistenceContext(unitName = "EJB_ApplicationPU")
EntityManager em;

@Override
public List listEmployee() {
try {
return em.createQuery("Select a From Employee a").getResultList();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

@Override
public Employee createEmployee(int id, String name, long salary) {
Employee emp = new Employee(id);
emp.setName(name);
emp.setSalary(salary);
em.persist(emp);
return emp;
}


}


Yedinci Adim

@Stateless
public class EmployeeBean implements EmployeeBeanLocal {

@PersistenceContext(unitName = "EJB_ApplicationPU")
EntityManager em;

@Override
public List listEmployee() {
try {
return em.createQuery("Select a From Employee a").getResultList();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

@Override
public Employee createEmployee(int id, String name, long salary) {
Employee emp = new Employee(id);
emp.setName(name);
emp.setSalary(salary);
em.persist(emp);
return emp;
}

@Override
public Employee findEmployee(int id) {
return em.find(Employee.class, id);
}



}


Sekizinci Adim

@Stateless
public class EmployeeBean implements EmployeeBeanLocal {

@PersistenceContext(unitName = "EJB_ApplicationPU")
EntityManager em;

@Override
public List listEmployee() {
try {
return em.createQuery("Select a From Employee a").getResultList();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

@Override
public Employee createEmployee(int id, String name, long salary) {
Employee emp = new Employee(id);
emp.setName(name);
emp.setSalary(salary);
em.persist(emp);
return emp;
}

@Override
public Employee findEmployee(int id) {
return em.find(Employee.class, id);
}

public void removeEmployee(int id) {
Employee emp = em.find(Employee.class, id);
if (emp != null) {
em.remove(emp);
}
}

}


Dokuzuncu Adim

@Local
public interface EmployeeBeanLocal {
List listEmployee();
}


Onuncu Adim

@EJB
EmployeeBeanLocal local;


Onbirinci Adim

public EmployeeClient{
private List list = new ArrayList();
@EJB
EmployeeBeanLocal local;


public List getList() {
list = local.listEmployee();
return list;
}

public void setList(List list) {
this.list = list;
}
}

Javatar

EJB Giris

EJBs server tarafinda butun is mantiklarini(business logic) calistiran java component'leridir. Dependency Injection, Transaction, Messaging, Scheduling, Remote Access, Web Service End Points vb. gibi islemlerde kullanilir.

EJB yi anlamak icin http request ve response mantigini, web server'larin gelen cagrilara nasil cevap verdigini bilmeniz gerekir. Kisaca siz bir adres yazinca firefox da, browser bu adresin bulundugu server a cagriyi yonlendirir ve ordaki web server / application server cagriya cevap verir, ve sonucu browser a yollar, ve web server normalde bu islemi yaptiktan sonra gelen client cagrisini unutur. Iste server da yapilan islemleri unutmamak, nerde kaldigini bilmek ve onemli islemlerde yapilacak kontroller icin(ve bircok is mantiklari icin) server tarafindaki durumu kontrol etmek icin EJBs kullanilir javada.

Stateless Session Beans: Durumsuz bean'lerdir, islem yaptiktan sonra unutulurlar.

Stateful Session Beans: Durumlu bean'lerdir, java app calistigi surece, belirli bir timeout, islemsizlik gibi durumlar olusana kadar server tarafinda tutulurlar.

Singleton Session Beans: Singleton pattern'e gore bir kez olusturulup kullanilan bean'lerdir.

EJBs artik versiyon 3.1 (Java EE 6) daha da kolaylatirilmis ve Annotations (@Stateful, @Singleton gibi isaretlemeler) ile web.xml de ayarlari yapmadan kullanilabilir olmustur.

Monday, March 12, 2012

Frame AND Dialog Set ICON

ImageIcon img = new ImageIcon(getClass().getResource("/az/mitm/image/kucuk/logo.png"));
setIconImage(img.getImage());

Friday, March 9, 2012

JDialog Add Icon

ImageIcon img = new ImageIcon(getClass().getResource("/az/mitm/image/kucuk/logo.png"));
setIconImage(img.getImage());

Monday, March 5, 2012

Append Output to File Using FileOutputStream

Bu yazimda FileOutputStream sinifi ile yazdigim bir text dosyasinin uzerine tekrar baska yazilarida eklemek. Eyer siz bu sinif yardimi ile text yazi yazarsaniz her zaman text en son yazdiginizi gorursunuz. Ama FileOutputStream sinifini CONSTURUKTOR-nun ikinci parametresini FileOutputStream(path,true) bu seklide yazarsaniz text-teki yazilar kalir ve yeni yazida elave edilir.

public static void main(String[] args) {

String path = "C://Demo.txt";

try {
FileOutputStream fos = new FileOutputStream(path,true);
String name = "Abdulkadir Selcukoglu ";
fos.write(name.getBytes());
fos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}

Thursday, March 1, 2012

GMail Send

package az.mb;
import java.util.Properties;
import javax.annotation.Resource;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class GMail {
@Resource(name = "vpdmail")
private Session mailSession;
public void sendMessage(String email,String head,String mesaj) throws Exception {
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
boolean debug = true;
String SMTP_HOST_NAME = "smtp.gmail.com";
String SMTP_PORT = "465";
String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
Properties props = new Properties();
props.put("mail.smtp.host", SMTP_HOST_NAME);
props.put("mail.smtp.auth", "true");
props.put("mail.debug", "true");
props.put("mail.smtp.port", SMTP_PORT);
props.put("mail.smtp.socketFactory.port", SMTP_PORT);
props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
props.put ("mail.smtp.socketFactory.fallback", "false");
mailSession = Session.getInstance (props,
new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("email", "password");
}
});
mailSession.setDebug(debug);
Message msg = new MimeMessage(mailSession);
msg.setSubject(head);
msg.setRecipients (Message.RecipientType.TO,
InternetAddress.parse(email));
msg.setText(mesaj);
Transport.send(msg);
System.out.println("message sent");
}
}

Java equivalent to #region in c#

Bugunku yazimda yazdiginiz kodun gozunuzu yormadan her metoda asagidaki yazdigin satirin arasina alarak tek satir indirgeyip gerekli oldugunda kodun oldugu yeri mouse yardimi ile tiklayinca kodu gormenisi saglar.


Wednesday, February 29, 2012

Variable Info

Public class test{
static void go(Integer x){
System.out.println("Integer");
}
static void go(long x){
System.out.println("long");
}
static void go(byte x){
System.out.println("byte");
}
static void go(char x){
System.out.println("char");
}
public static void main(String[]args) {
int i=5;
go(i);
}

Console: netice long olacaq.cunki java setir setir oxuyur.ilk once ozone uygun primitive tipi axtarir.yeni kohne usuldan istifade edir.eger ozune uygun primitive zeif olarsa o zaman ozunun wrapper novunu secir.serte gore:
1. Primitive tip
2. Wrapper
3. “…” istifade olunur.
Int longun terkibinde oldugundan ve long evvelde geldiyi ucun longu secir.yeni
X=I;
Olur.int long-a menimsedilir.(32 bit 64 bite menimsedilir).eger int-e uygun int,long double olsa o zaman int ilk once ozone en yaxin olan int-I goturecek.eger int olmasa o zaman longu goturecek.yeni ozune uygun olan bitden yuxariya dogru olanlari goturecek.

Tuesday, February 14, 2012

PHP

http://www.phpdili.com/

Thursday, February 9, 2012

Kullanilan PHP-nin Bilgileri

?php echo phpinfo(); ?

JTextField Set Number

Event > key > KeyPressed

Asagidaki kodu yazinca ancak number kabul edir.


String value = txtNeceye.getText();
        int l = value.length();
        System.out.println(evt.getKeyCode());
        if ((evt.getKeyChar() >= '0' && evt.getKeyChar() <= '9') || evt.getKeyCode()==8 || evt.getKeyCode()==127|| evt.getKeyCode()==37|| evt.getKeyCode()==39) {
            txtNeceye.setEditable(true);
//label.setText("");
        } else {
            txtNeceye.setEditable(false);
//.setText("* Enter only numeric digits(0-9)");

        }

JFrame Show Center

setLocationRelativeTo(null);

JFrame Hide Maximize

setResizable(false);

Saturday, February 4, 2012

Kalitimda metodun static olmasi

Asagidaki kullanim dogru bir kullanim cunku burada kaltim duzgun gerceklestirilmis.

public class Animal{
public void sound(){
System.out.println("Huuuuuuuu");
}
}

public class Dog extends Animal{

@Override
public void soud() {
System.out.println("Hav Hav");
}
}


Asagidaki kullanim yanlis cunku kalitimda static method override olmaz.

public class Animal{
public static void sound(){
System.out.println("Huuuuuuuu");
}
}

public class Dog extends Animal{

//Exception static method override
@Override
public void soud() {
System.out.println("Hav Hav");
}
}

Tuesday, January 31, 2012

Enum-un Method-da Declare Edilmesi

Enum method'un icinde declare olunmaz.

public class Test{
public static void main(String args[]){
enum Animal{
DOG , CAT
}
}
}

Bu seklde bir yazilm hatalidir.

Degisenlere Degerlerin Atanmasi

Not : Global degisenler herhangi bir deger verilmeyince default olarak tipe uygun default degeri alir(int 0 , String null , double 0.0 , boolean false). Ama local degisenler tanim;andiklari zaman o anda degerleri verilmeli verilmese Compile Error verir

public class Test{
static int x ;

public static void main(String args[]){
int y = 5;
y = x;
System.out.priintln("y = "+y)
}
}

//CONSOLE
y = 0

public class Test{

public static void main(String args[]){
int x;
int y = 5;
y = x; //Comple Error
System.out.priintln("y = "+y)
}
}

//CONSOLE

Thursday, January 26, 2012

Jar Windows Service Make

C:\Users\abdulkadirs\Documents\NetBeansProjects\MikserSMSandEMAIL_26122011\Mikse
rSMSandEMAIL\dist>sc create "BenimServicem" binPath= "C:\Program Files\Java\jdk
1.6.0_13\bin\java.exe -jar MikserSMSandEMAIL.jar " type= own start= auto error=
ignore

Monday, January 23, 2012

PHP

http://www.phpdili.com/

Saturday, January 14, 2012

JSP Yeni baslayanlar

http://www.seyretogren.com/video/java-ders-3-19-jsp-giris-1.html

http://www.seyretogren.com/video/java-ders-3-20-jsp-giris-2.html

http://www.seyretogren.com/video/java-ders-3-21-jsp-giris-3.html



http://www.durgut.com/jsp-giris/

http://www.durgut.com/jsp-giris-2/

http://www.durgut.com/jsp-giris-3/

Tuesday, December 13, 2011

java Date between timer

public class Main {

public static void main(String args[]) {
boolean isOK =true;
int time = 0 ;
Calendar cal1 = new GregorianCalendar();
while(isOK){
Calendar cal2 = new GregorianCalendar();
time = (int) ((cal2.getTime().getTime() - cal1.getTime().getTime()) / 1000);

System.out.println(time);
if(time == 5){
isOK = false;
}
}
System.out.println("Days= " + time);
}
}

Saturday, October 1, 2011

Kim Tez Oturdu

public class Runing {
public static void main(String[] args) {
Scanner h=new Scanner(System.in);
int a= h.nextInt();
int massiv[]=new int [a];
int ixt= (int) ( (a-1)*Math.random()+1);
for(int i=0;i massiv[i]=i+1;
System.out.println("massivin olcusu="+a);
System.out.println("novbe="+ixt);
//Esas program
int d=0 ;int c=-1;
for (int i=0;i d=0;
while (d c++;
if (massiv[c%a]!=0) d++;
}
massiv[c%a]=0;

}
for (int i=0;i if (massiv[i]!=0) System.out.println("cavab="+(i+1));
}

}