EJB Session Bean Örnek

EJB Session Bean Örnek

1422 Görüntülenme
0
0

Merhabalar,

Bu yazımda daha eli yüzü düzgün bir session bean örneği anlatmaya çalışacağım. Öncelikle EJB(Enterprise Java Beans)’ lerin sunucu taraflı bir J2EE bileşeni olduğunu biliyoruz. O zaman bu örnekte sunucuya bir EJB bileşeni yükleyip sonra bunu yine aynı sunucu üzerinde bir servlet kodunda kullanacağız. Önce EJB sınıflarımız.

package com.farukbozan.ejb;import javax.ejb.Local;

@Local
public interface CalendarEJBLocal {

public int thisYear();
public int thisMonth();
public int thisDay();

}

EJB’ lere interfaceler aracılığı ile ulaşılır. Yani kullanıcı sadece interfacede tanımlı metotlara erişebilir. @Local ile bunun localden çağrılan işlemler için kullanılacak olan bir EJB interfacesi olduğunu tanımlıyor. Örnek üç metot tanımlıyoruz. Sıra geldi bunu kullanacak EJB sınıfına.

package com.farukbozan.ejb;import java.util.Calendar;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Stateless;
@Stateless
public class CalendarEJB implements CalendarEJBLocal {

private Calendar calendar;

@PostConstruct
public void initCalendar()
{
calendar = Calendar.getInstance();
System.out.println(“Calendar instance is initialized”);
}

@PreDestroy
public void closeCalendar()
{
calendar = null;
System.out.println(“Calendar instance is null”);
}

@Override
public int thisYear()
{
int year = calendar.get(Calendar.YEAR);
return year;
}

@Override
public int thisMonth()
{
int month = calendar.get(Calendar.MONTH);
return month;
}

@Override
public int thisDay()
{
int day = calendar.get(Calendar.DAY_OF_MONTH);
return day;
}

}

EJB sınıfı belirlenen interface kullanan ve bununla beraber bazı özel imler kullanan Java sınıflarıdır. Yakından inceleyecek olursak; sınıfımız arayüzü uyguluyor ve @Stateless ile de bunun bir stateless EJB olduğunu belirtiyoruz.Daha sonra arayüzdeki metotları override ediyoruz. Bu metotların yanı sıra @PostConstruct ve @PreDestroy ile işaretlenen iki ayrı metot var. Bunlar arayüzde tanımlı değil; fakat amacımız EJB sunucuya yüklendikten sonra ve sunucudan çıkarılırken bu özel iki metodu çalıştırmak. Ekran çıktılarına bakarsınız sonucu göreceksiniz. Sıra geldi bu EJB’ yi çağıracak, kullanacak servlet koduna.

package com.farukbozan.ejb;import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MainServlet extends HttpServlet {

@EJB
private CalendarEJBLocal calendarEJB;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/html;charset=UTF-8”);
PrintWriter out = response.getWriter();
try {
out.println(“”);
out.println(“”);
out.println(“”);
out.println(“”);
out.println(calendarEJB.thisDay() + “.” + calendarEJB.thisMonth() + “.” + calendarEJB.thisYear());
out.println(“”);
out.println(“”);
} finally {
out.close();
}
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

}

Klasik servlet kodlarına göz attıktan sonra gelelim özel kodlarımıza. İlk dikkat çeken @EJB imi. Bu im ile işaretlenen arayüz bize, bir EJB örneğine ulaşmaya çalıştığımızı söylüyor. Ayrıca dikkat etmeniz gereken nokta arayüz ile sınıfa ulaşıyoruz. Direkt olarak sınıf ile ilgilenmiyoruz. Dolayısıyla new operatörünü de kullanmıyoruz. Sağolsun sunucu bunu bizim yerimize yapıyor. Geriye kalan sadece metotları kullanmak oluyor.

Bol Java’ lı günler dileğiyle…

Yazan: Faruk BOZAN

Yorum Yap

Kategoriler