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…

Categories:

2 Responses

  1. Eclipse ile ejb projesi oluşturmaya çalıştığımda bu bahsedilen dosyaları hangi folder lar altında oluşturmalıyım, oluşturduğum halde import dosyalarını tanımıyor ne yapmalıyım, en azından eclipse veya netbeans üstünden anlatırsanız sevinirim, paylaşım için teşekkürler

  2. Öncelikle projenin EJB projesinden emin olun. Ayrıca bazı EJB sürümleri arasında fark olduğu için yukarıda yazdığınız gibi import ifadelerini tanımayabilir. Projenin kendi başına EJB projesi olması yeterli değil bunun yanı sıra projeye EJB Bean projesi de eklemeniz gerekebilir. İlk uygun zamanımda size daha detaylı yardımcı olmaya çalışacağım. İyi çalışmalar…

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir