25 Ekim 2016 Salı

C#'taki lock'ın Java karşılığı

C#'ta özellikle multi-thread uygulamalarda işimize çok yarayan bir özellik olan "lock" komutu benzer kullanım özellikleri ve "synchronized" ismi ile  java'da da mevcut.

C# kullanımı olarak :
public int Next() {
  lock (this) {
    return NextUnsynchronized();
  }
}

Birebir java karşılığı :
public int Next() {
    synchronized (this) {
        return NextUnsynchronized();
    }
}

veya Java'da olan ek bir kullanımı ise :
public synchronized int Next() {
    return NextUnsynchronized();
}

C# ve Java bazı konularda birbirlerine çok yakınlar, bazı konularda da taban tabana zıtlar :)

24 Ekim 2016 Pazartesi

Mongo DB İle Çalışmak

Mongo DB yi local bilgisayarınıza kurduktan sonra bazı durumlarda verilere uygulamanız haricinde bir araç ile ulaşmak gerekebiliyor. Şöyle ki nasıl sql Server da sqlcmd veya osql var ise Mongo DB içinde böyle bir araç var. Ben makalemde size local Mongo DB ye bağlanmak için kullanabileceğim ve Mongo DB kurulumu ile gelen bu araçtan bahsedeceğim. Mongo DB kurulumundan sonra command prompt ta mongo yazıp enter a bastığınızda karşımıza Mongo DB Client gelmektedir. Bu araç ile Mongo DB'yi yönetebiliriz. Ancak burada konsolda bir uygulama kullanmanın zorluklarını yaşayacağız. 

Gelelim komutlarımıza : 
> show dbs; 
Bu komut ile bu mongo db sunucusunda ki bütün veri tabanlarının adlarını görebiliriz. 

> use test;
Bu komut ile bir veri tabanına giriş yapabiliriz. Böylece yaptığımız bütün sorgular o veri tabanı için çalışacaktır. Ayrıca bu veri tabanı yok ise oluşturulmuş olur. Bu örneğimizde test ismindeki veri tabanına giriyoruz. 

> show collections;
Bu komut ile içinde olduğumuz veri tabanının bütün koleksiyonlarını görebiliriz. Yani elimizde ne var görmüş oluruz. 

> db.users.find ();
Bu komut ile bir koleksiyondaki bütün kayıtları görebiriz. 

> db.users.find().pretty();
Bir önceki yazımdan farkı .pretty()  ile çıktının formatlanıp daha rahat okunmasının sağlanmasıdır. 

> db.users.find({username : 'alper'});
Bu komut ile koleksiyon üzerinde filitreleme yapılmaktadır. Şöyle ki username alanı alper olan kayıtlar geri göndürülür.

> db.users.delete({});
Bu komut ile bir koleksiyondaki bütün veriler silinmektedir . 

> db.users.drop();
Bu komut ile koleksiyon silinmektedir . 



23 Ekim 2016 Pazar

MongoDB'yi Çalıştırmak

MongoDB'yi development makinamıza kurduktan sonra (kurulumu şu makalemde görebilirsiniz), artık onunla çalışmamız lazım. Ancak bunun için öncelikle mongo db 'nin çalışır hale gelmesi gerekiyor. Bu işlem 2 şekilde olabilir.
1. ihtiyaç olduğunda mongodb'yi elle çalıştırabilirsiniz
2. mongodb yi windows servis olarak çalıştırıp, bilgisayar her çalıştığında otomatik olarak çalışmasını sağlayabilirsiniz.

Öncelikle mongodb'yi command prompt'dan çalıştırabilmek için bir ayar yapmamız lazım. Bunun için önceki makaleme bakabilirsiniz : http://www.alperkonuralp.com/2016/10/mongodbyi-command-prompttan-calstrmak.html

Şimdide MongoDB'nin veri tabanı dosyalarını depolayabilmesi için gerekli olan dizinleri oluşturalım.
1. Command Prompt açılır. ( bunun için start tuşunda cmd yazıp enter'e basmanız yeterli olacaktır. Ancak yönetici yetkileri ile açmak daha iyi olacağı için cmd yazdığınızda görünen programa sağ tıklayıp yönetici olarak aç seçeneği ile açmanız daha iyi olacaktır.)
2. uygun göreceğiniz bir yerde aşağıdaki gibi dizinler oluşturulur. Burada ben C:\mongodb_data dizinini kullanmayı uygun gördüm. Aşağıda bu dizin üzerinden anlatım yapılacaktır ancak siz istediğiniz dizin ismini kullanabilirsiniz.
3. c: yazıp enter'a basılır. ( Bu ne olur ne olmaz diye. Eğer zaten c: diskindeyseniz bu adımı atlayabilirsiniz)
4. cd \ yazıp enter'a basılır. Bu şekilde root dizinine çıkmış oluyoruz.
5. mkdir mongodb_data  yazıp enter'a basılır. Bu şekilde mongo db için ana bir dizin oluşturmuş oluyoruz.
6. cd mongodb_data  yazıp enter'a basılır. Bu şekilde mongo db için oluşturduğumuz ana dizine giriyoruz.
7. mkdir db  yazıp enter'a basılır. Bu şekilde db için bir dizin oluşturmuş oluyoruz.
8. mkdir log  yazıp enter'a basılır. Bu şekilde loglar için bir dizin oluşturmuş oluyoruz.
sonuçta şöyle gözükecektir:


Son olarak mongodb için bir konfigürasyon dosyası hazırlayacağız. böylede bu bilgileri sürekli girmek zorunda kalmayacağız. 
bunun için açık olan command prompt'ta aşağıdaki satırı yazıp enter'e basıyoruz:
notepad "c:\Program Files\MongoDB\Server\3.2\bin\mongod.cfg" 

boş bir notepad açılacaktır:

içine şu satırları ekliyoruz:
systemLog:
    destination: file
    path: c:\mongodb_data\log\mongod.log
storage:
    dbPath: c:\mongodb_data\db

File -> Save ile dosyayı kaydettikten sonra çıkabiliriz.


Artık yöntemimizi seçme vakti geldi. 
1. İhtiyaç olduğunda mongodb'yi elle çalıştırmak
Bu iş için bir bat dosyası yazıp onunla mongodb'yi çalıştıracağız. 
notepad "c:\Program Files\MongoDB\Server\3.2\bin\run-mongo.bat" komutu ile bu bat dosyasını oluşturuyoruz. 

içine şu satırı ekliyoruz:
"C:\Program Files\MongoDB\Server\3.2\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\3.2\bin\mongod.cfg"


ve dosyayı kaydedip çıkıyoruz. 

Eğer mongodb ye ihtiyacımız olursa tek yapmamız gereken command prompt'ta şunu yazmak :
run-mongo

durdurmak için ctrl+c tuşundan sonra y ile yapılmaktadır.
İsterseniz bu bat dosyasının kısa yolunu masa üstüne alarak oradan tıklayarak açmayı da sağlayabilirsiniz.


2. Windows Servis olarak çalıştırılmasını sağlamak için aşağıdaki adımları izlememiz gerekiyor.
Bu işlem için command prompt açıp şu satırı çalıştırmanız gerekiyor:
"C:\Program Files\MongoDB\Server\3.2\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\3.2\bin\mongod.cfg" --install

Bu işlem ile mongodb servis olarak windows'a kurulmuş olacaktır. Servis'i görmek için Start menüsünde services.msc yazıp enter'a basınız. Karşınıza servisler penceresi gelecektir. Bu pencerede MongoDB yi aşağıdaki gibi görebilirsiniz.
Şu durumda servis otomatik çalışma için ayarlanmıştır ancak şu anda çalışmamaktadır. Servisin adının üzerine sağ tıklayıp çalıştır diyerek servisi çalışır hale getirebilirsiniz. Durdurmak için ise yine servisin üzerine sağ tıklayarak durdur u seçebilirsiniz.



MongoDB'yi Command Prompt'tan Çalıştırmak


MongoDB'yi command prompt'tan çalıştırmak için bir ayar yapmamız gerekiyor. Bu ayarların nasıl yapıldığını aşağıda görebilirsiniz :

1. MongoDB hangi dizine kurulu : Bende "c:\Program Files\MongoDB\Server\3.2\" dizinine kurulu durumda bu yüzden aşağıdaki anlatımlarda hep bu dizin'i kullanacağım.
2. Bilgisayarım (My Computer, Computer veya This PC) üzerine sağ tıklayıp, özellikler (Properties) ekranına giriyoruz.
3. Bu ekrandan Gelişmiş Sistem Ayarlarına (Advanced System Settings) giriyoruz.
4. Karşımıza gelen ekranın alt kısmında yer alan Ortam Değişkenlerine (Environment Variables)  giriyoruz.
5. Gelen Ortam Değişkenleri ekranında 2 bölüm bulunmaktadır. Üst kısım kullanıcıyı ifade ederken burada yapılacak değişiklikler sadece çalışılan kullanıcıda aktif olacaktır. Alt kısımda ise bilgisayarın tamamında geçerli olan değerleri ayarlarsınız. Ben her iki ortam içinde ayarlama yapacağım. Önce üst kısımdaki liste içinde Path ismindeki değişkeni bulup üzerine tıklayarak seçiyoruz. Sonrada listenin hemen altındaki Düzenle(Edit) tuşuna basıyoruz. 

6. Bu pencere windows 10 da böyle görünmeye başladı. önceden daha basit bir yapısı vardı ama anlaşılabilirliği önceye göre şu anda çok artmış durumda. Konumuza dönersek, Yeni tuşu ile yeni bir yol girişi yapacağız. Yol için  C:\Program Files\MongoDB\Server\3.2\bin adresini giriyoruz.
Ekleme Öncesi :
 Ekleme Sonrası:

7. Aynı işlemi sistem değişkenleri için tekrarlayacağız. Son durumda görüntü şöyle olmalı :

8. OK ile bütün ekranları sırayla kapatıyoruz.


Şimdi sıra doğru yaptık mı kontrol etmekte. Bunun için :
a) Command Prompt açılır. ( bunun için start tuşunda cmd yazıp enter'e basmanız yeterli olacaktır. Ancak yönetici yetkileri ile açmak daha iyi olacağı için cmd yazdığınızda görünen programa sağ tıklayıp yönetici olarak aç seçeneği ile açmanız daha iyi olacaktır.)

b) mongo --version yazıp enter'a basıyoruz. Ekran aşağıdaki gibi geldi ise problem yok demektir :


Geçmiş olsun :)

MongoDB'yi Windows Makinamıza Kurmak

Özellikle node.js ile proje geliştirirken kullandığımız veri tabanı MongoDB olmaktadır. Geliştirme ortamımızda MongoDB kurmak esasında çok zor değil. Bu makalede bu işlemi anlatıyor olacağım. Esasında indir ve kur olayından ibaret olan bu işlemi kısaca anlatmak istiyorum.

Bildiğiniz gibi MongoDB'nin sitesi : https://www.mongodb.com/ şeklindedir. Bu adrese girdikten sonra Download linkini tıklayarak indirme sayfasına geçiyoruz. Ben bu makaleyi yazdığımda 3.2.10 kararlı sürüm mevcut idi. Bende bunu kuruyorum.
Bu sayfada "Community Edition" altından "Windows Server 2008 R2 64-bit and later, with SSL support x64" seçeneğini seçip Download(msi) tuşuna basıyoruz. Böylece indirme işlemi başlıyor.

İndirme işlemi bittikten sonra inen dosyayı çalıştırarak kuruluma geçiyoruz. Next - Next lerle kurulumu tamamlıyoruz.

12 Ekim 2016 Çarşamba

Hibernate HQL eager fetch şeklinde sorgu oluşturma

Hibernate veya NHibernate ile HQL sorguları oluştururken bazen sonuçta bağlı tablolarında sorgu sonucunda getirilmesi gerekmektedir. Bu durumda 2 yöntem kullanabiliyoruz :
1. Sorgu içinde fetch ifadesi ile bağlı kayıtlar alınabilir. Şöyle ki:
select distinct o
from Order o
left join fetch o.orderLines
bu sorgudaki left join fetch ifadesi normal bir left join gibi çalışmanın yanında sorgunun sonucunda orderLines özelliğin değerleri de alınacaktır. Bu şekilde 2 ayrı sorgu ile sonuçlar alınacağına tek sorgu ile sonuç alınacaktır.

2. Sorguyu işe karıştırmayıp ama hibernate özellikleri ile bu bilgileri yükleyebiliriz:
Java: 
Query query = session.createQuery("from Order");
List result = query.list(Order.class);

C#:
Query query = session.CreateQuery("from Order");
IList<Order> result = query.List<Order>();
Bu sorgu ile sonucu aldıktan sonra tek tek elemanlar üzerinden orderLines elemanının yüklenmesi sağlanabilir.
Java:
for(Order order : result) { 
    Hibernate.initialize(order.getOrderLines());
}

C#:
foreach(Order order as result) { 
    HibernateUtil.initialize(order.OrderLines);
}
 Bu işlem ile her eleman için ayrı sorgular oluşturulacak ve veri tabanına bir çok kere gidip gelmek gerekecektir.

Java ve C# arasımdaki farklar : Out Parametreleri

Java ve C# arasındaki farkları karşıma çıktıkça sizlerle paylaşmak istiyorum. Dün kod yazarken böyle bir durum ile karşılaştım. Özellikle C# tarafında arasıra kullandığım out parametreleri maalesef java tarafında yok. Bu durumu ancak geri dönüş tipini sınıf haline getirerek java tarafında çözmeniz gerekiyor.

Şu sayfada bu konu ile ilgili bir örnekte bulabilirsiniz :
http://www.javacamp.org/javavscsharp/outparam.html

Sayfa görüntüsünü aşağıda bulabilirsiniz :

JDeveloper 12.1.2 'de web servis proxy yenilemesi sırasında hata

Merhaba eğer sizde benim gibi java ve jdeveloper kullanmak zorunda kaldıysanız başınıza böyle bir hata gelmesi mümkün. Problem jdeveloper'da web servis referansını güncellemek istediğinizde çıkıyor ve hiç bir şekilde servis referansı güncellenemiyor, üzerine üstlük önceden olan ve çalışan versiyonda bozuluyor. Bu problemi web'de arayınca problemin çözümünün bir yan yol ile çözüldüğünü öğrendim. Ki bende bu yöntemi kullanarak problemimi çözdüm.

Yan yol şöyle : JDeveloper'da yeni ve boş bir proje açıyorsunuz ve web referansınızı burada sıfırdan oluşturuyorsunuz. Sonrasında oluşan dosyaları eski projenin içine kopyalıyorsunuz. Ben işlem öncesi proje içindeki referans ile ilgili bütün dosyaları silip sonra kopyalama yaptım. Tek dosya oluşmadı. Onu'da source kontrol'den geri yükledim. Böylece problem çözülmüş oldu.

Geçmiş olsun :)

Çözüm için şu adresten yardım aldım : https://community.oracle.com/thread/2292064?start=0

Sayfa sonradan değişir veya kaybolur diye görüntüsünü de paylaşıyorum :