Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> EJB, простой пример  
:(
    Опции темы
sergioK
Дата 5.7.2010, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



вот пример сервлета  скачанного где-то в сети 
Код
 
package servlet.stateless;

import java.io.*;
import javax.ejb.EJB;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

// Though it is perfectly fine to declare the dependency on the bean
// at the type level, it is not required for stateless session bean
// Hence the next two lines are commented and we rely on the
// container to inject the bean.
// @EJB(name="StatelessSession", beanInterface=StatelessSession.class)

@WebServlet(name="Servlet", urlPatterns={"/EJBservlet"})
public class Servlet2Stateless
    extends HttpServlet {

    // Using injection for Stateless session bean is still thread-safe since
    // the ejb container will route every request to different
    // bean instances. However, for Stateful session beans the
    // dependency on the bean must be declared at the type level

    @EJB
    private StatelessSessionBean sless;

    @Override
    public void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();

        try {

            out.println("<HTML> <HEAD> <TITLE> Servlet Output </TITLE> </HEAD> <BODY BGCOLOR=white>");
            out.println("<CENTER> <FONT size=+1> Servlet2Stateless:: Please enter your name </FONT> </CENTER> <p> ");
            out.println("<form method=\"POST\">");
            out.println("<TABLE>");
            out.println("<tr><td>Name: </td>");
            out.println("<td><input type=\"text\" name=\"name\"> </td>");
            out.println("</tr><tr><td></td>");
            out.println("<td><input type=\"submit\" name=\"sub\"> </td>");
            out.println("</tr>");
            out.println("</TABLE>");
            out.println("</form>");
            String val = req.getParameter("name");

            if ((val != null) && (val.trim().length() > 0)) {
                out
                        .println("<FONT size=+1 color=red> Greeting from StatelessSessionBean: </FONT> "
                                + sless.sayHello(val) + "<br>");
            }
            out.println(sless.getCount());
            out.println("</BODY> </HTML> ");

        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println("webclient servlet test failed");
            throw new ServletException(ex);
        }
    }

}




вот сам Бин 
Код

  

package servlet.stateless;

import javax.ejb.Stateful;
import javax.ejb.Stateless;

@Stateless
public class StatelessSessionBean {
    private int count =0;

    public int getCount() {
        return count;
    }


    public String sayHello(String name) {
        count++;
        return "Hello, " + name + "!\n";
    }

}




Не могу понять что дает использование EJB . Что мешает создать внутри севлета класс вот так 
Код

   private StatelessSessionBean sless=new() ;


при последующих обращениях сервлета состаяние объеста  запоминается ,
с EJB никогда не работал , перечитал про технологию тут http://download.oracle.com/docs/cd/E17477_.../doc/bnbmg.html

то что можно вызывать объест с другой машины понятно , не понятно где применять @Stateful / @stateless
если объест в принципе stateFull ,  или у меня с головой не в порядке  smile 
когда пытаюсь вызвать свой бин в другом сервлете , предварительно нарастив счетчик в первом (метод getCount() возвращает скажем 5)
то cтате не сохраняется  getCount() выдает  0.  









PM MAIL   Вверх
smolnij
Дата 5.7.2010, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 8.5.2009

Репутация: нет
Всего: нет



Привет
Могу посоветовать классную книжку по EJB  - Head First  EJB  - pdf-ку можно найти на просторах инета. Вообще серия Head First по джаве просто отличная.
PM MAIL   Вверх
AntonSaburov
Дата 5.7.2010, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



Ну например вот эти соображения:

1. Управление транзакциями при работе с базой данных на автомате
2. Возможность не думать о количестве экземпляров нужного бина.

По поводу stateless - часто используемая система. Например тебе нужен голый функционал - работа со списком фирм. Для этого не надо хранить промежуточные результаты - только входные аргументы и выходные данные. А между вызовами функций ничего. Ну вот и вызываешь голый функционал. Опять же не думая, сколько уже экземпляров этого бина с функциями уже создано. Может один, может два. Хотя в 3.1 уже можно сделать singletone.
PM MAIL WWW ICQ   Вверх
eros2
Дата 5.7.2010, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 31.5.2010

Репутация: нет
Всего: нет



Основные фичи EJB это -

1. Автоматическое управление транзакциями. Вручную же, грамотное управление транзакциями требует много кода со всякими try/catch в каждом методе.
2. Распределённые транзакции. Достаточно корректно настроить источники данных для двухфазного коммита - и можно обновлять несколько БД в одной транзакции.
3. Декларативная секурность. Аннотациями указываем какой группе пользователей доступен тот или иной метод - и вуаля.

PM MAIL WWW   Вверх
sergioK
Дата 5.7.2010, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Понятно вс ем спасибо еще вопрос , как мне вызвать грамотно пользовать  stateFul Bean  ?

например был вызван некий бин и значение счетчика там 5 ,
как мне это значение получить в другом сервлете ,
если прописать 
  @EJB
    private StateFulBean otherBean; то это будет создан новый объект бина ,
   а надо обратиться к созданному ранее, ?
PM MAIL   Вверх
eros2
Дата 5.7.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 31.5.2010

Репутация: нет
Всего: нет



Цитата(sergioK @ 5.7.2010,  21:15)
  @EJB
    private StateFulBean otherBean; то это будет создан новый объект бина ,
   а надо обратиться к созданному ранее, ?

Вот тут есть способ - http://javahowto.blogspot.com/2010/05/exam...ssion-bean.html - так сказать, ручное связывание stateful бина с http-сессией.


PM MAIL WWW   Вверх
sergioK
Дата 6.7.2010, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(eros2 @ 5.7.2010,  22:59)
Цитата(sergioK @ 5.7.2010,  21:15)
  @EJB
    private StateFulBean otherBean; то это будет создан новый объект бина ,
   а надо обратиться к созданному ранее, ?

Вот тут есть способ - http://javahowto.blogspot.com/2010/05/exam...ssion-bean.html - так сказать, ручное связывание stateful бина с http-сессией.

так эго просто кладут в сессию , какая разница использовать при этом EJB или нет , ?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0781 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.