Entity Bean - physical table

User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Sabina, не всегда, зависит от скрипта

Что касается проверки бизнес правил на клиенте то в 90% случаев )то просто дырка, которая правда срабатывает довольно редко
Потому что правильно проверить бизнес правило на клиенте необъодимо очень четко разбираться в isolation leveles и на нужные документы класть блокировки. Причем для Oracle и MS SQL код будет совершенно разный
Иначе изза racing conditions проверка правила не сработает или сработает не правильно. Сбой такой проверки лишь вопрос вероятности неудачного стечения событий

Когда же код эти проверки делает через всякие абстрактные слои то вообще мрак...
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

Может я чего то не понимаю но похоже у меня представление о бизнес логике несколько отличается от здесь присутствующих.
В моем понимании это вещи типа balance > XXX and account_no == YYY
ну и т.д.

И мое глубокое убеждение что это не должно отдаваться в БД. Потом, чем дальше вы отпускаете валидацию данных тем дольше клиент будет ждать что бы просто получить сообщенее что нужно ввести все сначала.

Кстати это не просто мое мненее, это весьма стандартный и много раз описаный подход в мире J2EE :mrgreen:
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

OBender wrote:Может я чего то не понимаю но похоже у меня представление о бизнес логике несколько отличается от здесь присутствующих.
В моем понимании это вещи типа balance > XXX and account_no == YYY
ну и т.д.


Как правило balance>XXX где XXX - установленное значение (зранящееся в какой то таблице) или результат маленькой квери

Например, СуммаПлатежкиКоторуюВыМожетеВыписать < ОстатокНеизрасходованныхСредствВашегоОтдела

Правая часть этого неравенства может изменится за время редактирования
Проверять на клиенте это НЕПРАВИЛЬНО
(хотя и возможно, другое дело что ФИНАЛЬНАЯ проверка все равно должна быть не сервере)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

Ну не стоит цепляться к словам :) на клиенте есть масса информации которую можно проверить, например пустые или недопустимые значения.

Но по прежнему все проверки, я считаю, должны делаться чем раньше (возможнее) тем лучше и в J2EE приложении самое позднее это Session Bean перед обращением к DataAccess layer.
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Я согласен с Вами
Проверки полезны в интерфейсе чтобы юзер не вбивал данные впустую
Если их можно проверить заранее хотя бы приблизительно то почему нет
А вот в самом конеце все равно на сервере :)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

Ну да на сервере конечно, на апликейшен сервере :mrgreen:
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Если на app server, то вы там все чяетко расставляете блокировки чтобы не попасться на racing conditions ? Как правильно расставлять все hints на блокировки через средства абстракции ?
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Flying Hen
Уже с Приветом
Posts: 1377
Joined: 14 May 2003 20:37
Location: NY, USA

Post by Flying Hen »

А по-моему вы упускаете из виду понятие транзакции. Если транзакция спланирована правильно, то какая разница, исполняется она на сервере или клиенте? А если нет, то неприятности гарантированы опять же, независимо от того, где происходит исполнение.
testuser
Уже с Приветом
Posts: 1071
Joined: 18 Nov 2003 22:53
Location: MA

Post by testuser »

Dmitry67 wrote:update TAB set COL=someexpr WHERE filter

90% это путтак
Организуют цикл по TAB с declare cursor, fetch, проверкой fetch_status
В цикле делают update. Иногда даже filter загоняют в if проверку внутри цикла

Главное что без курсора это не только в стони раз быстрее, но в десятки раз короче по тексту и пишется быстрее
Я заменяю на одну строку, все говорят как круто, и... в следующий раз все равно пишут цикл


Цикл универсальней - можно делать сложную обработку. Т.к. это одноразовая штука, производительность особого значения не имеет.
Мне, помнится даже рекомендовали такой метод, особенно при удалениях (так еще можно лог вести для себя, чего нельзя сделать при апдейте). Если лог есть, потом можно все назад вернуть, без откатов базы.

В общем, администрирование и программирование это разные вещи :umnik1:
testuser
Уже с Приветом
Posts: 1071
Joined: 18 Nov 2003 22:53
Location: MA

Post by testuser »

Dmitry67 wrote:Если на app server, то вы там все чяетко расставляете блокировки чтобы не попасться на racing conditions ? Как правильно расставлять все hints на блокировки через средства абстракции ?


Блокировки расставляет app server. Правила можно задать в bean descriptor (это для CMT).
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

testuser wrote:Т.к. это одноразовая штука, производительность особого значения не имеет.


Теоретики :)
У нас production можно отключить на ночь на 5 часов для upgrade
За это время должны пройти ВСЕ upgrade scripts.
И еще быть время на restore если не прошло
А тут один скрипт собирался в цикле уныло перебирать записи. На pre-production он это делал 17 часов. Хорошо что вовремя выловили. Я переписал :)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

Dmitry67 wrote:
testuser wrote:Т.к. это одноразовая штука, производительность особого значения не имеет.


Теоретики :)
У нас production можно отключить на ночь на 5 часов для upgrade
За это время должны пройти ВСЕ upgrade scripts.
И еще быть время на restore если не прошло
А тут один скрипт собирался в цикле уныло перебирать записи. На pre-production он это делал 17 часов. Хорошо что вовремя выловили. Я переписал :)


Во-во, видимо суровая правда жизни обошла их стороной. :)
Palych
Уже с Приветом
Posts: 13722
Joined: 16 Jan 2001 10:01

Post by Palych »

Return to “Вопросы и новости IT”