Нам понадобится: предустановленная JDK 1.6, JBoss 5.1, Eclipse 3.4.2 – предполагается, что вы уже знаете как ими правильно пользоваться.
Существуют различные типы EJB-компонентов:
- сессионные (Session Beans);
- компоненты-сущности (Entity Beans);
- компоненты, управляемые сообщениями (Message Driven Beans).
Сессионные компоненты делятся на два подвида:
- сессионные компоненты без состояния (stateless session beans) – их мы и будем использовать в нашем примере, все остальное выходит за рамки этой статьи.
- сессионные компоненты с состоянием (stateful session beans).
В Eclipse выбираем New -> Enterprise Application Project.
Назовем наш проект Test, Target Runtime (JBoss 5.0), нажимаем Next.
В следующем окошке жмем New Module и отмечаем 2 модуля: EJB and Web, а также отмечаем опцию Generate Deployment Descriptor.
Готово, жмем Finish.
Далее переходим в наш проект. Создадим сначала интерфейс HelloWorldLocal : TestEJB -> New -> Interface.
package lesson;
@Local
public interface HelloWorldLocal {
public String getMessage(String name);
}
Обратите внимание, в конце названия класса Local, так называть не обязательно, но так понятнее, в общем, на ваше усмотрение. В данном случае будем использовать Local, т.к. сервер у нас один, если их несколько, то надо использовать Remote. Добавим в интерфейс один метод.
Теперь создадим класс HelloWorldBean, реализующий наш интерфейс : TestEJB -> New -> Class.
В данном случае Bean нужно добавлять всегда.
package lesson;
import javax.ejb.*;
@Stateless
public class HelloWorldBean implements HelloWorldLocal {
public String getMessage(String name) {
return "Hello" + name + "!";
}
}
На этом с EJB мы закончили. Далее переходим к web-модулю. Создаем страничку JSP : WebContent -> New -> JSP. На эту же страничку у нас будет выводиться результат, но сделано это исключительно в целях экономии места, чтоб не создавать лишних файлов.
<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns="http://www.w3.org/1999/xhtml">
<jsp:directive.page contentType= "text/html; charset=UTF-8" />
<html>
<head>
<title>My first EJB</title>
</head>
<body>
${result}
<form action="test" method="post">
Enter your name:<input type="text" name="name" value=""/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
</jsp:root>
Далее создаем сервлет : TestWeb -> New -> Servlet
package servlets;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.ejb.*;
import lesson.*;
public class TestClient extends HttpServlet implements javax.servlet.Servlet {
@EJB
private HelloWorldLocal hello;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
String result = hello.getMessage(request.getParameter("name"));
request.getSession().setAttribute("result", result);
RequestDispatcher rd = request.getRequestDispatcher( "index.jsp");
rd.forward(request, response);
} catch (Exception e) {
throw new ServletException(e.getMessage());
}
}
}
Также в папке WebContent -> WEB-INF должен быть файл web.xml - версия должна быть 2.5!
<?xml version="1.0"encoding="UTF-8"?>
<web-appversion= "2.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>TestWeb</display-name>
<servlet>
<description>TestClient</description>
<display-name>TestClient</display-name>
<servlet-name>TestClient</servlet-name>
<servlet-class>servlets.TestClient</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestClient</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
И последний шаг. TestWeb -> Properties -> J2EE Module Dependencies и отмечаем опцию TestEJB.jar.
Готово, можно запускать.
Продолжение статьи - Пример EJB приложения в Eclipse (продолжение)