|
|
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
Здравствуйте всем! В web-приложении есть объекты-классы, которые создаются по данным из неизменяемых таблиц базы и являются общими для всех пользователей. Сейчас у меня такие экземпляры хранятся в каждой сессии, но логично было бы объявить их глобально и инициализировать при старте приложения. Посоветуйте, как лучше реализовать эту задачу. Слышал, что можно хранить объекты в AppContext, но пока не представляю, как, когда и с помощью чего впихивать и вытаскивать из него данные. Спасибо С уважением, Семен Попов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 10:51:17 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
ServletContext контейнетрый объект общий для веб приложения, до него можно обратиться из любого web компонента. А вот listener на его создание и удаление. Код: plaintext 1. 2. 3. 4. 5. ну и зарегистрировать свою реслизацию надо в дескрипторе развертывания. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 10:59:52 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
vas0ServletContext контейнетрый объект общий для веб приложения, до него можно обратиться из любого web компонента. Спасибо. 1. Я понял, что contextInitialized вызывается при старте вэб-приложения. Не в нем ли я должен выполнять создание и инициализацию своих объектов? 2. Можно ли к ServletContext обратиться из метода произвольного класса, например того, который может использоваться в doPost/doGet-методах сервлета? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 11:47:33 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
автор1. Я понял, что contextInitialized вызывается при старте вэб-приложения. Не в нем ли я должен выполнять создание и инициализацию своих объектов? Да в этом методе ты можешь создавать свои общие объекты, только нужно учитывать что у тебя допустим обращение к БД быть неудачным, и как это обработать зависит от приложения, либо сказать пользователю что приложение к работе не готового, либо поробовать как-то отложенно данные погдгружать. автор2. Можно ли к ServletContext обратиться из метода произвольного класса, например того, который может использоваться в doPost/doGet-методах сервлета? К ServletContext могут обратиться (Filter, Servlet, Listener, Custom Tags), для простых объектов ты должен сам об этом позаботиться. Ты можешь например в сервлете эти данные получить и дальше передавать их нужным объектам как параметры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 12:02:34 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
Semen Popov1. Я понял, что contextInitialized вызывается при старте вэб-приложения. Не в нем ли я должен выполнять создание и инициализацию своих объектов? - это было бы логично, хотя и не обязательно (код приведен выше) Semen Popov 2. Можно ли к ServletContext обратиться из метода произвольного класса, например того, который может использоваться в doPost/doGet-методах сервлета? - да. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 12:04:37 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
vas0Да в этом методе ты можешь создавать свои общие объекты, только нужно учитывать что у тебя допустим обращение к БД быть неудачным, и как это обработать зависит от приложения, либо сказать пользователю что приложение к работе не готового, либо поробовать как-то отложенно данные погдгружать. Как раз обращение к базе мне и будет нужно. Посмотрим, что из этого получится. Кстати, можно ли из программы выполнить рестарт приложения? Например, на одной из страниц, доступной для администратора, разместить ссылку, которая бы выполняла перезагрузку приложения на сервере. vas0К ServletContext могут обратиться (Filter, Servlet, Listener, Custom Tags), для простых объектов ты должен сам об этом позаботиться. Ты можешь например в сервлете эти данные получить и дальше передавать их нужным объектам как параметры. Да, передачу параметров я тоже рассматривал. Но, хотелось бы, чтобы глобальный объект был действительно глобальным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 12:31:16 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
Kachalov- да. Код: plaintext Спасибо. Неужели из произвольного класса так можно достучаться до объекта? Что-то тут не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 12:32:10 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
Semen Popov Kachalov- да. Код: plaintext Спасибо. Неужели из произвольного класса так можно достучаться до объекта? Что-то тут не хватает. Из произвольного класса, разумеется, нельзя. В метод произвольного класса надо будет передавать контекст в качестве параметра, а лучше - как уже написали - передавать именно необходимый инстанс-атрибут. Кроме того, в кластеризованных приложениях ServletContext не является расшаренным (кроме инициализационных параметров), и использовать общие для нод кластера данные через ServletContext тоже не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 12:46:50 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
Semen PopovДа, передачу параметров я тоже рассматривал. Но, хотелось бы, чтобы глобальный объект был действительно глобальным. Как вариант - можно использовать внутренний серверный кэш (но тогда получится уже server-speicific). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 12:53:23 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
ЗашедшийИз произвольного класса, разумеется, нельзя. Делаю вывод, что web-программировании на ява вообще нельзя создавать глобальные переменные в буквальном смысле, которые бы можно было инициализировать и заполнять в любом месте кода, как это можно сделать, например, в виндовых приложениях. Там объявленная глобальная переменная может быть прочитана и отредактирована в любом месте - классе, процедуре и т.д. В web получаем относительную глобальность. Например, мои объекты в ServletContext относительно сессий глобальны, но не глобальны относительно произвольных классов. Поправьте меня, если не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:03:19 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
Глобальные переменные - зло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 13:23:15 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
Semen PopovДелаю вывод, что web-программировании на ява вообще нельзя создавать глобальные переменные в буквальном смысле, которые бы можно было инициализировать и заполнять в любом месте кода, как это можно сделать, например, в виндовых приложениях. Технология сервлетов это часть спецификации Java EE, в которой в качестве "расшареных" объектов используются EJB-компоненты. Доступ к ним возможен откуда угодно через JNDI. Так что Ваш вывод основан на недостаточном знании спецификации :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 14:17:20 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
TimmГлобальные переменные - зло. Эт с какой стороны посмотреть. В программировании память и скорость вечно противостояли друг другу. Одну задачу можно было решить двумя путями: сожрать память, но выиграть в скорости или сэкономить память, но затратить большее время выполнения. Раньше я даже не знал, что такое глобальные переменные. Старался их не использовать, пытался как-нибудь обойти. Теперь, когда имеются столь мощные машины, я не задумываюсь над этим, но явным приверженцем не являюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 14:43:45 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
KachalovТехнология сервлетов это часть спецификации Java EE, в которой в качестве "расшареных" объектов используются EJB-компоненты. Доступ к ним возможен откуда угодно через JNDI. Так что Ваш вывод основан на недостаточном знании спецификации :) Спасибо. Я действительно мало знаю матчасть. Но сильно не бейте, буду учиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 14:45:34 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
Kachalov Semen PopovДелаю вывод, что web-программировании на ява вообще нельзя создавать глобальные переменные в буквальном смысле, которые бы можно было инициализировать и заполнять в любом месте кода, как это можно сделать, например, в виндовых приложениях. Технология сервлетов это часть спецификации Java EE, в которой в качестве "расшареных" объектов используются EJB-компоненты. Доступ к ним возможен откуда угодно через JNDI. Так что Ваш вывод основан на недостаточном знании спецификации :) Именно что типо "расшаренных". Они таковыми не являются (с т.з. public static полей). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 14:55:55 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
Semen Popov ЗашедшийИз произвольного класса, разумеется, нельзя. Делаю вывод, что web-программировании на ява вообще нельзя создавать глобальные переменные в буквальном смысле... И это вполне понятно и логично, если чуть-чуть углубиться в исторический аспект. Дело в том, что вэб-приложения изначально проектировались как распределенные. С точки зрения конечного пользователя (и, кстати, разработчика J2EE-приложения, но это - в идеале) не должно быть никакой разницы между работой системы на единственном сервере, на кластере, объединяющем десяток физически разных серверов, многопоточном сервере а-ля "виртуальный кластер" и т.д. В винде приложение работает в едином адресном пространстве, и из любой точки этого пространства всегда можно поиметь прямой доступ по указателю к конкретной переменной, причем - любого типа. В случае с вэб-сервером мы можем иметь кучу разных процессов, с недоступными друг другу пространствами, кроме того - если надо хранить какой-то достаточно объемный инстанс, то еще и придется реплицировать этот объект между нодами кластера, актуализировать его состояние при каждом изменении... В общем, уважаемый Семен, лучше сразу забудьте про "как в виндус", создание распределенных систем - совсем иная песня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 15:29:17 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
А чем не устраивает класс singleton? Доступен из любого метода, есть возможность ленивой инициализации любых. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 15:31:28 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
TimmИменно что типо "расшаренных". Они таковыми не являются (с т.з. public static полей). Адназначна! Хотя использовать их для хранения "общих" объектов все же можно, только надо хорошо подумать о процессе сериализации этих общих объектов в БД (ну или пул JMS, к примеру), опять же синхронизации и тому подобном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 15:32:00 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
kest_ruА чем не устраивает класс singleton? Доступен из любого метода, есть возможность ленивой инициализации любых. Проводим простой опыт - добавляем синглтон в J2EE-приложение, в этом синглтоне имеем поле типа int, потом деплоим приложение на кластер из двух серверов. Устанавливаем в статик-секции синглтона полю random-значение, по запросу пользователя (HTTP-GET) выводим в сервлете на экран значение MySingleton.getInstance().getIntField(), запускаем это дело циклом с клиента и в процессе переключения запросов балансировщиком загрузок с одной ноды на другую наблюдаем в отлике два разных числа. Все счастливы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 15:41:23 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
для данной фичи не нужен кластер. достаточно в jboss создать по синглтону в сервлете и в бине. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 15:55:15 |
|
||
|
Нужен совет по хранению общих объектов
|
|||
|---|---|---|---|
|
#18+
Все зависит от исходной задачи. Не все же используют кластеры? В первоначальном вопросе шла речь о неизменяемых данных из базы, и я не вижу причин заморачиваться со сложными решениями. Что такого даже если данные перечитаются несколько раз, это всяко лучше чем для каждой сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2007, 17:39:08 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34823516&tid=2144526]: |
0ms |
get settings: |
11ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
37ms |
get topic data: |
17ms |
get forum data: |
4ms |
get page messages: |
95ms |
get tp. blocked users: |
2ms |
| others: | 328ms |
| total: | 526ms |

| 0 / 0 |
