Kısa EJB Eğitimi: Netbeans’de EJB Geliştirme – I: Sunucu

Bu yazıda, Netbeans üzerinde hızlıca bir EJB geliştirip Glassfish’e kuralım. Daha sonra da, local ve remote arayüzlerini kullanacak şekilde test kodlarını yazıp çalıştıralım.

Önce Netbeans üzerinde sol taraftaki Projects sekmesinde sağ tık => New Project‘i seçin ve çıkan pencerede solda Java EE‘yi sağda da EJB Module‘ü seçip Next‘e tıklayın.

EJB1


Gelen pencerede Project Name kısmına SelamEJB yazın ve diğer kısımları olduğu gibi bırakın ve Next‘e tıklayın.

EJB2

Gelen pencerede sadece “Enable Contexts and Dependency Injection”‘u seçip, diğer kısımları olduğu gibi bırakarak, yani projemizi bir Enterprise Application‘a eklemeyip, sunucu olarak da varsayılan Glassfish‘i kullanacak şekilde oluşturup, Finish‘i tıklayalım.

EJB3

Bu şekilde içinde EJB’ler barındıracak SelamEJB isimli bir proje oluşturduk fakat projemizde henüz bir EJB yok.

EJB4

Bu yüzden şimdi de bir EJB oluşturmalıyız. SelamEJB projesinin üzerine gelip sağ tık => New Session Bean‘i seçin ve gelen pencerede aşağıdaki gibi değerlerinizi girin.

EJB5

Bu şekilde Selam isminde bir session bean oluşturduk öyle ki bu EJB’nin biri yerel (local) biri de uzak (remote) olmak üzere iki tane arayüzü var. Bu arayüzlerin isimleri sırasıyla SelamLocal ve SelamRemote

EJB6

Yukarıdaki resimden de anlaşılacağı gibi arayüzlere henüz metot eklemedik, bu yüzden Selam session beanini hiç bir metotu yok, yani arayüzü boş. Bu yüzden her iki arayüze de birer metot ekleyelim:

SelamLocal arayüzüne

   public String selamSoyleLocal(String isim);

metotunu, SelamRemote arayüzüne de

public String selamSoyleRemote(String isim);

metotunu ekleyelim. Sonra da Selam.java içinde bu metotları gerçekleştirelim:

package selam;

import javax.ejb.Stateless;

@Stateless
public class Selam implements SelamRemote, SelamLocal {

   @Override
   public String selamSoyleRemote(String isim) {
      return "Selam " + isim + " from remote.";
   }

   @Override
   public String selamSoyleLocal(String isim) {
      return "Selam " + isim + " from local.";
   }
}

Daha sonra da dosyaları kaydedip, projemizi derleyelim. (Proje üzerinde sağ tık => build ya da en üstteki ikonlardan çekiç şeklinde olanı tıklayın ya da ya da CTRL+F11. )

EJB7

Yukarıdaki resimden de anlaşılacağı üzere Selam beanimiz iki arayüzü gerçekliyor (implements): SelamLocal ve SelamRemote. Bu iki arayüz, kendilerine ait, isimleri sırasıyla SelamLocal.java ve SelamRemote.java olan 2 Java kaynak dosyası içinde tanımlanmış  durumda.

Burada kısa teorik bilgiler verelim: EJB’ler, sunucu tarafındaki  iş bileşenleridir (server-side business components). EJB’lerin 2 türünden birisi olan session beanler (diğer çeşidi olan message-driven beanleri (MDB) şimdilik konumuz dışında tutuyoruz), istemcilere (clients) hizmet veren iş metotlarına sahiptirler, yani istemciler adına sunucuda transactional olsun olmasın belli işleri yerine getirirler. Session beanleri,  en genelde arayüzler üzerinde çalışır. Her session beanin ya yerel ya uzak ya da her ikisi de olmak üzere 1 ya da 2 tane arayüzü vardır. 2009 Aralık’ında yayımlanan Java EE 6’daki EJB 3.1 sürümüne göre bir session bean oluşturmak için artık yerel olsun uzak olsun herhangi bir arayüze gerek kalmadı. Ama biz bu projede geliştirdiğimiz Selam session beaninin iki tane arayüzünü oluşturduk ki EJBmiz, hem yerel hem de uzak istemcilere hizmet verebilsin.

Yerel istemcilerden kasıt, aynı JVM içinde çalışan ve Selam beanına ulaşan, yani ondan hizmet alan diğer uygulamalardır. Bunlar aynı JVM’de çalışan diğer EJB’ler olabilecği gibi web katmanındaki servlet, JSP, JSF’lerin managed beanleri vb. bileşenler olabilir. Bu tip EJB istemcileri aynı proje içinde olsun ya da olmasın, aynı JVM’de olduğu müddetçe, Selam’a yerel arayüzünden ulaşabilir. Açıktır ki servlet, JSP ya da JSF bileşenleri bir başka, muhtemelen bir web projesinde bulunacaklardır.

Uzak istemcilerden kasıt ise farklı JVM’de çalışan Java uygulamalarıdır. Örneğin başka bir JVM’e kurulmuş (deployed) EJB, servlet, JSP, JSF vb. yapılar içeren herhangi bir Java kodu, Selam için bir uzak istemcidir.

Biz bu örneğin istemcilerini geliştirirken, bir servlet yerel istemcisi ile main metotlu bir Java SE istemcisi geliştirip her iki şekilde de Selam’a ulaşacağız. Burada farkedilmesi gereken şey yerel istemcilerin SelamLocal üzerinden, uzak istemcilerin ise SelamRemote üzerinden Selam’a ulaşacak olmaları, dolayısıylada farklı metotları çağırabilecek olmalarıdır. (Burada yerel istemcilerin de sanki uzak istemciymiş gibi Selam’a SelamRemote üzerinden ulaşmaları söz konusudur.) Bu da bir EJB’nin bir yerel bir de uzak olmak üzere iki farkli istemci görünümünün (view) olduğunu ifade eder. Eğer her iki arayüzüne de aynı metotları koyarsanız bir iki görünüm de aynı olacaktır. Bu iki görünümün hangi durumlarda ve nasıl farklı olması gerektiğini sonraya bırakarak yolumuza devam edelim.

Selam session beanına neden arayüzler ile ulaşıyoruz diye bir soru sorulacak olursa, dağıtık nesnelerin (distributed objects) dışarıya ancak arayüzleri üzerinden hizmet verdiğini, bu nesneleri içinde barındıran uygulama sunucularının (application server), bu bileşenlere hiç bir istemcinin direk olarak ulaşmasına izin vermediklerini ve bu karmaşık yapının yönetimini üstlendiklerini belirterek, hızlıca cevap vermiş olalım.

Şimdi sıra hatasız bir şekilde derlediğimiz Selam EJB’mizi, SelamEJB projesiyle birlikte Glassfish uygulama sunucusuna kurmaya geldi. Bunun için SelamEJB projesi üzerinde sağ tık => Deploy seçmek yeterli. Netbeans’e ayrı bir uygulama sunucusu tanıtmadığınız müddetçe o, varsayılan Glassfish’i kullanacaktır. (Ben bu yazı için i5 işlemcili bir makinada çalışan 64-bit Win7 üzerinde, Netbeans 6.9.1 ve Glassfish 3.0.1 çalıştırıyorum.)

EJB8

Yukarıdaki resimde, solda Services sekmesini tıklayıp sırasıyla Servers, Glassfish Server 3 ve Application “+”larını açında, kurulmuş olan SelamEJB uygulamamızı görüyoruz. Ayrıca sağ alttaki konsolda da Glassfish bize kurduğu SelamEJB projesinde var olan Selam session beanına nasıl ulaşacağımızı gösteren bilgiler veriyor.

Benzer bilgilere, Glassfish’in admin konsolu olan http://localhost:4848 adresinden de ulaşabilirsiniz. (Ya da Glassfish üzerinde sağ tık => View Admin Console)

EJB9

Bu şekilde bir EJB projesi geliştirip Glassfish üzerine kurmuş olduk. Şimdi sıra, bu projede var olan Selam beanından hizmet alacak istemcileri geliştirmeye geldi. Onu da bir sonraki yazıda ele alalım.

Toplam görüntülenme sayısı: 2942