Servlet ve Spring IOC Kullanımı

Merhabalar.

Bu yazımda, Java ve özellikle Java EE uygulamalarında sunduğu Dependency Injection, Transaction Management, AOP gibi birçok teknolojiyi basitleştirerek kullanmamıza olanak veren Spring Frameworkü, Java Servletler içerisinde nasıl kullanacağımızı anlatan birkaç önemli ipucuna değineceğim.

Bildiğiniz gibi Spring en temelde, POJO adını verdiğimiz Java classlarını kendi IOC containerı içerisinde yöneterek, uygulama bileşenlerinin bağımlılıklarını (dependencies) kontrol etmemize olanak veriyor. Dependency Injection adını verdiğimiz bu mekanizma sayesinde, sınıfların (servislerin) diğer sınıflara ya da servislere olan bağımlılıkları çok daha yönetilebilir oluyor. Bu yazının konusu Dependency Injection ve bunun sağladığı yararlar ve faydalar olmadığı için bu konuya derinlemesine değinmeyeceğim.

Yazının konusu, Spring’in en temelde sağladığı bu mekanizmayı, Java Servletler içerisinde nasıl kullanabileceğimizi kapsıyor.

Bildiğiniz gibi Java Servletler, bir Servlet Container tarafından instantiate edildiği için, Spring tarafından yönetilemezler. Spring, yönetemediği yani bir Spring Bean olmayan sınıflarda dependency injection gerçekleştiremez.

Peki Spring’in sunduğu bu özellikleri Java servletlerimizde nasıl kullanacağız? İşte bu yazıda servletleri bir Spring bean gibi nasıl kullanabileceğimizi ve bu sayede Spring’in sunduğu teknolojileri nasıl entegre edebileceğimizi gösteren birkaç noktaya değineceğim. Bu sürecin tam 4 farklı yöntemi mevcut ( En azından benim bildiğim).

Devam »

Sql Server Login Problemi Error : 18456

Merhaba arkadaşlar. İşyerinde Oracle veritabanı yanında, bazı işlerimiz için Sql Server kullanıyoruz. Bundan dolayı evdeki bilgisayarıma da Sql Server 2008 kurulumunu gerçekleştirdim. Ancak veritabanı sunucusuna bağlanma işlemi biraz sancılı oldu :)

Microsoft Sql Server Management Studio‘yu açıp Authentication modunu SQL Server Authentication yaptığımda ilk olarak hangi şifre ve hangi kullanıcı ile login olacağım problemi karşıma çıktı doğal olarak=) Tabiki henüz bir kullanıcı tanımı yapmamıştım. Bunun için Management Studio’nun varsayılan Authentication modu olan Windows Authentication ile bağlanıp sunucu üzerinde sırası ile ( Security > Logins ) menusune geçip bu menude New Login ile SQL Server Authentication kullanan bir kullanıcı tanımladım.

İşlerin bu noktadan sonra çok kolay olacağını düşünerek direk varsayılan bağlantıyı Management Studio üzerinde kapatıp, yeni tanımladığım kullanıcı ile, bağlantı modunu da SQL Server Authentication seçerek giriş yapmayı denedim. Tabi başarılı olamadım.

Management Studio üzerinden her Connect talebim, hakkında hiçbir fikrimin olmadığı Error : 18456 adında bir hata ile son buluyordu. Bu noktada biraz araştırma yaptıktan sonra yapılması gerekenleri sıralıyorum.

Devam »

C# Linq – Aggregate Metodu

C# ile yazılım geliştirmeye başladığımdan beri LINQ yapısı beni en çok etkileyen dil özelliklerinden biri olmaya devam ediyor.

Özellikle koleksiyon tipindeki veriler üzerinde inanılmaz güçlü işlemleri tek satırda, oldukça temiz ve basit bir yazım tarzı ile gerçekleştirmemizi sağlayan bu özellik, fonksiyonel programlama (functional programming) paradigmasının nimetlerinden, C# gibi yüksek seviyeli ve managed (yönetimsel) diller ile de kullanılmasını sağlayan büyük kolaylık.

İçinde bulunduğum C# projelerinde Linq kullanmadan, Linq tarzı ile düşünmeden koleksiyonlara pek yaklaşamıyorum artık =) (Bu iyi mi kötü mü bende bilemiyorum. Çok acil Java’ya closure yapısı gelmesi gerek !)

Bugünkü yazımda Enumerable sınıfına ait olan ve IEnumerable interfacesini implement eden tüm tiplere uygulanabilen Aggregate metodunu açıklamak istiyorum.

Devam »

C# dynamic Keyword

Java platformu, çıktığı günden beri (teoride) platform bağımsız bir yapı sunuyor. Yani herhangi bir platformda geliştirilen bir Java yazılımı, farklı platformlarda da herhangi bir müdahelede bulunmadan çalışıyor. Bu Java’nın çıkış felsefesini ortaya koyan bir yaklaşım idi. Bu yaklaşım Java’yı dünya üzerinde en çok kullanılan platform yapmıştır. Yani oldukça güçlü bir felsefe idi.

Benzer şekilde .NET platformu da, çıkış felsefi olarak, programlama dillerinden bağımsız bir geliştirme sunuyor (teoride). Yani .NET platformu üzerinde farklı dillerde yazılan uygulamalar, daha sonra ortak bir dile çevrilerek uygulamaların dil bağımsız bir yapıda geliştirilmesine olanak sağlıyor idi.

.NET her ne kadar çıkış nedenini Java kadar güçlü bir felsefeye bağlayamasa da, programlama dillerinden bağımsız bir platform .NET için gerçekten önemli. Bunun için .NET, farklı programlama dillerini platforma kazandırıp, geliştirilen uygulamaların birçok koldan ilerletilmesini sağlamaya çalışıyor.

Devam »

C# Extension Methods Mevzusu

.NET platformu inanılmaz bir hızla gelişiyor. Platforma bir yandan, yeni birçok framework, kütüphane eklenirken, diğer yandan da platform dillerine geliştiricilere çok daha temiz ve hızlı geliştirme yapmalarını sağlayan birçok özellik ekleniyor.

.NET 4.0 ile yine birçok özellik C# programlama diline kazandırıldı. Bunlardan bir taneside Extension Methodlar.

Extension Methodlar, var olan C# tiplerine yeni methodlar eklememizi sağlayan yapılardır.

Devam »

Yeni Mercedes A Serisi

İnsafsız yakıt ücreti, MTV, ÖTV (bunu icat kim ettiyse artık!), kasko gibi giderleri göz önüne aldığımızda Türkiye gibi bir ülkede, araç kullanmak, araç sahibi olmak gerçekten büyük bir lüks (belkide enayilik) olsa da, bu mekanik oyuncaklara karşı ilgim çok eski zamanlardan beri devam etmekte.

Özellikle birkaç markanın şu aralar çıkarmakta ve çıkaracak olduğu yeni modellerini büyük bir zevkle takip ediyorum. Volvo V40, Yeni Audi A3, BMW 1 serisi ve yeni Mercedes A serisi gibi modeller, ileride sahibi olmak istediğim araçların başında geliyor.

Mercedes A serisi hakkında çok fazla bilgim olmadığından şu an bu araçlar arsındaki favorim 2013’e doğru Türkiye’ye gelmesi beklenen V40 idi. Ancak bugün izlediğim yeni Mercedes A serisi videosu beni benden aldı. Araç resmen teknolojinin geldiği son noktayı kendi bünyesinde toplamış. Artık favorim YENİ MERCEDES A Serisi =)

 

C# : IEnumerable Türündeki Nesnelerde Dynamic Casting

Arkadaşlar merhaba.

Bugün C# üzerinde WCF servisleri ile uğraşırken runtimeda dynamic olarak casting işlemine ihtiyaç duydum.

Senaryo şu şekilde idi. Bir WCF servisi, generic type ı [DataContract], [Serializable] attributune sahip ve bir base classdan türetilmiş bir koleksiyonu parametre olarak kabul ediyor ancak parametre olarak geçirilecek bu koleksiyon bir başka methoddan generic typeı base class olan bir koleksiyon şeklinde elde ediliyor idi. Methoddan dönen bu koleksiyon doğal olarak WCF servisine parametre olarak geçirilemiyordu.

Bunun için içeriği türetilen sınıf nesneleri ile doldurulan ancak dönüş tipi olarak generic type ı base class olan bu koleksiyonu bir şekilde runtimeda dynamic olarak türetilen sınıf tipine çevirmem gerekiyordu.

Bu noktada C# ın gerçekten yararlı 2 adet methodu birçok gereksiz kod yazmaktan beni kurtardı. Aşağıda, senaryoyu kod üzerinde anlatmaya çalıştım.

Devam »

C# params, ref ve out keywordleri

C# programlama dilinde derinlere dalmadan, dilin bize sunduğu kolaylıkları ve özellikleri incelemeye devam ediyorum.

Arkadaşlar, C# da methodlara parametre geçirirken, birkaç yardımcı keyword ile parametrelerin alışılagelmiş durumlarını değiştirebiliyoruz. Bu keywordler, params, ref ve out olarak C# da karşımıza çıkıyor.

Daha önce şurada basitçe açıklamaya çalıştığım gibi C# da temel olarak 2 çeşit veri tipi bulunuyor. Bunlardan value typelar, içerisinde verinin kendisini tutan ve hafızanın stack adı verilen bölgesinde oluşturulan tipler, reference typelar ise, yine hafızanın stack adı verilen bölgesinde tutulan ama içerisinde hafızanın heap bölgesindeki veriye referans bilgisini tutan tipler idi.

Devam »

C# Delegate Mevzusu

C# programlama dilinde karşıma çıkan birçok özellik dikkatimi çekmeye devam ediyor. Bu gibi özellikleri kullanmaya başladığımdan beri birçok işin çok kısa sürelerde yapıldığına şahit oldum açıkçası. Bu özelliklerden birisi de delegate yapısı.

Java’da böyle bir özellik olmadığından ilk önce tam olarak ne yaptığını anlayamasam da, bir makalede geçen C++ function pointer tanımı kafamdaki ampulu yaktı. C# da bulunan delegate yapısı, aslında Java’da reflect paketi altındaki Method classı ile daha önce yaptığım birkaç operasyonun çok daha basit ve daha güvenli bir şekilde yapılabilmesine olanak sağlayan gelişmiş bir dil özelliğinden çok da farklı değil. Ayrıca bu konuya özel olarak yönelmemin bir diğer amacı da, C# da bulunan event mekanizmasının temellerinde delegate yapısının kullanılıyor oluşu idi.

Devam »

C# Nullable Types ve ?? Operatörü

Arkadaşlar merhaba. Uzun bir aradan sonra ilk yazımla karşınızdayım.

Uzun yıllar Java ile uğraşan ve şuan C# ile proje geliştiren biri olarak C# ile yeni öğrendiğim özellikleri ayrıntılı bir şekilde ele almaya çalışacağım. Bunun ilk adımını C# Nullable Types ve ?? operatörü ile atıyorum. Konuya Java ve C# perspektifinden bakmaya çalışacağım.

Birçoğumuzun bildiği gibi C# ve Java’da değerler temel olarak hafızanın 2 farklı bölgesinde tutulurlar. Bu verilere erişim ise yine 2 farklı veri tipi aracılığı ile olur. Bu tipler, value type adı verilen ve hafızada stack adı verilen bölgede doğrudan veriyi taşıyan veri tipleri ile, yine stack üzerinde oluşturulan ancak hafızanın heap adı verilen yönetilebilir bölgesindeki mevcut veriye referans veren reference type lardır.

Devam »