Archive for the ‘Java’ Category

Java Collections

Ocak 20, 2015

Collection Arayüzleri
Collections framework’un özünü oluşturan şey ‘Collection’ denen arayüzdür. Bu arayüz
framework’un temeli olan metotları tanımlar. List ve Set arayüzleri Collection arayüzünde
olmayan metotları tanımlayarak, framework’un uygulama alanını genişletirler.
Arayüzler yalnızca metotların imzalarını taşırlar; sınıflarda olduğu gibi metotların gövdelerini (işlevi
gerçekleştiren kodları) içermezler.
Önemli bir başka arayüz Map adını alır. Ancak Map arayüzü Collection arayüzünün bir genişlemesi
değildir. Đleride göreceğimiz nedenlerle, Map arayüzü Collection hiyerarşisine dahil değildir; ama
Collections framework’un bir parçasıdır.

Kaynak:
Collections1
http://www.baskent.edu.tr/~tkaracay/etudio/ders/prg/dataStructures/Collections/Collections01.pdf

Java map class HashMap TreeMap HashTable LinkedHashMap

Ekim 24, 2013

Java Collections Framework MapsjavaMapClass

Map interface anahtar-değer ikililerini bir arada tutmak için yapılmıştır. HashMap(), LinkedHashMap(), TreeMap(), Hashtable() Java Collections Framework üyeleridir.

HashMap() :
Başlangıç sığası 16 ve yükleme çarpanı 0.75 olan boş bir HashMap kılgılar. Anahtar-değer ilişkisi ne gore değerler setlenir. Değerler alınırken sıra gözetmeksizin gelir.

LinkedHashMap() :
Başlangıç sığası 16 ve yükleme çarpanı 0,75 olan boş bir LinkedHashMap yaratır. Erişim
sırası giriş sırasıdır.

TreeMap() :
Anahtarların doğal sırasında boş bir ağaç gönderimi (tree map) yaratır

Hashtable() :
Başlangıç sığası 11 ve yükleme katsayısı 0,75 olan boş bir Hashtable yaratır.

Map Foreach :

Map map = new HashMap();
map.put(“FATİH”, “DURMUŞ”);
map.put(“ELİF”, “DURMUŞ”);
map.put(“AHMET TALHA”, “GÜVEN”);

for (Object key : map.keySet()) {
System.out.println(“Key : ” + key.toString() + ” Value : ”
+ map.get(key));
}

Alıntı Kaynakları:
http://www.programcreek.com/2013/03/hashmap-vs-treemap-vs-hashtable-vs-linkedhashmap/

http://www.w3resource.com/java-tutorial/java-collections.php

http://orhanbalci.net/tr/?p=696

ORM Nedir?

Temmuz 24, 2013

ORM, Object Relational Mapping anlamına gelmektedir. O/R Mapping olarakta yazılabilir. ORM nedir diye bir soru soracak olursak şöyle bir cevap verebiliriz: “İlişkisel veritabanı (RDBMS) ile nesneye yönelik programlanın (OO) arasında bir tür köprü özelliği gören ve ilişkisel veritabanındaki bilgilerimizi yönetmek için, nesne modellerimizi kullandığımız bir tekniktir/metodtur”. Basite indirgemek istersek: “Nesnelerimizi ilişkisel veritabanındaki tablomuza bağlayan ve veri alış-verişini bizim için yapan bir tekniktir/metodtur”. ORM tekniği belli bir programlama diline bağlı değildir ve her OO dilinde yazılabilir/kullanılabilir.
Günümüzde kullanılan popüler programlama dillerinde yazılmış bir çok ORM kütüphaneleri vardır. Bunlara çoğu zaman ORM araçları (ORM Tools) deniyor. Yazımın ilerleyen bölümlerinde Java dünyasında kullanılan popüler ORM araçlarına bir göz atacağız.

Popüler ORM aracları hangileridir?

Sektörde kullanılan en popüler Java ORM araçlarından bazılarını şöyle sıralayabiliriz:
Hibernate
2001 yılında Gavin King tarafından yazıldı ve şu an yazılım yönetimi JBoss şirketi tarafından yapılmaktadır. [2] Tamamen açık kaynak kodludur ve Java sektöründe en çok kullanılan ORM aracıdır. LPGL v2.1 lisansını kullanmaktadır. HQL adında (Hibernate Query Language) kendine has bir nesnesel veri çekme diline sahiptir. Criteria API içerisindeki sınıfları sayesinde bir çok işlemi SQL yazmadan yapmamıza olanak sağlamaktadır. Sınıfları, ilişkisel veritabanındaki tablolara bağlamak için hem XML hem de Anotasyon kullanır. Tüm veritabanları ile sorunsuz çalışmaktadır. JSR 220 (Enterprise Java Beans 3.0) [3] ve JSR 317 (Java Persistence 2.0) [4] spesifikasyonlarıyla tam uyumludur. Bunların yanında polymorphism, caching, otomatik transaksiyon yönetimi, lazy load etme gibi önemli özellikleri vardır.
Apache OpenJPA
JSR 220 (Enterprise Java Beans 3.0) spesifikasyonunun bir implementasyonlarından biridir. [1] Yazılımı Apache Software Foundation şirketi tarafından devam ettirilmektedir ve Apache 2.0 lisansıyla birlikte açık kaynak kodludur. JSR 220 spesifikasyonun sunduğu tüm özelliklere sahiptir. Tüm Apache serverleri ile tam uyum göstermektedir. Hibernate kadar popüler olmasada bir çok kesim tarafından kullanılmaktadır. Websphere şirketinin tercih ettiği ve kullandığı bir yazılımdır.
Toplink
Oracle şirketinin liderliğinde devam eden bir ORM aracıdır. [5] Sektörün en ileri derecede olan ORM araçlarının başında gelmektedir. Ne yazıkki açık kaynak kodlu değildir. Deneme amaçlı download edilebilir. Bu ORM aracının en dikkat çeken özelliklerinden biri hem veritabanıyla hem de XML kaynaklarıyla çalışabilmesidir. Bunun yanında tüm veritabanları ve application serverlerle uyumlu çalışabilmektedir.
Toplink ürünü altında Toplink Essentials adında bir ORM aracı vardır ve JSR 220 (Enterprise Java Beans 3.0) spesifikasyonu ile tam uyumludur. Bu araç tamamen açık kaynak kodludur. Fakat Toplink Essentials, Toplink içerisindeki tüm özelliklere sahip değildir.
EclipseLink
Eclipse Foundation şirketine bağlı olan bir ORM aracıdır ve açık kaynak kodludur. [7] Eclipse Public License ve Eclipse Distribution License lisanslarını kullanmaktadır. Oracle Toplink ürününün ortaya çıkması Oracle şirketinin Toplink ürününün 11g versiyonunu bu projeye bağışlamasıyla başlamıştır. Aslında EclipseLink bir ORM aracından çok daha geniştir. JPA, JAXB, JCA, SDO ve OSGI standartlarını desteklemektedir. EclipseLink kullanarak veritabanlarınının yanında web servisleri, object XML baglantıları ve kurumsal bilgi servisleriyle (EIS) bilgi alışverişi yapılabilir.
Apache Cayenne
Apache Software Foundation şirketinin çıkardığı bir ORM aracıdır. [8] Apache License 2.0 lisansını kullanmaktadır. ORM aracından beklenen tüm özelliklere sahiptir ve sektörde iyi bir yere gelmek için emin adımlarla devam etmektedir.
IBatis
Açık kaynak kodludur ve Apache License 2.0 lisansına sahiptir. [6] (IBatis tam olarak bir ORM aracı sayılmasa da belirtmek istedim.) IBatis bir nesne-veri aktarma aracıdır. Kullanımı çok basittir. Genellikle hazır olan bir veritabanından birebir bilgi çekmek ve bu bilgileri otomatik olarak nesnelere yazdırmak için kullanılır. Veritabanındaki tablolara bağlantı için yazılan SQL leri XML dosyaları içinde barındırıyor.
Spring Jdbc Template
Spring kütüphanesinin bir parçası olmakla beraber aynen IBatis gibi ORM aracı olmayıp veri alış-verişinde çok büyük kolaylıklar sağlamaktadır. Tamamen açık kaynak kodludur. [9]

ORM araci kullaniminda onemli tavsiyeler

Lazy loading özelliğini iyi bir şekilde kullanın. Örnek olarak, her zaman çekilmesi gerekmeyen verileri lazy olarak çekin.
Caching mekanızmasını iyi anlayın ve gereksinimlere gore değiştirin.
Çok karmaşık ORM sınıf modelleri yapmaktan kaçının.
Şunu kabul etmek gerekir ki, ORM araçları her soruna çözüm sağlamıyor. Bu nedenle bazen normal SQL kullanmak ta olağan birşeydir.
Veritabanınızdaki tablo şemanızı en iyi şekilde tasarlayın ki, nesne modeliniz ona göre uygun ve performanslı çalışsın. Kötü tasarlanmış bir veritabanı şeması, hangi ORM aracı seçilirse seçilsin efektif şekilde çalışmaz. Tavsiyem veritabanınızı iyi bir DBA (DataBase Administrator) tarafından kontrol ettirmeniz.
Verileri çekerken mümkün olduğu sürece pagination (sayfalandırma) kullanmaya çalışın. Böylelikle tüm bilgileri bir anda almanıza gerek kalmamış olacak.
Transaksiyon, concurrency batch processing ve locking mekanızmalarını, yazılımınıza en uygun şekilde configure edin.
ORM aracı kullanırken iki tür yöntemle başlıyabilirsiniz. İlki önce veritabanı hazırlanıp ardından java sınıfları hazırlanır/üretirilir. İkincisi de önce java sınıfları hazırlanıp, ardından veritabanı tasarlanır/üretilir. Ben şahsen önce veritabanı hazırlayıp, sonra java kodlarını yazıyorum/üretiyorum. Veritabanı çok önemli olduğu için, kontrolün bende olmasını istiyorum. Java sınıflarını yazarken de, bazen otomatik kod üreten program kullanıyorum, bazen de tüm sınıfları kendim yazıyorum. Tavsiyem, polymorphism veya karmaşık modeller kullanmak istiyorsanız sınıfları kendiniz hazırlanamanızdır.

JSF Nedir?

Temmuz 18, 2013

Java Server Faces web uygulamalarının arayüzünü inşa etmek için oluşturulan, yeni nesil
web uygulama çatısıdır.

Temel Özellikleri

  • Managed Beans Yönetimi
  • Bütünleşik Ajax Desteği Kullanımı
  • Bileşen Tabanlı (Component Oriented)
  • Gelişmiş EL (Expression Language) Desteği
  • Olaya Dayalı (Event Driven)
  • Durum Yönetimi(State management)
  • 3. Parti JSF Bileşenleri Kullanımı

jsf-life-cycle

Şimdi bu adımları sıralayalım;

1.Create or Restore View
2.Apply Values from User
3.Ensure Values are Valid
4.Update Model with Valid Values
5.Fetch a New View, If Necessary
6.Render View

1. Create or Restore View (Görünümü oluştur)
Bu aşama kullanıcını sayfada bir butonu ya da linki tıkladığı aşamadır.

2. Apply Values from User (Kullanıcıdan verileri al)
Bu aşamada ekrandaki değerler alınır ve bileşenler içerisinde saklanır.

3. Ensure Values are Valid – Process validations (Verilerin doğruluğunu kontrol et)
Kullanıcının girdiği değerlerin kritelerle uyup uymadığı, zorunlu alanların doldurup doldurulmadığı vb diğer işlemler bu fazda kontrol edilir, eğer herşey uygunsa bir sonraki faza geçilir, yoksa ilk faza dönülür. Mesela ilgili alana sadece sayı girilmesini istemişiz ama kullanıcı harf yazmış ya da ilgili alanı zorunlu yapmışız ama kullanıcı herhangi bir değer vermeden formu göndermiş gibi…

4. Update Model with Valid Values (Verilerle modeli güncelleştir)
Verilerin doğruluğunun bir önceki fazda kontrolünden sonra sıra artık modeli (bean, entity vb.) güncelleştirir yani formdan elde edilen verilen yapışmasını sağlar. Formdaki “name” alanına girilmiş veri “Student” sınıfının “name” alanına yapışması gibi…

5. Fetch a New View, If Necessary (Gerekliyse yeni bir görünüm oluştur)
Eğer formdaki işlemler sonucu yeni bir görünüm yaratmak istiyorsak onu oluşturur.

6. Render View (Görünümü İşle)
Son olarak web sayfasını kullanıcıya tekrardan göstermek için bu faz çalışır ve görünüm işlenmiş olur.

Managed Beans (Backing Bean) yönetimi
JSF ile ortaya çıkan bir kavramdır.Yaşam evreleri JSF IOC(Inversion Of Control) konteyner tarafından yönetilen JavaBean sınıfıdır.JSF ile hazırlanan bir sayfada birden çok Managed Bean kullanılmaktadır.JSF 2.0 ile birlikte sınıfların başında @MangedBean annotationını kullanarak ilgili beane erişim sağlanır.Daha eski versiyonlarında faces-config.xml dosyasında tanımlama yapmak gerekir.

Managed-bean-scope : faces-config.xml’e eklediğiniz bean’in ne kadar süreyle bellekte tutulacağını gösterir. 4 adet parametre alır.
a-request : Sayfa her çağırıldığında oluşturulur ve sayfa gösterimi ile sonlanır. Bir çok sayfada bu scope’u kullanırız çünkü bellekte request-response süresince kalacağı için belleğe fazla bir yük getirmez.

b-session : Kullanıcı uygulamamıza ilk eriştiğinde bir oturum açılır ve bu oturum kullanıcı tarayıcısını kapatana kadar devam eder. Bu süre içerisinde saklamak istediğimiz Bean’leri session scope’ta tutarız. Örneğin bir kullanıcı sisteme kendi hesabı (account) ile girdiğinde tarayıcısını kapatana kadar uygulamada takip edilmelidir. Bu tür işlemleri session scope’ta saklarız. Ancak unutulmamalıdır ki bu işlemin bize belli bir bellek maliyeti olacaktır. O nedenle sadece gerekli olması durumunda bu scope’u kullanmalıyız.

c-application : Bu scope uygulama başlatıldığında açılır ve uygulamayı durdurana kadar bellekte yer işgal eder. Burada aktif kullanıcı sayısını ya da kalıcı bir bağlantı nesnesini tutabilir. Uygulama başlarken veritabani bağlantısını yaratıp application’da saklarız ve gerektiğinde her yerden erişip çağırabiliriz.

d-none : Bu bean’in hiçbir scope’a ait olmadığını gösterir. Henüz hiçbir yerde kullanmadım.

http://ibrahimcatakli.com/2012/08/06/jsf/#more-25
http://jsf.kodcu.com/tr/blog
http://www.sukrucakmak.com/jsf-life-cycle/
http://www.herturbilgi.com/2013/01/jsf-java-server-faces-1/

Howto Install Tomcat 7 on Debian

Nisan 11, 2013

nano tomcat-users.xml

<?xml version=’1.0′ encoding=’utf-8′?>

<tomcat-users>

<role rolename=”tomcat”/>

<role rolename=”role1″/>

<user username=”tomcat” password=”tomcat” roles=”tomcat”/>

<user username=”role1″ password=”tomcat” roles=”role1″/>

<user username=”both” password=”tomcat” roles=”tomcat,role1″/>

<user name=”ad” password=”pw” roles=”admin,manager” />

<role rolename=”manager-gui”/>

<user username=”tomcat” password=”s3cret” roles=”manager-gui”/>

</tomcat-users>

Software Engineering Orkus

This Article describes how to install Apache Tomcat 7 on a Debian (Lenny) OS in 8 easy steps.
For this HowTo to work smoothly you must already have Java installed on your machine. In case you haven’t Java installed on your machine, there is anoter HowTo for this Task on my Blog. Follow the instructions in this Post and come back when Java is up and running.

1. Download it!

The first step is to aquire Tomcat 7 by downloading it from the Homepage. This is really easy, I used wget to download the “apache-tomcat-7.0.2.tar.gz” archive into my /temp Directory. This should look something like this:

2. Unzip & Move

Move the package to it’s permanant location and unzip the package into its own folder.

3. Create “tomcat” Group & User

Next you need to add a new group and a new user to your system. This will…

View original post 706 kelime daha

HQL Query Examples

Mart 29, 2013

Select Query
Query query = session.createQuery(“from Stock where stockCode = :code “);
query.setParameter(“code”, “7277”);
List list = query.list();

Query query = session.createQuery(“from Stock where stockCode = ‘7277’ “);
List list = query.list();

Delete Query
Query query = session.createQuery(“delete Stock where stockCode = :stockCode”);
query.setParameter(“stockCode”, “7277”);
int result = query.executeUpdate();

http://www.mkyong.com/hibernate/hibernate-query-examples-hql/

Java enum class

Mart 29, 2013

public enum EvetHayir {

BOS(“”),
EVET(“1”),
HAYIR(“0”);
private String value;

private EvetHayir(String value) {
this.value = value;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public static void main(String[] args) {
System.out.println(“- EVET : ” + EvetHayir.EVET.getValue());
System.out.println(“- HAYIR : ” + EvetHayir.HAYIR.getValue());
System.out.println(“- BOS : ” + EvetHayir.BOS.getValue());
}
}

Criteria

Mart 23, 2013

//Session session= HibernateFactory.openSession();
Session session= HibernateFactory.getSession(sessionId);

Criteria criteria = session.createCriteria(HizmetSgkNeviBean.class);
criteria.add(
Restrictions.eq(HizmetSgkNeviBean.KOD, Integer.parseInt(veriler[3])
));
HizmetSgkNeviBean hizmetSgkBean = (HizmetSgkNeviBean) criteria.uniqueResult(); //Tek kayıt alır.

Java Conversion (Dönüştürme )

Mart 19, 2013

String to char (ASCII Kode)
String isim=”Fatih”;
int ch = (isim.substring(isim.indexOf(“.”)-1,isim.indexOf(“.”))).codePointAt(0);

char (ASCII Kode) to String
String vl =new Character( (char) ((isim.substring(isim.indexOf(“.”)-1,isim.indexOf(“.”))).codePointAt(0)+1)).toString();

long to int
public static int safeLongToInt(long l) {
int i = (int)l;
if ((long)i != l) {
throw new IllegalArgumentException(l + ” cannot be cast to int without changing its value.”);
}
return i;
}

int to String
int i =5;
String str= Integer.toString(i);

String to double
String text = “12.34”; // example String
double value = Double.parseDouble(text);

Date:
Calendar to String
Calendar calendar = Calendar.getInstance();
FastDateFormat dateFormat = FastDateFormat.getInstance(“dd/MM/yyyy”);
String toDay= dateFormat.format(calendar);
(Date Formates)

Calendar to date
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();

Hibernate flush

Mart 18, 2013

Çalkalama (flushing)

Zaman zaman Session nesnesi, hafızadaki nesnelerle veritabanını senkronize edecek SQL komutları verir. Bu işleme çalkalama (flush) denir.
Bu işlem belirli zamanlarda olur:

– find() ve iterate() çağrıldığında
– Transaction.commit() çağrıldığında
– Session.flush() ile

SQL komutları şu sırayla gerçekleşir:

– bütün varlık kayıtları (insert), Session.save() ile belirtilen sırada.
– varlık güncellemeleri
– koleksiyonların silinmeleri
– koleksiyon eleman silinmesi, güncellemesi ve kaydı (insert)
– koleksiyon kaydı
– varlık silinmesi, Session.delete() sırasında.

Bir tek, native id oluşturma özelliğine sahip nesneler, Session.save() denildiği vakit, kaydedilir.

session.flush();// nesne veritabanına yollanıyor
session.clear();// baska nesneyi oturuma almak icin onceki siliniyor