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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перекрестные ссылки EJB, Как корректно реализовать 
:(
    Опции темы
Костянтин
Дата 19.4.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток!

Столкнулся со следующей проблемой: в системе есть несколько session bean'ов. Один statefull, который является точкой входа на сервер и хранит сессию 

пользователя (некий объект UserSession).  Осталяные bean'ы - не сессионные и используются для доступа к базе данных, формирования отчетов и т.д.
Сейчас обращение к методу несессионного bean'а происходит по следующей схеме:
- клиент обращается к методу statefull bean'а.
- метод statefull bean'а создает ссылку на необходимый stateless bean и передает в него входящие параметры и объект UserSession. 
- получаемый ответ возвращает клиенту. 
Проблема в том, что каждый метод описывается в 4х местах - реализация в stateless bean'е, обращение в statefull bean'е и сигнатуры в интерфейсах этих 

bean'ов. 
Подскажите, как можно упростить эту схему?

P.S. Пример кода:
Код

//statefull bean, хранящий сессию пользователя
public class BeanWithClientSession implements SessionBean {
    private UserSession userSession; //информация о пользователе, 
                     //объект инициализируется при подключении пользователя
    public Item getItem(Long id) {
         try {
                 return getStatelessEjb().getItem(userSession, id);
         } catch (Exception e) {}
         return null;
     }

    public StatelessEjb getStatelessEjb() {
         try {
                 InitialContext namingContext = new InitialContext();
                 Object ref = namingContext.lookup("StatelessEjb");
                 StatelessEjbHome home = (StatelessEjbHome)PortableRemoteObject.narrow(ref, StatelessEjbHome.class);
                 return home.create();
         } catch (Throwable e) { }
         return null;
     }
}


//интерфейс statefull bean'а
public interface Server extends EJBObject {
    public Item getItem(Long id) throws RemoteException;

}

//stateless bean
public class StatelessEjbBean implements SessionBean {

    public Item getItem(Long id, UserSession userSession) {
        return getItemFromDB(id, userSession.getUserId());
    }
}


// интерфейс stateless bean'а
public interface StatelessEjb extends EJBObject {
    public Item getItem(Long id, UserSession userSession) throws RemoteException;
}


Описание метода getItem() дублируется 4 раза.  smile 
PM MAIL   Вверх
ekr
Дата 23.4.2008, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(Костянтин @  19.4.2008,  13:47 Найти цитируемый пост)
Осталяные bean'ы - не сессионные

А какие? Entity?
Из дальнейшего текста я понял, что все-таки session, но просто stateless.
Из контекста я так же сделал вывод, что используется версия 2 ejb.

Цитата(Костянтин @  19.4.2008,  13:47 Найти цитируемый пост)
Проблема в том, что каждый метод описывается в 4х местах - реализация в stateless bean'е, обращение в statefull bean'е и сигнатуры в интерфейсах этих bean'ов. 
Подскажите, как можно упростить эту схему?

Боюсь, что никак. Афишируемый клиенту метод любого (кроме mdb) ebj 2 описывается в remote-интерфейсе и реализуется классе реализации. А если у двух ejb методы совпадают (как здесь у stateless и statefull бинов), то соответственно, имеем четыре метода.

Могут помочь инструменты разработки снизить объем набиваемого кода, но на их выходе получится все равно требуемых четыре метода.


PS 
Цитата(Костянтин @  19.4.2008,  13:47 Найти цитируемый пост)
метод statefull bean'а создает ссылку на необходимый stateless bean

Проще закешировать один раз.




--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0750 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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