powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Нормальная ли практика использования вместо тригеров EJB?
25 сообщений из 36, страница 1 из 2
Нормальная ли практика использования вместо тригеров EJB?
    #33195006
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть задача по реализации версионности сущностей: например при вставке обновлять данные в таблице сущности, а старые данные добавлять в другую
Я предполагал сделать это с помощью триггеров базы
НО начальство в лице нескольких человек с пеной у рта доказывает что мы пишем систему максимально не зависящую от БД и поэтому реализовывать эту вещь должны бины
Я в смятении :) - это вообще нормальная техника, кто то с таким сталкивался?
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33195032
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще - бывает и такое. Но если есть возможность реализовать ведение истории через триггеры или ХП - лучше делать через них. Запрос к базе фактически будет один. В случае с EJB это выльется в два, а то и три запроса. Три запроса как правило медленнее, чем один.
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33195068
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в том то и дело - и при том что это будет делаться на сервере приложений - то есть данные будут тянуться туда, обрабатываться а потом обратно в БД - не накладно ли
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33195092
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это действительно оговорено, что БД может быть любая, или уже есть преценденты использования спечифичесткого для определенной(-ых) БД кода? Еще, будут ли данные в БД меняться только через через эти самые бины, или возможны другие варианты (консоль, другое приложение)?
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33195096
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так если действительно требуется максимальная независимость от БД, то по другому то и не сделать. Нужно поконкретнее разобратся с этой независемостью, нужна ли она вообще, если в ближайшем будущем не планируется менять БД, то пишем тригеры, иначе EJB...
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33195113
Школяр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KPIISЕсть задача по реализации версионности сущностей: например при вставке обновлять данные в таблице сущности, а старые данные добавлять в другую
Я предполагал сделать это с помощью триггеров базы
НО начальство в лице нескольких человек с пеной у рта доказывает что мы пишем систему максимально не зависящую от БД и поэтому реализовывать эту вещь должны бины
Я в смятении :) - это вообще нормальная техника, кто то с таким сталкивался?

это означает "максимально не зависящую от конечного результата".

Вот 3 аксиомы "теории базонезависимости"

1. Реляционная база - это черный ящик, где лежат плоские таблицы.
2. Кроме плоских таблиц в реляционной базе ничего нет
3. Все реляционные базы одинаковые

Отсюда вытекает много интересных выводов. И в частноти про триггеры. А кроме того полной обструкции подлежат foreign key, управление транзакциями, откатами и блокировками. И многое чего другое.

Суть этого подхода простая - сделать надо быстро и продать надо как можно больше. Если делать "базозависимую" систему то прийдется писать очень много разного кода.

А "базонезависимое" решение позволяет сэкономить кучу времени и обеспечить широкий круг продаж. То что "базонезависимая" система будет не (совсем) работоспособна - вторично.

Мне кажется, если ваше начальство всерьез выбрало "базонезависимую" архитектуру, то ваши шансы на триггеры равны нулю, потому что они противоречат фундаментальному принципу "базонезависимых" систем.
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33195125
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1)с какой радости для базозависимой системы нужно больше кода чем для независимой?
2)Где вы видели подход "сделать надо медленно и продать как можно меньше"?
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33195234
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Школяр Отсюда вытекает много интересных выводов. И в частноти про триггеры. А кроме того полной обструкции подлежат foreign key, управление транзакциями,откатами и блокировками. И многое чего другое.
линки и блокировки реализуется прекрасно средствами EJB
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33195756
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Школяр...Если делать "базозависимую" систему то прийдется писать очень много разного кода.

А если делать базонезависимую систему, то придется писать еще больше кода, но в других местах.
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33196133
Urt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кувалдин Роман Школяр...Если делать "базозависимую" систему то прийдется писать очень много разного кода.

А если делать базонезависимую систему, то придется писать еще больше кода, но в других местах.

Скорее всего этот код будет написан уже для вас, в случае базонезависимой системы, что-нибудь типа orm средства наподобии Hibernate - ведь вы можете его юзать, практически не обращая внимания на особенности того, где это будет разворачиваться. И создавать более абстрагированную систему будет дешевле - и по срокам, и по тому, что меньше специалистов придётся нанимать из разных сфер.
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33196147
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О чем спорим?

во-первых, Entity Bean'ы фактически умирающая технология...

во-вторых, тригеры в основном используются для реализации сложных ограничений целостности, а не для бизнес логики приложения... ладно бы спорили stored procs vs EJB, а то...
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33196187
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во-первых, Entity Bean'ы фактически умирающая технология...
а почему? чем они хуже JDO or Hibernate?
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33196197
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri
во-первых, Entity Bean'ы фактически умирающая технология...
во-вторых, тригеры в основном используются для реализации сложных ограничений целостности, а не для бизнес логики приложения... ладно бы спорили stored procs vs EJB, а то...

чего это они стали умирающей технологией?
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33196306
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см. EJB 3.0 & JSR 220

коротко - entity уходят как слишком тяжелое решение и вместо них приходит JDO/EJB3 и персистизация pojo-классов...
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33196317
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В EJB3.0 просто любой класс может быть entity - но концепция то не меняется...
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33196322
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну EJB3.0 это всё таки тоже EJB. Тем более когда они ещё выйдут и уж тем паче внедрятся. Тем более что вопрос если я правильно понял всётаки не о перспективах EJB, а о том стоит ли базо-независимость обменивать на гимор разработчиков + возможные тормоза
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33196337
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну EJB3.0 это всё таки тоже EJB.

А кто спорит, я сказал что ENTITY EJB умирают и на их место приходит POJO-persistence а ля Hibernate&JDO. Не знаю кто как - а я считаю что EJB3 от этого только выиграет
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33196369
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri
во-вторых, тригеры в основном используются для реализации сложных ограничений целостности, а не для бизнес логики приложения...
кстати интересно разделили понятия целостность и бизнес-логика приложения :) - разве целостность не одна из составляющих бизнес-логики и не выводится как раз из требований к логике работы приложения ;)?

и что значит "сложные ограничения"?
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33196407
Urt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriНу EJB3.0 это всё таки тоже EJB.

А кто спорит, я сказал что ENTITY EJB умирают и на их место приходит POJO-persistence а ля Hibernate&JDO. Не знаю кто как - а я считаю что EJB3 от этого только выиграет

Вот везёт Вам, а я с начала своего явского пути с EJB не сталкивался :(
Сейчас работаю с hibernat-ом, видел где-то статьи о том, что дескать новый EJB будет почти как hibernate. Если Вам не сложно, плииз, в двух словах расскажите что это за зверь - EJB, и какие его основные отличимя/минусы по сравнению с hibernate.
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33196537
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас работаю с hibernat-ом, видел где-то статьи о том, что дескать новый EJB будет почти как hibernate.

В двух словах. Основой J2EE служит спецификация на EJB.

EJB бывают Entity, Session и Message Driven... Так вот Entity бины в j2ee решают задачу сохранения объектов в каком-либо постоянном хранилище (например, в РБД) Точнее Entity бин это сущность, которая может быть сохранена. Session и MD бины в свою очередь реализуют бизнес логику, которая оперирует этими entity бинами.

Паралельнно с развитием EJB появился JDO который решал, по сути, туже задачу, что и entity-бины, но для pojo классов. JDO это спецификация на ORM-средства в java. JDO не возлагал никаких специфических требований на классы, которые нужно сохранять в БД.

Ну ясно что 2 api решающие одну задачу это не хорошо. Уже давно стало ясно, что из них выживет только один, но до недавнего времени не было ясно какой... Дело в том, что в EJB и вообще в J2EE было вложено очень много средств и была вероятность лоббирования дальнейшего развития JDO некоторыми крупными вендорами. Но вроде, судя по EJB3, основным api для персистизации объектов стал все-таки JDO2.

Если вы работали с Hibernate то в EJB3 почувствуете себя как дома... Да и вообще JDO и hibernate всегда были сильно похожи и вообще странно что hibernate его не поддерживал с самого начала.

И так EJB3 определяет спецификацию на средства персистизации pojo и в том числе метаинформацию, используемую EJB3-совместимым orm-средтвом для выполнения своей работы (то что в hibernate храниться в hbm-файлах). Единственным отличием является интенсивное использования аннотаций из j2se 1.5 вместо дополнительных файлов.
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33197427
NN-123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как в EJB3.0 организована изоляция транзакций? Если сессия 1 пишет в запись X в базе данных, но не делает пока commit, а сессия 2 читает эту же запись X, то получит сессия 2 старую версию X, которая была до того, как ее изменила сессия 1? Или сессия 2 получит исключение, что запись недоступна?
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33197510
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как в EJB3.0 организована изоляция транзакций? Если сессия 1 пишет в запись X в базе данных, но не делает пока commit, а сессия 2 читает эту же запись X, то получит сессия 2 старую версию X, которая была до того, как ее изменила сессия 1? Или сессия 2 получит исключение, что запись недоступна?

EJB3 поддерживает как пессимистическую, так и оптимистическую стратегии реализации транзакций. В первом случае прочитанные данные блокируются в БД на период действия транзакции, во втором только в момент фиксации (т.е. commit'а), при этом согласованность достигается с помощью использования специального атрибута отвечающего за хранение текущей версии записи (обычно это timestamp атрибут)

Все работает точно так же как и в самой БД так как все операции с persistence-capable объектами рано или поздно транслируются в SQL (в том числе операции управления транзакциями). Таким образом если вы в сессии 1 открыли транзакции то она, грубо говоря, открылась и в БД. Отличия в основном касаются расширенным возможностям по кэшированию данных на клиенте. Т.е. если вы выбрали оптимистичную стратегию, открыли транзакцию, а затем создали и сохранили 10 объектов то с точки зрения БД ничего еще не произошло, так как пока все это находится на клиенте. Зато как только вы выполнили commit для этой сессии в БД будет открыта транзакция, затем выполнены 10*n sql операций, требуемых для сохранения этих объектов и выдана sql команда commit. Т.е. все делается умно и по-закону...
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33197585
NN-123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
funikovyuriа как в EJB3.0 организована изоляция транзакций? Если сессия 1 пишет в запись X в базе данных, но не делает пока commit, а сессия 2 читает эту же запись X, то получит сессия 2 старую версию X, которая была до того, как ее изменила сессия 1? Или сессия 2 получит исключение, что запись недоступна?

EJB3 поддерживает как пессимистическую, так и оптимистическую стратегии реализации транзакций. В первом случае прочитанные данные блокируются в БД на период действия транзакции, во втором только в момент фиксации (т.е. commit'а), при этом согласованность достигается с помощью использования специального атрибута отвечающего за хранение текущей версии записи (обычно это timestamp атрибут)

Все работает точно так же как и в самой БД так как все операции с persistence-capable объектами рано или поздно транслируются в SQL (в том числе операции управления транзакциями). Таким образом если вы в сессии 1 открыли транзакции то она, грубо говоря, открылась и в БД. Отличия в основном касаются расширенным возможностям по кэшированию данных на клиенте. Т.е. если вы выбрали оптимистичную стратегию, открыли транзакцию, а затем создали и сохранили 10 объектов то с точки зрения БД ничего еще не произошло, так как пока все это находится на клиенте. Зато как только вы выполнили commit для этой сессии в БД будет открыта транзакция, затем выполнены 10*n sql операций, требуемых для сохранения этих объектов и выдана sql команда commit. Т.е. все делается умно и по-закону...

вопрос был не о блокировках, а об уровне изоляций транзакций (transaction isolation level). Описанная модель блокировок нужна в том случае, когда сессия 2 пытается ИЗМЕНИТЬ ту же самую запись, которую уже поменяла сессия 1. В данном случае сессия 2 хочет просто прочитать запись, уже измененную в базе, но не зафиксированную. Выглядит это так:

Сессия 1 на клиенте в момент t1 открывает транзакцию, считывает запись X и меняет в ней значение в поле A с 123 на 456, после этого делает UPDATE. Но COMMIT сессия 1 не делает, потому что в этой транзакции должны быть изменены и другие записи в базе. COMMIT будет выдан потом, когда изменены будут все нужные записи.

В момент t2 (t2 > t1) сессия 2 считывает значение из поля A в записи X. Так как новое значение 456 в базе еще не зафиксировано, то актуальным является значение 123. Если вы сделаете SELECT с консоли базы данных, то непременно получите 123, а не 456.

В момент t3 (t3 > t2) сессия 1 делает commit.

Так вот вопрос: а что получит сессия 2 в момент t2 в архитектуре EJB3? 123, 456 или сообщение о том, что запись X заблокирована?
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33197652
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NN-123

как я упоминал - все взаимодействие с БД все равно будет на SQL... так что если вы открыли транзакцию в repeatable read то и в СУБД будет открыта транзакция с таким же уровнем изоляции... стратегии о которых я говорил будут влиять на момент когда эта транзакция будет реально открыта.

Т.е. например, при оптимистической блокировке:

1-я сессия прочитала объект
1-я сессия его изменила

2-я сессия прочитала его с TIL = repeatable read **

1-я сессия делает commit (и на сервер БД идут команды типа begin tran update ... where id=? and timestamp=? commit)

2-сессия прочитала другой объект
2-сессия изменила этот второй объект
2-сессия делает commit
на сервер уходит
set transaction isolation level repeatableread
begin tran
* select .. from where id=obj1_id and timestamp=obj1_timestamp

update .. where id=obj2_id and timestamp=obj2_timestamp
commit

и при выполнении (*) вылетает exception так как запись была изменена другой сессией

в случае пессимистической блокировки вторая сессия бы просто ждала commit'а первой на шаге (**)
...
Рейтинг: 0 / 0
Нормальная ли практика использования вместо тригеров EJB?
    #33197749
NN-123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
funikovyuri NN-123

как я упоминал - все взаимодействие с БД все равно будет на SQL... так что если вы открыли транзакцию в repeatable read то и в СУБД будет открыта транзакция с таким же уровнем изоляции... стратегии о которых я говорил будут влиять на момент когда эта транзакция будет реально открыта.

Т.е. например, при оптимистической блокировке:

1-я сессия прочитала объект
1-я сессия его изменила

2-я сессия прочитала его с TIL = repeatable read **



т.е. сессия 2 получит значение не из кэша EJB, а сделает новый SELECT к базе и получит старое значение "123"?

funikovyuri
в случае пессимистической блокировки вторая сессия бы просто ждала commit'а первой на шаге (**)

Т.е. не смотря на то, что вторая сессия хочет только читать, она все равно будет заблокирована? Т.е. операция чтения тоже блокируется? Но база данных не блокирует операцию чтения. Во всяком случае Oracle точно не блокирует. Даже если запись X заблокирована сессией 1 (см. мой пример выше) в момент t1, то сессия 2 в момент t2 получит значение из базы и оно будет равно 123. Стало быть EJB будет тормозить операции чтения на ровном месте?
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Нормальная ли практика использования вместо тригеров EJB?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]