niedziela, 9 maja 2010

EJB + Servlet: Prosta aplikacja enterprise

Przygotowanie środowiska pracy.
Do stworzenia aplikacji użyłem:
- Eclipse jako IDE
- JBoss jako serwer aplikacji na którym będzie uruchamiana cała aplikacji

Projekt EAR
Zaczniemy od stworzenia Enterprise Application Project (EAR). Aplikacja będzie zawierała dwa moduły:
  • EJB - projekt zawierajacy ziarna EJB
  • WAR - projekt zaweirający cały widok aplikacji
To właśnie tą aplikację będziemy deployować na serwerze JBoss.

W Eclipse Enterprise Application Project tworzymy w następujący sposób. Klikamy w File -> New -> Other ... i wybieramy Enterprise Application Project.

Następnie wybieramy Target runtime, wpisujemy nazwę aplikacji i klikamy Finish.

Projekt jest na razie pusty i zostanie uzupełniony w dalszej części artykułu.

Projekt EJB
EJB czyli Enterprise JavaBeans, aby móc korzystać z tej technologi musimy stworzyć projekt EJB. W Eclipse tworzymy go w następujący sposób: Klikamy w File -> New -> Other ... i wybieramy EJB Project.

Następnie wpisujemy nazwę projektu, wybieramy wersję EJB (my będziemy korzystać z wersji 3.0) oraz zaznaczamy że nasz projekt będzie częścią dużej aplikacji enterprise.

Po kliknięciu Next > odznaczamy chęć stworzenia EJB Client JAR.

W momencie gdy mamy już przygotowany projekt możemy utworzyć pierwsze ziarno EJB. Tak więc tworzymy zwykły interfejs w dowolnym pakiecie. U mnie wygląda to tak:
package com.blogspot.mkorwel.ejb;

import javax.ejb.Local;

/**
 * 
 * @author Mateusz Korwel
 * 
 */
@Local
public interface HelloLocal {

 public String getHelloWorld();
}

Interfejs kończy się sufiksem Local, co sugeruje że interfejs jest lokalny(w EJB występuje również interfejs Zdalny (Remote)). Rodzaj interfejsu deklarujemy używając adnotacji @Local lub @Remote.

Teraz tworzymy klasę która będzie implementację interfejsu HelloLocal.
package com.blogspot.mkorwel.ejb;

import javax.ejb.Stateless;

@Stateless
public class HelloBean implements HelloLocal {

 @Override
 public String getHelloWorld() {

  return "Hello World";
 }

}

Aby klasa stała się ziarnem EJB wystarczy użyć adnotacji @Stateless lub @Stateful. Adnotację określają czy ziarno EJB jest bezstanowe (Stateless) czy stanowe (Stateful). My tworzymy komponent bezstanowy dlatego użyliśmy adnotacji @Stateless. Nasza metoda getHelloWorld() zwraca prosty napis Hello World który wypiszemy w serwlecie.

Projekt WAR
Następnym krokiem do stworzenia naszej przykładowej aplikacji jest utworzenie projektu dla warstwy widoku, czyli zwykłego projektu WEB'owego w którym będą znajdowały się strony HTML, JSP, Servlety itd. W Eclipse klikamy w File -> New -> Other ... i wybieramy Dynamic Web Project.

Wpisujemy nazwę i nie zapominamy o dodaniu projektu do naszej aplikacji enterprise.

Następnie klikamy Finish. Teraz musimy jeszcze ustawić zależność w projekcie, tak aby mieć dostęp do klas z projektu EJB. Robimy to poprzez kliknięcie lewym przyciskiem myszy na projekcie helloWAR, wybranie Java Build Path a następnie Projects.

Klikamy w Add aby dodać zależność do projektu. Wybieramy nasz project EJB czyli helloEJB. Klikamy OK.


Teraz tworzymy zwykły servlet (w mnie nazywa się Hello), który wypisze prosty napis Hello World który zdefiniowaliśmy w projekcie EJB. Kod servletu wygląda następująco.
package com.blogspot.mkorwel.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;

/**
 * 
 * @author Mateusz Korwel
 * 
 */
public class Hello extends HttpServlet {
 private static final long serialVersionUID = 1L;

 @EJB
 private HelloLocal hello;

 public Hello() {
  super();
 }

 protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  PrintWriter out = response.getWriter();

  out.println(hello.getHelloWorld());
 }

}

Jak widzimy jest to zwykły servlet który wywoła nam metodę getHelloWorld() z interfejsu HelloLocal. Za pomocą adnotacji @EJB wstrzykniemy implementację naszego interfejsu (klasę HelloBean.java która znajduje się w projekcie helloEJB).

Tak przygotowaną aplikację może zdeployować na serwerze JBoss. Aplikacja będzie znajduje się po linkiem 127.0.0.1:8080/helloWAR/Hello. Zauważmy że deployujemy aplikację EAR, a w przeglądarce odwołujemy się projektu WAR. Dzieje się tak dlatego że projekt helloWAR jest modułem aplikacji helloEAR.

Brak komentarzy:

Prześlij komentarz