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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Enterprise Patterns JAVA EE 5 
:(
    Опции темы
Igor28
Дата 3.6.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Под J2EE есть море паттернов, но с приходом Java EE 5 они банально устарели. Интернет наводнен инфой по паттернам J2EE. Не подскажете, где можно найти хорошую информацию по паттернам под JEE5? 

Особенно интересуют следующие: 
1. Session Facade 
2. Message Facade 
3. Service Activator 
4. EJB Command 
5. Service Locator / Lookup Utility 
6. DTO (Data Transfer Object) 
7. Data Transfer Hash Map 
8. Value List Handler 
9. Data Transfer Row Set 
10. Data Access Object 
11. Data Access Command Bean 
12. Entity Version Number 
13. Primary Key Generation 
Но, другие тоже будут интересны  

 Еще раз подчеркну, что эти паттерны есть и под J2EE - вот, к примеру, http://java.sun.com/blueprints/corej2eepat...erns/index.html НО ПАТТЕРНЫ НУЖНЫ ИСКЛЮЧИТЕЛЬНО ПОД JAVA EE5
PM MAIL   Вверх
garbuz
Дата 3.6.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



На русском сайте сана есть pdf-ки по паттернам. Может тебе подойдет.
PM MAIL   Вверх
Samotnik
Дата 3.6.2009, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Igor28, ведь в твоем вопросе уже был ответ  smile 
PM MAIL   Вверх
AntonSaburov
Дата 3.6.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


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

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



PM MAIL WWW ICQ   Вверх
maz543
Дата 3.6.2009, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile 

Цитата(Samotnik @  3.6.2009,  14:38 Найти цитируемый пост)
Igor28, ведь в твоем вопросе уже был ответ


это аккордеон уже.
PM MAIL   Вверх
rimidal
Дата 9.6.2009, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я конечно извиняюсь.
Но у меня возник тоже такой вопрос. И ответ на него я не на sun-ом сайте, не в гугле, не по приведеным выше ссылкам найти не смог.
Конкретно меня интересует Data Transfer Object, Transfer Object.

http://ru.wikipedia.org/wiki/DTO

Цитата

В версии EJB 3.0 модель записи данных была изменена, эта проблема была разрешена и нужда в DTO отпала.


Собствено о чем идет речь? И как быть с этим в EJB 3.0?

Примеры из туториала я смотрел

И мне например не очень нравиться такая реализация:

javaeetutorial5/examples/ejb/order/order-ejb/src/java/order/request/Request.java

Код

@Remote
public interface Request {
    void addLineItem(
        Integer orderId,
        String partNumber,
        int revision,
        int quantity);

    void addPartToBillOfMaterial(
        String bomPartNumber,
        int bomRevision,
        String partNumber,
        int revision);

    void adjustOrderDiscount(int adjustment);

    int countAllItems();

    void createOrder(
        Integer orderId,
        char status,
        int discount,
        String shipmentInfo);

    void createPart(
        String partNumber,
        int revision,
        String description,
        Date revisionDate,
        String specification,
        Serializable drawing);

.......
}


Хотелось бы увидеть в параметрах DTO. Вобщем что-то более красивое и соответсвующее патернам под j2ee.

P.S. Возможно я чего-то непонимаю?
PM MAIL   Вверх
MisterCleric
Дата 10.6.2009, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Цитата

void addLineItem(
        Integer orderId,
        String partNumber,
        int revision,
        int quantity);


Я вот такие вещи свожу к Entity, которые у меня и бродят от слоя данных, по слою бизнес-логики до представления и назад.
Собственно даже параметры реквестов сводятся к объектам модели.
Для простого примера. Извиняюсь, что в теме о паттернах не использую стандартное решение AAS.
1. Есть форма логина, у нее два поля user.login, user.password
2. Принимает реквест определенный контроллер таким методом

Код

public void setUser(User user)


потом вызывается метод login, который делегирует вызов в SessionFacade через его метод
Код

User login(User user);


тот в свою очередь или делегирует вызов USerManager или напрямую зовет UserDAO.
А те уже через JPA делают стандартный запрос логина в базу

Может это имелось в виду?
А вообще и в EJB3 можно применять паттерн DTO. Иногда заказчики заказывают такое, что бы модель от представления была жестко разделена слоем DTO.
Я этот принцип применяю, если мне надо из бизнес-слоя вернуть несколько разных сущностей.

В последнем проекте применил принцип из SOA - Message. Этот объект имеет head & body. В head содержится инфо о том, какую бизнес-операцию выполнять, а body содержит объекты, над которыми нужно выполнить эту бизнес-операцию, а также содержит объект результата этой бизнес-операции.

А на самом деле в EJB3 можно использовать многие описанные тобой паттерны. Все дело в фантазии, опыте и выставляемых требований


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
rimidal
Дата 10.6.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Я вот такие вещи свожу к Entity, которые у меня и бродят от слоя данных, по слою бизнес-логики до представления и назад.


Т.е. ты используешь EJB Entity в качестве Transfer Object?

А как решается проблема связи многие-ко-многим при lazy стратегии?

Мне не нравиться идея создавать еще один Transfer Object я хочу использовать EJB Entity в этом качестве.
Я считаю что создание еще одного слоя  Transfer Object помимо EJB Entity только раздует проект и усложнит.

А можно ли клиенту через бизнес методы отдавать  EJB Entity (3.0)? Какие могут быть последствия?




PM MAIL   Вверх
MisterCleric
Дата 10.6.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Цитата

А как решается проблема связи многие-ко-многим при lazy стратегии?


Приходиться вызывать бизнес-метод, менеждыть перзистом сущность и явно вызывать на нем гэтер lazy-коллекции

Цитата

А можно ли клиенту через бизнес методы отдавать  EJB Entity (3.0)? Какие могут быть последствия?


А в чем собственно проблема? именно так и делаю. Имею jar с пакетом сущностей, который и ложу в CLASSPATH клиента. Все сущности implements Serializable
И вуаля!! Усе работает. Они EJB Entity (3.0) только в том случае, если лежат в jar, который помечен как ejb. Во всех остальных случаях это POJO, И никто не запрещает тебе вызывать на нем new Entity 


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Maksym
Дата 10.6.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Цитата

А можно ли клиенту через бизнес методы отдавать  EJB Entity (3.0)? Какие могут быть последствия?

Возможные последствия:
1. Потеря производительности
В текущем пользовательском контексте на клиенте как правило не нужны все данные содержащиеся в Entity. Тем ни менее они подгружаются из базы (при этом ejbql транслируется в кашу неоптимальных join'ов), инстанциируются в объекты, сериализируются, передаются на клиента, десериализируются -- со всем вытекающими. Для бизнес методов возвращающих списки сложных объектов с глубокой вложенностью падение производительности может стать критическим.
2. Брешь в безопасности
Классы Enities отдаваемые клиенту содержат по сути структуру базы данных, имена полей, таблиц, а иногда и код запросов (если используются NamedQueries).
3. Смешение слоев
К примеру, обращение к lazy полю Entity на клиенте даст ClassNotFoundException, поскольку у оторванного от контекста объекта (deattached) будет вызван запроксированный метод который должен подгружать данные "по запросу" используя функциональость orm фреймвока (например, hibernate), которого на клиенте, само собой, нет. А подключать к клиенту, который понятия не имеет о базе данных, пакеты hibernate -- такой же моветон, как явно ловить ClassNotFoundException при вызове getter'а.

Если ущерб от перечисленных проблем существеннее, чем необходимость разрабытывать быстро, то решением может быть использование Data Transfer Objects.

Добавлено @ 14:25
Цитата(rimidal @  10.6.2009,  09:46 Найти цитируемый пост)
Мне не нравиться идея создавать еще один Transfer Object я хочу использовать EJB Entity в этом качестве.

Согласен. Лепить еще кучу однотипных классов на сервере и клиенте -- неприятно (хотя иногда разумнее, чем тащить все через Entities -- почему, написал выше).
Приходилось участвовать в реализации решения, при котором DTO (на клиенте и на сервере) изготовлялись специальной фабрикой налету, с использованием функциональости java.lang.reflect (в частности Proxy). И никаких лишних классов.


Это сообщение отредактировал(а) Maksym - 10.6.2009, 14:26
PM MAIL   Вверх
rimidal
Дата 10.6.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо за разъяснения.
Видимо все-таки без DTO ни как. Как-то разработчики Sun не продумали эти моменты.
Слишком много классов получается.

Цитата

Приходилось участвовать в реализации решения, при котором DTO (на клиенте и на сервере) изготовлялись специальной фабрикой налету, с использованием функциональости java.lang.reflect (в частности Proxy). И никаких лишних классов.


А можно об этом по подробней? Или это закрытая информация?

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


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Цитата(rimidal @  10.6.2009,  13:47 Найти цитируемый пост)
А можно об этом по подробней? Или это закрытая информация?

Да я, вобщем то, весь смысл уже написал. Посмотри как сделать прокси (в ссылке которую я дал). На базе любого Entity можно создать прокси с такой же сигнатурой и наполнить данными из этого Entity  (данные можно хранить внутри прокси в виде HashMap<имя метода, данные> и возвращать в хендлере). Можно делать этот прокси на базе интерфейса, содержащего сабсет Entity (только то что нужно клиенту в данном контексте). Сделай пару прокси, погоняй и сразу прийдут идеи как использовать.

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.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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