Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Вопросик из области Web-Programmierung, Java

5645  1 2 3 4 5 6 7 8 9 все
v0id* патриот04.09.15 10:48
v0id*
04.09.15 10:48 
Вопросик из области Web-Programmierung, Java, которой я раньше никогда не занимался (вообще я С++-программер).
Проблема такая. Пользователи открывают окно веб-приложения, залогиниваются и работают.
Второе окно открывать запрещено, но по какой-то причине оно все же открывается, пользователи заходят под другим логином, чтобы валидировать данные, введенные или измененные в первом окне (это может делать только другой пользователь, 4-Augen-Prinzip). В результате данные портятся. Так что моя задача - предотвратить открытие второго окна.
А вот третье окно открыть уже не удается, тут проверка почему-то срабатывает. Проверяется собсна наличие аплета:
if (Current- -Context.getMain- -() != null) (и если не налл, то следующее окно не открывается)
Это проверка делается в начале методы init() в классе Main- -(). В конце этой методы делается set:
Current- -Context.setMain- -(this);
Я сравниваю логи, полученные для первого окна и для второго, разницы почти никакой. Set в обоих случаях происходит. Так почему в первом случае оно не работает, а во втором работает? Есть у кого-нибудь какая-нибудь идея, может, сталкивались с таким ?
Работает оно все при посредстве Томката, аплет вызывается из сервлета.
Эй, фуфло, готовься к шмону, ты на стрём поставлен у ворот... Присоединяйтесь: https://t.me/kudy_vadis
#1 
v0id* патриот04.09.15 11:08
v0id*
NEW 04.09.15 11:08 
в ответ v0id* 04.09.15 10:48
Практически единственная разница: в первом окне:
"Thread-7" prio=4 tid=0x0c562400 nid=0x1f38 waiting on condition [0x0cd0f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
Во втором:
"Thread-7" prio=4 tid=0x0b6c1400 nid=0x1210 runnable [0x0c68f000]
java.lang.Thread.State: RUNNABLE
Эй, фуфло, готовься к шмону, ты на стрём поставлен у ворот... Присоединяйтесь: https://t.me/kudy_vadis
#2 
Murr патриот04.09.15 11:50
Murr
NEW 04.09.15 11:50 
в ответ v0id* 04.09.15 10:48
Так что моя задача - предотвратить открытие второго окна.
------
В контексте - Web-Programmierung - никак - там не регламентировано какие клиенты могут заходить.
Там вообще может не быть <HTTP>-клиента, а трафик на сервер может формировать <TELNET>.
В результате данные портятся.
-----
Значит построение всего приложения не соответствует заявленному Web-Programmierung.
В Вебе каждый запрос к серверу должен работать как отдельная транзакция, все операции на клиенте должны выполнятся в пределах загружаемой <HTML>страницы. Штучки типa откроем рядышком вторую форму - от лукавого...
почему в первом случае оно не работает, а во втором работает?
-----
Потому как <Java> и <Java S Cript> совершенно разные и работают на разных хостах - <Java> - на сервере, исключая загружаемый на клиента класс, <Java S Cript> - на клиенте, если не указано что используется серверный скрипт.
<--- nobody harmed in this action -->
#3 
v0id* патриот04.09.15 12:23
v0id*
NEW 04.09.15 12:23 
в ответ Murr 04.09.15 11:50
В ответ на:
Значит построение всего приложения не соответствует заявленному Web-Programmierung.

Вероятно, так и есть, но я не могу переписывать заново все приложение.
Проблема в том, что и в первом, и во втором окне - одна и та же сессия, эта сессия привязана только к IP компутера.
В результате второй юзер портит то, что делает первый, и наоборот, т.к. ряд переменных действительны для всей сессии.
В ответ на:
почему в первом случае оно не работает, а во втором работает?
-----
Потому как <Java> и <Java S Cript> совершенно разные и работают на разных хостах - <Java> - на сервере, исключая загружаемый на клиента класс, <Java S Cript> - на клиенте, если не указано что используется серверный скрипт.

Честно говоря, не понял, я совершенно не продвинут в этом плане. Java S Cript - это JavaSсript, как я понимаю?
А при чем тут яваскрипт, у меня нет там никаких яваскриптов?
И чо делать??
Эй, фуфло, готовься к шмону, ты на стрём поставлен у ворот... Присоединяйтесь: https://t.me/kudy_vadis
#4 
Murr патриот04.09.15 14:49
Murr
NEW 04.09.15 14:49 
в ответ v0id* 04.09.15 12:23
одна и та же сессия
-----
Ну и чем же тебе помочь?
Пойми элементарное - веб-пользователь, по определению, может запустить любое количество любых клиентов.
Даже если ты заблокируешь открытие окна по нажатию какого-то кнопарика на форме, то ничто не мешает юзеру запустить другой бровсер и набить нужный <URL>...
И чо делать??
-----
Просто разобраться на какой машине какой код выполняется. Потому как они физически разные.
По приложению. Лет 15-ть назад Я делал что-то похожее, со сложной навигацией по формам.
Решение было: ввести два канала - данные отдельно и управление отдельно, перехватывать все на входе
и оценивать ситуацию. Но это - долго и не просто. Но работает - замечатерльно.
у меня нет там никаких яваскриптов?
-----
Не знаю. Надо смотреть что и как у тебя сделано. Спроси у спецов по <Java+TomCat> как они с этим живут.
как я понимаю?
-----
Да, у меня просто нет русского на клаве...
#5 
v0id* патриот04.09.15 15:18
v0id*
NEW 04.09.15 15:18 
в ответ Murr 04.09.15 14:49
В ответ на:
Пойми элементарное - веб-пользователь, по определению, может запустить любое количество любых клиентов.

В том-то и дело, что нет!
Еще раз: третье окно успешно блокируется!
Второе - нет
, и в этом вся проблема...
В ответ на:
Даже если ты заблокируешь открытие окна по нажатию какого-то кнопарика на форме, то ничто не мешает юзеру запустить другой бровсер и набить нужный <URL>...

См. выше.
В ответ на:
Просто разобраться на какой машине какой код выполняется. Потому как они физически разные.

Не понял, о каких машинах речь?
Еще раз, пойми: апплет запускается из сервлета.
Он успешно регистрируется и первый раз, и второй. Второй раз это помогает.
Первый - нет. Я предполагаю, что каким-то образом умирает сам сервлет или первый аплет теряется каким-то другим образом.
В ответ на:
Решение было: ввести два канала - данные отдельно и управление отдельно, перехватывать все на входе
и оценивать ситуацию. Но это - долго и не просто. Но работает - замечатерльно.

Это было бы отличным решением, но у меня нет задачи переписывать заново весь код и нет времени на это. Сегодня у меня последний срок
В ответ на:
Не знаю. Надо смотреть что и как у тебя сделано. Спроси у спецов по <Java+TomCat> как они с этим живут

Ну, вот же я и спрашиваю...
Эй, фуфло, готовься к шмону, ты на стрём поставлен у ворот... Присоединяйтесь: https://t.me/kudy_vadis
#6 
MrSanders старожил04.09.15 16:17
NEW 04.09.15 16:17 
в ответ v0id* 04.09.15 10:48
Вариантов почему во втором окне не срабатывает проверка а в третьем срабатывает можно придумать несколько.
Например - браузер для большей скорости держит два процесса JVM. Апплет в первом окне запускается в 1-м процессе, апплет второго - во втором, апплет третьего - снова в первом. Каждый аплет может (вообще говоря должен) грузится в своем Classloader-е. Тогда опять же у каждого свой вариант класса со своим значением статической переменной будет.
Но оно и не важно, потому что в крайнем случае если пользователь запустит два браузера, кадый запустит свою JVM, у каждого будет своя копия CurrentContext.
Так делать нельзя и это не исправить, только переделывать. Апплет по-хорошему не должен вылазить за свою песочницу (окно браузера).
Проверяйте на сервере есть ли уже сессия для этого же IP. Кстати, привязывать сессии к IP-адресу тоже глупо. А что делать юзерам за NAT-ом? По очереди работать? У вас же пользователи логинятся, ну так и привязывайте сессии к залогиненному пользователю.
#7 
Murr патриот04.09.15 16:46
Murr
NEW 04.09.15 16:46 
в ответ v0id* 04.09.15 15:18
В том-то и дело, что нет!
------
Ну хорошо: <ИЕ>, <Chrome>, <Opera>, <Mozilla> - запускаем по одной сессии и начинаем блокировать? Что именно будем блокировать? Кто тебя пустит с <IE> в <Chrome>? Ну а раз НЕ идет - нефиг и заморачиваться.
Я предполагаю, что каким-то образом умирает сам сервлет или первый аплет теряется каким-то другим образом.
-----
Серверный процесс генерации <HTML> (ничего другого в рамках Веб-программирования не используется) не существует по окончании генерации <HTML>-документа. Все, что делается "якобы по-другому" - пляски с бубном вокруг уже помершего и пересозданного процесса, со складированием информации на сервере или получением ее же с клиента.
<Java-- ->ы встроенные в <HTML>-документы - это отдельные серверные процессы. Как они работают в целом Я представляю, но в деталях не разбирался - нужно либо смотреть самому, либо уточнять у того кто знает.
Но суть останется та же - сервер сгенерил <HTML>-документ, отдал его клиенту и забыл про процесс.
Клиент, получив <HTML>, рендрит его в соответствии со своими правилами, подтягивая отсутствующие элементы - картинки, обьэкты, апплеты и т.п.
И совсем не обязательно, что контент будет с того же сервера.
Ну, вот же я и спрашиваю...
-----
Увы, но с <Java> Я последний раз работал лет 7-8 назад, а с <JSP> - еще до 2000-го - что-то базовое - да сделаю, но глубокие нюансы - увы, не мое...
#8 
v0id* патриот04.09.15 17:43
v0id*
NEW 04.09.15 17:43 
в ответ MrSanders 04.09.15 16:17
В ответ на:
Например - браузер для большей скорости держит два процесса JVM.

А как это можно предотвратить?
В ответ на:
Апплет в первом окне запускается в 1-м процессе, апплет второго - во втором, апплет третьего - снова в первом. Каждый аплет может (вообще говоря должен) грузится в своем Classloader-е. Тогда опять же у каждого свой вариант класса со своим значением статической переменной будет.
Но оно и не важно, потому что в крайнем случае если пользователь запустит два браузера, кадый запустит свою JVM, у каждого будет своя копия CurrentContext.

Вот что-то такое у меня в голове и крутится...
Важное уточнение: для первого окна открывается Java Console, для второго тоже открывается своя, вторая Java Console.
В третьем окне своя консоль уже не открывается.
Вопрос: а к чему привязана консоль? К каждому отдельному апплету, сервлету или чему?
В ответ на:
Но оно и не важно, потому что в крайнем случае если пользователь запустит два браузера, кадый запустит свою JVM, у каждого будет своя копия CurrentContext.

Два браузера - это два разных типа браузера или просто две разных инстанции?
Если первое, то не страшно, у нас официально разрешен только один браузер.
В ответ на:
Так делать нельзя и это не исправить, только переделывать. Апплет по-хорошему не должен вылазить за свою песочницу (окно браузера).
Проверяйте на сервере есть ли уже сессия для этого же IP.

Есть! Я об этом уже написал. Сессия одна и та же. Даже если юзер вечером закроет браузер, а утром откроет новый (не удалив к черту все куки и прочее дерьмо), то это будет все та же сессия, видно по логам
И в этом проблема. А как сделать, чтобы сессия обновлялась?
Привязать к LogOffу нельзя, юзер может просто закрыть браузер, так все и делают.
В ответ на:
Кстати, привязывать сессии к IP-адресу тоже глупо. А что делать юзерам за NAT-ом? По очереди работать? У вас же пользователи логинятся, ну так и привязывайте сессии к залогиненному пользователю.

Так не получается. Сессия создается ДО логина.
Схема такая: стартует сервлет (StartsServer), потом иницируется апплет (init()), только потом делается логин...
Я пока что испробовал еще два варианта: создавать флаг, что один апплет уже существует и второй нельзя, не в CurrentContext, а в самом классе, и потом еще более серьезная проверка: создаю этот флаг в самом сервлете (StartsServer). Результат, как ни странно, один и тот же: второе окно создается, третье - нет..
Эй, фуфло, готовься к шмону, ты на стрём поставлен у ворот... Присоединяйтесь: https://t.me/kudy_vadis
#9 
v0id* патриот04.09.15 17:49
v0id*
NEW 04.09.15 17:49 
в ответ Murr 04.09.15 16:46
В ответ на:
Ну хорошо: <ИЕ>, <Chrome>, <Opera>, <Mozilla> - запускаем по одной сессии и начинаем блокировать? Что именно будем блокировать? Кто тебя пустит с <IE> в <Chrome>? Ну а раз НЕ идет - нефиг и заморачиваться.

У нас разрешен только ИЕ. Чтобы каким-то образом скачать другие, надо очень постараться. Я лично знаю только один способ: скачать дома и послать по почте, переименовав в текстовый. Иначе не дойдет. Чтобы самому инсталлировать, тоже нужны ухищрения, потому что права сильно обрезаны.
В ответ на:
Серверный процесс генерации <HTML> (ничего другого в рамках Веб-программирования не используется) не существует по окончании генерации <HTML>-документа. Все, что делается "якобы по-другому" - пляски с бубном вокруг уже помершего и пересозданного процесса, со складированием информации на сервере или получением ее же с клиента.
<Java-- ->ы встроенные в <HTML>-документы - это отдельные серверные процессы. Как они работают в целом Я представляю, но в деталях не разбирался - нужно либо смотреть самому, либо уточнять у того кто знает.
Но суть останется та же - сервер сгенерил <HTML>-документ, отдал его клиенту и забыл про процесс.

А вот и нет!
Я встроил проверку наличия аплета в запускающий сервлет (см. выше).
Проверка работает! но только для третьего окна.
Эй, фуфло, готовься к шмону, ты на стрём поставлен у ворот... Присоединяйтесь: https://t.me/kudy_vadis
#10 
Murr патриот04.09.15 18:38
Murr
NEW 04.09.15 18:38 
в ответ v0id* 04.09.15 17:43
А как это можно предотвратить?
------
Никак.
это два разных типа браузера или просто две разных инстанции?
-----
Почти без разницы.
А как сделать, чтобы сессия обновлялась?
------
Настроить <timeout> для сессий.
а в самом классе
-----
В другой машине у тебя будет не только другой инстансе класса, но и другой набор статиц-переменных. Тебе об этом уже писали.
чему привязана консоль?
------
Консоль есть отдельный изолированный процесс в системе.
#11 
Murr патриот04.09.15 18:44
Murr
NEW 04.09.15 18:44 
в ответ v0id* 04.09.15 17:49
А вот и нет!
------
Ну нет так нет.
Обрежь на файрволе все кроме 80 порта и запиши весь трафик - там все понятно будет.
У нас разрешен только ИЕ.
------
Ну так запусти по <AT> вторую копию с правами другого юзера и попробуй из первого прибить запущенный оттуда процесс... Если сможешь - работать тебе больше не надо будет - все вирусописатели у тебя технологию купят...
#12 
v0id* патриот04.09.15 19:22
v0id*
NEW 04.09.15 19:22 
в ответ Murr 04.09.15 18:44
В ответ на:
Настроить <timeout> для сессий.

А где это настраивается?
В ответ на:
Обрежь на файрволе все кроме 80 порта и запиши весь трафик - там все понятно будет.

У меня прав таких нет.
В ответ на:
Ну так запусти по <AT> вторую копию с правами другого юзера и попробуй из первого прибить запущенный оттуда процесс...

У меня только один юзер. А что такое АТ?
Я вот размышляю: если это две JVM в IE, то, может, в Мозилле попробовать (проверить хотя бы).
Скачал java plugin для Мозиллы, но комп пока не перезапустил.
Эй, фуфло, готовься к шмону, ты на стрём поставлен у ворот... Присоединяйтесь: https://t.me/kudy_vadis
#13 
Murr патриот04.09.15 20:12
Murr
NEW 04.09.15 20:12 
в ответ v0id* 04.09.15 19:22
А где это настраивается?
------
Где-то в <TomCat>е. Где именно - Я не знаю.
У меня прав таких нет.
------
У тебя нет прав на твоей машине? Или все от компании?
А что такое АТ?
------
Команда консоли для установки времени и/или периодичности запуска других команд с определенными привелегиями.
java plugin для Мозиллы
------
Пыххх... <Java> машин было две - от мелкомягких и от САН. Браузер пользует ту машину которая установлена в системе.
#14 
v0id* патриот04.09.15 20:45
v0id*
NEW 04.09.15 20:45 
в ответ Murr 04.09.15 20:12
В ответ на:
Где-то в <TomCat>е. Где именно - Я не знаю.

А это точно что-то даст?
Если пользователь решит запустить два окна, то никакой тайм аут не поможет. Или я ошибаюсь?
В ответ на:
У тебя нет прав на твоей машине?

Нету От компании.
В ответ на:
Пыххх... <Java> машин было две - от мелкомягких и от САН. Браузер пользует ту машину которая установлена в системе.

Мне нужен только плагин для Мозиллы.
Эй, фуфло, готовься к шмону, ты на стрём поставлен у ворот... Присоединяйтесь: https://t.me/kudy_vadis
#15 
Murr патриот04.09.15 21:09
Murr
NEW 04.09.15 21:09 
в ответ v0id* 04.09.15 20:45
Или я ошибаюсь?
-----
Ты пожаловался на то, что у тебя не умирают сессии. Для того, чтобы они умирали после некоторой неактивности пользователя настраивается <timeout> для сессии. Нужно это тебе или нет - никто кроме тебя не знает.
Мой опыт говорит, что сессии должны помирать. В противном случае в них накапливается мусор и иногда он просто роняет сервер.
Если пользователь решит запустить два окна, то никакой тайм аут не поможет.
-----
Разумеется нет. Это механизм для других целей.
От компании.
-----
Увы и ах... Тащи собственный лапоть и тести на нем...
Мне нужен только плагин для Мозиллы.
------
Кажется ты очень далек от понимания ситуации. <Java> это не только язык, но еще и среда выполнения байт-кода называемая Виртуальной Жаба Машиной <JVM>. Какие мостики/плагины к ней пристраиваются - не суть важно. Важно, что машин по крайней мере две и что они существенно - т.е. до уровня неработоспособности кода/технологий - разные. То, что у тебя глючит при использовании мелкософтовской машины, может не иметь проблем в сановской. И наоборот. Правда так было довольно давно. Как сейчас - не знаю.
#16 
v0id* патриот04.09.15 21:58
v0id*
NEW 04.09.15 21:58 
в ответ Murr 04.09.15 21:09
В ответ на:
Разумеется нет. Это механизм для других целей.

О том и речь. Другая проблема передо мной не стоит
В ответ на:
Увы и ах... Тащи собственный лапоть и тести на нем..

Не дают.
В ответ на:
<Java> это не только язык, но еще и среда выполнения байт-кода называемая Виртуальной Жаба Машиной <JVM>. Какие мостики/плагины к ней пристраиваются - не суть важно. Важно, что машин по крайней мере две и что они существенно - т.е. до уровня неработоспособности кода/технологий - разные. То, что у тебя глючит при использовании мелкософтовской машины, может не иметь проблем в сановской. И наоборот. Правда так было довольно давно. Как сейчас - не знаю.

Может не иметь, а может и иметь. Товарисч выше написал, что браузер может использовать две машины для двух окон, а третье запускать снова в первой машине. Вот это я и хочу проверить.
Эй, фуфло, готовься к шмону, ты на стрём поставлен у ворот... Присоединяйтесь: https://t.me/kudy_vadis
#17 
Murr патриот04.09.15 22:14
Murr
NEW 04.09.15 22:14 
в ответ v0id* 04.09.15 21:58
Товарисч выше написал, что браузер может...
------
... запустить два разных инстанса одной и той же <JVM>. Может и больше...
Плюс, он так же написал что именно неправильно в том что имеется... но
понять что именно написано ты не хочешь...
#18 
loopback прохожий04.09.15 22:17
NEW 04.09.15 22:17 
в ответ v0id* 04.09.15 21:58
Запусти тспдамп/вайршарк на клиенте и на сервере, и посмотри, кто на чем стоит и кто откуда растет.
все сразу станет ясно.
единственно, для чистого программиста- вайршарк имеет достаточно высокий порок вхождения.
с непривычки можно не разобраться.
#19 
v0id* патриот04.09.15 22:22
v0id*
NEW 04.09.15 22:22 
в ответ Murr 04.09.15 22:14
В ответ на:
.. запустить два разных инстанса одной и той же <JVM>. Может и больше...
Плюс, он так же написал что именно неправильно в том что имеется... но
понять что именно написано ты не хочешь...

По-моему, это ты не хочешь. Именно об этом я и говорю.
Базар про разные Ява-машины ты начал, не я. Если дело в установках браузера, то Мозилла, возможно, не будет запускать две ява-машинки, и тогда я хоть пойму, в чем причина.
Эй, фуфло, готовься к шмону, ты на стрём поставлен у ворот... Присоединяйтесь: https://t.me/kudy_vadis
#20 
1 2 3 4 5 6 7 8 9 все