![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Как сделать так, чтобы данные объектов были в одном приложении, а их методы выполнялись в другом приложении? Аналогично механизму share memory во FreeBSD...
Например, в запущенном приложении Keeper есть объект
В запущенном приложении Utilizateur происходят операции с объектом.
Приложение Utilizateur использует методы и оперирует над данными объекта point59 в другом приложении Keeper. Это нужно для того, чтобы если Utilizateur попытается чего-то сделать неправильно, например завалится от деления на ноль, то Keeper будет продолжать работу, сохранив все данные. Как это сделать? Заранее признателен за подсказку в направлении, куда копать... |
||||
|
|||||
jManiak |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 6.2.2007 Где: Санкт-Петербург Репутация: нет Всего: 1 |
rmi?
|
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
rmi?
RMI сериализует/десериализует объекты, и фактически Utilizateur будет оперировать своим point59. А нужно, чтобы Utilizateur оперировал объектом point59, который принадлежит приложению Keeper. |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Например, на одной JVM на одном хосте выполняются два приложения. Может ли одно приложение получить прямой доступ к объектам другого приложения и оперировать с ними, как со своими объектами в пределах одной JVM?
|
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Может. Но для этого нужно слишком много условностей. Во-первых, объект класса нужно сделать статическим. Во-вторых, должен существовать один экземпляр класса. Хочу напомнить, что в Java возможна сложная иерархия класслоудеров и экземпляров классов может быть много, следовательно, и экземпляров статических классов тоже. Для того, чтобы был один экземпляр, в JVM должен быть только один экземпляр файла класса. Поэтому лучше поискать альтернативную возможность хранения общих данных. Например, базу данных или сериализацию на диск. |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Речь идёт не о хранении общих данных. Для этого достаточно СУБД. Но СУБД не хранит методы объектов, насколько я знаю, методы не сериализуются. Смысл shared memory в данном случае в том, что выход из строя приложения Utilizateur не приведёт к потере данных, которые находятся в работающем приложении Keeper. Ведь приложение Utilizateur использует не свои объекты, а объекты (методы и данные) Keeper'a. Вот например в SAP JVM сделано так, что разные приложения могут помещать объекты в shared memory и совместно использовать эти объекты. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Можно сделать через MappedByteBuffer (правда работать с ним не удобно):
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
LSD, шарить нужно не данные, а объекты :о)
Из вашего кода я не понял, как Утилизатор сможет пользоваться объектами Кипера. |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Попробую переформулировать на живом работающем примере на С.
Запускаю: prol@corphangar> CorporationApplication -Keeper Приложение запускается, распределяет память и остаётся в режиме кипера, ничего не делает. Запускаю вторую копию этого же приложения prol@corphangar> CorporationApplication -Utilizateur С помощью механизма shm второе приложение работает над данными первого приложения с помощью функций первого приложения, в том числе делает new и dispose, новые объекты создаются и удаляются в общей shared memory, и первое приложение, которое ничего не делает в sleep'e, при этом владеет всеми новыми объектами. Так как первое приложение ничего не делает, то оно и не падает. А вот если второе приложение свалится по какой-либо причине, то в первом приложении останутся все данные целыми. :о) Как сделать такое на Java? Чтобы второе приложение использовало объекты первого приложения? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Объекты шарить между разными JVM - нельзя (во всяком случае стандартные реализации этого не позволяют).
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
А можно ли шарить объекты между приложениями внутри одной JVM? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Да, только они должны использовать один и тот же класс лоадер. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Извините, я ещё не владею достеменно понятиями Java, поэтому объясните, как в одной JVM могут быть разные класслоадеры. И пожалуйста, приведите пример, как два приложения могут пользоваться одним объектом в одной JVM в виде кусочка кода... |
|||
|
||||
LSD |
|
||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Очень даже запросто, если это какой-то J2EE сервер, то они даже будут разными. Но в обычном приложении он как правило один.
Да обычный синглетон например:
все потоки используют один и тот же экземпляр Runtime. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||
|
|||||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Как самому сделать такой "синглетон", одни объект, который могут использовать одновременно два моих приложения? |
|||
|
||||
seth |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: нет Всего: 1 |
а с помощью JNDI не получится?
|
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
JNDI хранит сериализованные объекты (как я понял, методы не сериализуются). Но я веду речь не о том, как хранить совместно используемые данные (свойства объектов), а как использовать один и тот же объект из разных приложений одновременно :о) |
|||
|
||||
batigoal |
|
||||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
С помощью статической переменной:
Это сообщение отредактировал(а) batigoal - 11.1.2008, 14:55 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
||||
|
|||||
Prol |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Дык оно же будет создавать новый синглтон для каждого приложения, которое пользуется им :о) А как сделать синглтон, который создан одним приложением и виден из другого приложения, которое в это время запущено одновременно с приложением, которое создало синглтон? |
||||||
|
|||||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Нет, если класс для обоих приложений будет загружен одним и тем же загрузчиком классов. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Но ведь в одной JVM один загрузчик классов? То есть если я сейчас запущу приложение c вашим синглтоном, то второе запущенное приложение его увидит и не будет делать new? Это сообщение отредактировал(а) Prol - 11.1.2008, 15:19 |
||||
|
|||||
Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 14 Всего: 62 |
Prol
Ты не создаешь новый экземпляр через new в этом случае, а получешь единственный через MySingleton.getInstance() -- в это суть паттерна: используется только один экземпляр класса, который хранится в статике. |
|||
|
||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Извините, я новик, у меня не получается сделать приложение с вашим синглтоном :о(
|
||||
|
|||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Это просто предупреждение, что объявленная переменная, в общем-то, не нужна. Оно не препятствует выполнению программы.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Prol, вы явно хотите использовать java не по назначению, т.е. преодолеть существующие защитные механизмы java, используемые для повышения надежности программ. Идея сделать на java как на C - не продуктивна.
Если работа с данными происходит в отдельном потоке и происходит деление на ноль, то выбрасывается исключение и этот поток может спокойно умереть. Если этот поток не модифицировал данные, то данные будут в сохранности и приложение продолжает функционировать. Это сообщение отредактировал(а) COVD - 11.1.2008, 17:50 |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
||||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 24 Всего: 144 |
А откуда такая увереность, что приложение-утилизатор, свалившись, не оставит после себя полную абракадабру в приложении-хранителе? Это, я вам скажу, более чем зыбкая посылка. Поэтому предлагаю не шифроваться, а изложить задачу в более исходном виде, не замкнутом на детали реализации. Возможно, совместными усилиями отыщется и более адекватное решение. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Не оставит, потому что снимать его будет ОС за оперейшен эксепшен или другое подобное. Точнее, если второе приложение оставило белиберду, то и первое в этом же месте оставило бы точно такую же белиберду :о) Первое и второе приложение совершенно одинаковы. А значит надо править неправильный код приложения. Но вот в случае исключительных ситуаций, связанных с вводом-выводом, делением на ноль или подобным, данные сохраняют целостность, а ОС убивает виновника, то есть второе приложение, сохранив при этом работающее первое, которое мне присылает смс, я смотрю, почему ОС убила второе приложение, если исправления в коде не требуются, то перезапускаю второе приложение, которое опять подхватывает shared memory, находящуюся в первом приложении и работает :о) Это сообщение отредактировал(а) Prol - 11.1.2008, 22:29 |
|||
|
||||
intr |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.12.2005 Репутация: 1 Всего: 2 |
RMI или ему подобное. Другие варианты извращение...
--------------------
Исследователь бытия и по совместительству Java-developer |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Как вы себе представляете работу RMI с тремя миллионами объектов? Сколько будет длиться сериализация/десериализация трёх миллионов объектов? А у меня уже несколько лет работают реалтайм приложения на С по схеме с шаред мемори. Одно держит методы и данные, а второе использует методы и данные первого приложения прямо в памяти. Когда второе приложение падает, первое продолжает работать, и сохранять данные тысяч пользователей. Если вы скажете, что в Java такое невозможно, то я вам приведу в пример SAP JVM, которая позволяет шарить объекты прямо в памяти между несколькими JVM. Это сообщение отредактировал(а) Prol - 12.1.2008, 06:48 |
|||
|
||||
intr |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.12.2005 Репутация: 1 Всего: 2 |
1. Зачем нужна сериализация/десериализация трех миллионов объектов. Это равносильно выгрузке 4 гиговой БД в ОЗУ! 2. Судя по проблеме надо шарить методы для других приложений, а не три миллиона объектов ![]() 3. Приложение которое сохраняет объекты это обычно БД! Вопросы: 1. Вы пишете свою базу данных? 2. Для каких целей нужна сериализация/десериализация трех миллионов объектов? 3. Вы держите в ОЗУ три миллиона объектов? p/s Такое ощущение что архитектура приложения очень сильно хромает! --------------------
Исследователь бытия и по совместительству Java-developer |
||||
|
|||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Потому что RMI сериализует/десериализует объекты между приложениями. Добавлено через 1 минуту и 52 секунды
Шаман! ![]() |
||||
|
|||||
intr |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.12.2005 Репутация: 1 Всего: 2 |
Ключевое слово здесь три миллиона объектов, зачем так много передавать? --------------------
Исследователь бытия и по совместительству Java-developer |
||||
|
|||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Больше... :о) Это риалтаймовые объекты, свойства которых обновляются от контроллеров, которые присылают данные с датчиков... Их нельзя не держать в памяти, потому что моё приложение обязано откликнуться на любое событие не позднее, чем через восемь миллисекунд. Дропать события тоже нельзя, за это тюрьма. Добавлено через 13 минут и 5 секунд
Чтобы при снятии системой одного из приложений, другое сохранило доступ ко _всем_ объектам, с которыми они работали, и возобновило работу. |
||||
|
|||||
intr |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.12.2005 Репутация: 1 Всего: 2 |
В данном случае я бы использовал очень быстрый сервер БД (на очень быстром железе), возможно Oracle...
ИМХО Java не очень подходить для систем реального времени, по крайней мере с использованием стандартной Java машины от SUN. p/s А что делать с данными в ОЗУ если даст сбой железо или выключат свет? тюрьма? можно не отвечать ![]() --------------------
Исследователь бытия и по совместительству Java-developer |
|||
|
||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
:о))) Почему же? Байткод Java ненамного уступает ассемблеру по скорости выполнения, но писать на нём намного легче. Кроме того, у Java отличная переносимость. То, что у SUN ещё нету шаред мемори - это вопрос времени и требований разработчиков... Добавлено через 1 минуту и 9 секунд
За сбой питания я не отвечаю :о) Пусть хоть там все передеруцца... |
||||
|
|||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
||||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Мои приложения на С. Я хочу их портануть на Java, потому что мне так кажется удобнее передать моему наследнику и уйти на пенсию. :о) На Питон тоже можно, но если эти охламоны видят в операторе (_*_) разорванную жопу, а не умножение предыдущего выражение самого на себя (возведение в квадрат), то уж пусть лучше пишут на Java... Это сообщение отредактировал(а) Prol - 12.1.2008, 08:33 |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Боюсь это плохо кончится для наследника. Сборщик мусора - это как раз одна из тех причин, по которой обычные JVM не используются в приложениях реального времени. Есть спецификация Real-time Java, начать можно отсюда - http://en.wikipedia.org/wiki/Real_time_Java. |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Я знаком с нею - она дропает входящие события, типа я не видела того, на что не успеваю отвечать. Поэтому я и спросил про шаред мемори - проверенный механизм. |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Мне как-то не совсем понятен разговор про shared memory, рецепт которой, кстати, уже предложили - синглтон, но с ограничениями по загрузке классов о которой я говорил, если сама Java не подходит под задачу. Или таки 8 миллисекунд - это не жесткое ограничение?
|
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Насколько я знаю, этим можно управлять. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 14 Всего: 62 |
Prol
Возможно я пропустил.. А в каком окружении работает ваше приложение (ОС, железо)? И куда физически приходит инфомация с датчиков (порты)? Интересно. Если не секрет. ЗЫ. Насколько я знаю, для реалтаймовых систем используются заточенные под это дело операционный системы, типа QNX. |
|||
|
||||
serger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
Ну вы развели!..
![]() Надо начать с описания задания. Что нужно сделать конкретно. А то завели спор, как микроскопом гвозди забивать.. Теоретические споры тоже умесны, но до определённого предела. Вроде он уже достигнут. Нужны факты. ![]() ps. Построить можно что угодно, но насколько рационально. -------------------- упс! |
|||
|
||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
FreeBSD 4.12 Железо нормальное :о) Данные приходят на сетевой порт :о) Трафик порядка терабайта в месяц :о) Добавлено через 2 минуты и 50 секунд
Не имеет значения, что делает приложение. Я описал работающий метод защиты от сбоев приложения с использованием механизма shared memory и спросил, возможно ли сделать такое не для приложения на С, а для приложения на Java ? |
||||
|
|||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
По поводу расшаривания объектов, есть предложение посмотреть в сторону JMX (Java Management Extensions). Я с этой технологией не работал, но на сколько знаю, она позволяет одной JVM подключиться к другой и, грубо говоря, дернуть метод у объекта. В целом JMX создавалась как средство мониторинга Java приложений.
|
|||
|
||||
serger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
Банальный вопрос а зачем? Ещё хуже. Зачем делать так же как на с? ![]() Язык определяет мышление. Нельзя на одном писать средствами другого. Я считаю, с таким подходом, даже если что-то и получится, то будет держаться только на Вашем интузиазме. А приемнику Вы окажите медвежью услугу. -------------------- упс! |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Как средство управления с универсальным интерфейсом. -------------------- ![]() ![]() |
|||
|
||||
serger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
-------------------- упс! |
|||
|
||||
serger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
около 400к данных в секунду приходит?
-------------------- упс! |
|||
|
||||
Prol |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Это суммарный входящий/исходящий. Пропорция примерно 100к входящего на 300к исходящего от приложения в секунду. Добавлено через 11 минут и 40 секунд
Как зачем? Затем, чтобы обеспечить сохранность данных, разделяемых двумя приложениями, при любых практически сбоях одного из приложений. :о) |
||||||
|
|||||||
powerOn |
|
||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Большинство из БД могут удовлетворить этим требованиям. Например Apache Derby (Java DB) прекрастно с этим справится. Просто настройте 2 приложения работать с одной БД. Более того, при работе с БД, вы имеете возможность сохранить данные даже при крахе обоих приложений. Хотя, честное слово, ума не приложу, в чем может быть причина, что одно из приложений упадет... |
||||
|
|||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Ну как раз тут-то у меня сомнений нет, redundancy обеспечивать нужно. Вот только что толку от двух экземпляров программ, запущенных на одной машине, мне неясно. Умрет диск - и до свиданья. Так что лучше обеспечивать беперебойность кластеризацией (базы, или application-серверов, или каких-то самописных программ). -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
COVD |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
праивильный ответ
|
||||
|
|||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Ок, я понял, что не могу доходчиво донести. Попробую по другому.
Фаза инициализации более трёх миллионов объектов в памяти занимает более 15 минут. Они читаются из БД и размещаются в памяти одним приложением. В случае, если ОС снимет это приложение, то время повторного перезапуска займёт те же более 15 минут, каковое время недопустимо по требованию заказчика. Поэтому я запускаю две копии одного приложения. Первая копия при первом старте тратит 15 минут на чтение и размещение объектов в shared memory памяти и падает в sleep. После того, как я вижу, что первое приложение отинитилось, то запускаю вторую копию этого же приложения. Поскольку оба приложения используют shared memory, то второе приложение (оно точно такое же по коду как и первое) получает уже отиниченную память со всеми тремя миллионами объектами и приступает к отработке очереди сообщений всего за одну секунду. В случае сбоя в приложении, ОС снимает именно то приложение, в контексте которого произошёл сбой, то есть второе, потому что именно оно что-то делает, а первое остаётся в слипе, сохраня всю память со всеми тремя миллионами объектов в текущем состоянии обработки. Рестартовав второе приложение за одну секунду, оно продолжает работать, откатив последнюю транзакцию. Можно ли так сделать на Java? Добавлено через 3 минуты и 32 секунды
Если умрёт диск (это тоже неважно, потому что диск не используется), ОС снимет второе приложение по сбою ввода-вывода, но первое приложение останется в памяти и сохранит все данные :о) |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Грубо говоря, можно ли примерно так? :
Это сообщение отредактировал(а) Prol - 15.1.2008, 04:16 |
|||
|
||||
intr |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.12.2005 Репутация: 1 Всего: 2 |
Дальше небольшой
![]() Помню пришлось дорабатывать код написанный бывшими PHPшниками, это был их первый большой проект на Java. Таких извращений в коде я больше никогда не видел ![]() p/s а оно надо переписывать с си на Java? Ведь работает и устраивает заказчика. А если код стабилен то проще найти нормального сишника! p/s/s А сборка мусора это действительно большие грабли для реалтаймовых систем ![]() --------------------
Исследователь бытия и по совместительству Java-developer |
|||
|
||||
serger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
![]() А может ли волк понять овцу? И может ли овца стать волком? Задачи надо решать средствами языка, иначе будет.. ну что-то на 5 точке ;) Те я хочу сказать, что простой переделкой кода тут не обойдёшься. Надо переделывать архитектуру системы с точки зрения java и как это на java делается. Готовы Вы на это пойти, или нет - это Вам решать. Ну и есть принцип. Работает, не трожь! Это сообщение отредактировал(а) serger - 15.1.2008, 06:27 -------------------- упс! |
|||
|
||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Не такие уж и большие грабли - этот garbage collector. По крайней мере его можно заставить убирать мусор не когда ему требуется, а когда нам требуется.
|
||||
|
|||||
serger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
это не так
Это лишь уведомление о необходимости - jvm САМА решает когда запускать. -------------------- упс! |
|||
|
||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
gc() - принудительный вызов сборщика мусора. Когда управление выходит из вызванного gc(), мусор уже убран.
|
||||
|
|||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Prol, это ошибка. Вызов сборщика мусора не гарантирован ВАЩЕ. Кое-как им можно управлять с помощью ключей запуска JVM, но это весьма ограниченное управление.
Раньше еще использовался такой прием - вызов gc() несколько раз подряд. Сейчас даже он уже не прокатывает. Это сообщение отредактировал(а) batigoal - 15.1.2008, 09:40 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
serger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
да даже если бы и срабатывал сразу, к чему это приводило бы?
Вот тут сайт про JVM. http://blogs.sun.com/vmrobot/category/GC или вот есть такие шаманства (отсюда): Следующий метод освобождает всю возможную память:
Это сообщение отредактировал(а) serger - 15.1.2008, 09:57 -------------------- упс! |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Что значит "ошибка"? В одном из базовых классов Java ошибка? Его нельзя вызывать несколько раз подряд, это асинхронное событие имеющее длительно время исполнения. Сборщик мусора нужно вызывать не в основном потоке приложения, а делать для него отдельный поток и пользоваться как при асинхронном вводе-выводе, наверна, да? :о) |
|||
|
||||
intr |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.12.2005 Репутация: 1 Всего: 2 |
Вообщем пообщался с одним умным человеком
![]() gc() не просто удалят все неиспользуемые объекты из памяти он при вызове решает стоит удалять объекты из пямяти или нет на основе времени жизни объекта, количества свободной (занятой) ОЗУ и т.д. то есть он попробует почистить память ![]() Так по крайней мере в стандартной Java машине ![]() p/s Кстати если нужен нормальный runtaime и адекватное время исполнение, то скорее всего надо использовать специальное железо от SUN и специальную сборку Java машины. Но стандартная сборка Java машины для этого точно не подходит! Но это ИМХО. --------------------
Исследователь бытия и по совместительству Java-developer |
|||
|
||||
batigoal |
|
||||||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Что значит "нельзя"? Можно. Но исполняться оно будет долго. Ошибка заложена уже в самой идее - управлять памятью в managed-языке. Приложение не может управлять своей выполняющей средой, оно может лишь рекомендовать ей что-то сделать, что и подтвержадется приведенным куском доки:
Зачем? В том же фрагменте написано:
Рекомендую почитать статьи по тюнингу сборщика мусора, в Интернете их немало. Добавлено через 1 минуту и 21 секунду
Для этого и создана Real-Time Java. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
||||||
|
|||||||
intr |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.12.2005 Репутация: 1 Всего: 2 |
Вообщем пообщался с одним умным человеком
![]() gc() не просто удалят все неиспользуемые объекты из памяти он при вызове решает стоит удалять объекты из пямяти или нет на основе времени жизни объекта, количества свободной (занятой) ОЗУ и т.д. то есть он попробует почистить память ![]() Так по крайней мере в стандартной Java машине ![]() p/s Кстати если нужен нормальный runtaime и адекватное время исполнение, то скорее всего надо использовать специальное железо от SUN и специальную сборку Java машины. Но стандартная сборка Java машины для этого точно не подходит! Но это ИМХО. --------------------
Исследователь бытия и по совместительству Java-developer |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Мы отвлеклись от темы. :о)
Как обратиться к объекту (экземпляру класса), находящемуся в другом приложении? |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Я бы тогда пошел по другому пути - повышение надежности и отказоустойчивости. Например запускаем Application Server у которого работает два приложения - одно хранит данные в некотором кэше (хранилище), другое (логика) - выполняет какие-либо действия с этими данными. Падение Application Server - ну надо очень постараться. Даже если при выполнении логики что-то отвалится, то хранилище должно (и будет) нормально работать. Сервер просто подымет еще одну копию логики. И все. Хотя инициализация трех миллионов объектов - это как-то странно. |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Вам уже ответили - никак. Связь только через файл, отображаемый на память или сокеты (или любой другой более высокоуровневый механизм). -------------------- ![]() ![]() |
|||
|
||||
ecologist |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 452 Регистрация: 28.2.2007 Репутация: 2 Всего: 9 |
Ну вообщем-то никто не мешает исполmзовать RMI или просто сокеты для общения приложений. Но правда в таком случае эффективность работы наверняка снизится.
Если же иметь в виду общую память, которую можно разделять между процессами, то это особенности ОС и кроссплатформенность JAVA на такие вещи не рассчитана. Я бы тоже задумался (как и AntonSaburov) над проектированием системы. |
|||
|
||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Что подразумевается под "Хранилищем"? Образ памяти или БД? Application Server предоставляет доступ двум приложениям к одной памяти? Добавлено через 2 минуты и 17 секунд
Как сделать в Java связь через файл, отображаемый на память? |
||||
|
|||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Нет, но он может объединять несколько серверов в кластер, обеспечивая тем самым отказоустойчивость. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
В этой теме об этом уже говорили - http://forum.vingrad.ru/index.php?showtopi...t&p=1376155. -------------------- ![]() ![]() |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Спасибо, но в этот файл невозможно загрузить методы и передать им управление :о( |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Как и в любой другой файл. Но в этом нет и смысла - вам же нужно разделять данные, а не методы. -------------------- ![]() ![]() |
|||
|
||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Именно необходимо разделять методы :о) Мне не нужны два разных приложения, у которых каждого свой new и свой код методов. Мне нужно, чтобы два одинаковых приложения разделяли один new в одной области памяти и использовали одну копию методов над одной копией объектов. |
||||
|
|||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
А если упадет именно в таком методе, то какая тут надежность ? Проблема как я понимаю в том, чтобы иметь надежное приложение, которое данные позволяет сохранить в случае падения логики. Но тогда надо разделять данные и логику. Ощущение, что Вы не очень понимаете, что надо. Это не сомнение в профессионализме - просто может пока задача не совсем очевидна. |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Так упадёт же второе приложение. А первое сохранит все данные уже размещённые в памяти. И тогда нужно будет перезапустить второе приложение, которое продолжит работу с откатом последней транзакции. :о) |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Но в таком случае логика и данные разделены. И второе приложение просто проверяет - не упало ли первое. И в нужный момент подхватывает. Значит именно данные лежат в shared memory. А все методы - в логике. Или классов тоже три миллиона ? Вы случайно не введены в заблужение по поводу того, что методы создаются для каждого объекта ? Это не так - один метод работает для всех объектов этого класса. Добавлено через 8 минут и 20 секунд Похоже я что-то понимаю - логика работает в объектах и меняет их состояние. Надо каким-то образом это состояние хранить. А т.к. перемешана логика с данными в объектах, то точно разделить не получается. Значит нужен механизм, которые постоянно сохраняет значения полей объектов где-то. Что конечно же усложнит работу и снизит производительность. Либо сделать разделение на объекты, которые зранят данные и объекты, которые их изменяют. В терминах EnterpriseJavaBeans это EntityBean и SessionBean. Видимо так и надо проектировать. |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Ок, попробую ещё раз объяснить. ОС убивает то приложение, в контексте которого произошла ошибка. И освобождает память убитого. Но если приложение пользуется памятью другого приложения, то ОС не освобождает память непричастного. Посмотрите картинку, как оно сделано на С. Можно ли так сделать на Java? Присоединённый файл ( Кол-во скачиваний: 19 ) ![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Нафига код методов помещать в общую память? У вас что, приложение само себя модифицирует в процессе работы?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Методы и объекты всегда разделены :о) Методы ведь общие для всего класса объектов. Смысл в том, что второе приложение пользуется методами и объектами первого приложения, но в случае сбоя ОС снимает именно второе приложение :о) А первое сохраняет загруженными и методы и объекты. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
На Java тако практически не реально, байткод не может вызвать крах JVM. Сам упасть - сколько угодно, но свалить JVM без использования native методов не реально (ошибки в самой JVM редки). -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Для того, чтобы второе приложение могло вызвать методы, которые лежат в общей памяти :о) Добавлено через 1 минуту и 30 секунд
Подставьте вместо ОС слово JVM. Как сделать, чтобы второе приложение вызывало методы первого над объектами первого? |
||||
|
|||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
И что? Что тебе мешает дать ему свою копию классов? Добавлено через 1 минуту и 39 секунд Да и зачем ему что-то там вызывать, если он как ты говоришь используется только для того, чтобы после падения данные остались в памяти. Добавлено через 3 минуты и 1 секунду
Если ты хочешь все делать внутри одной JVM, то варианты решения тебе уже неоднократно предлагали, повторять не буду. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
Prol |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Мне не нужна вторая копия тех же методов, во-первых. А во-вторых мой менеджер памяти должен быть в единственном экземпляре но доступен из обоих приложений для управления распределением общей разделяемой памяти для объектов.
Первое приложение не совсем спит, оно просто в это время делает непрерывный бекап в БД, не мешая второму работать с объектами. :о)
Извините, но RMI и JMX не подходит, потому что сериализует/десереализует объекты между приложениями. А мне нужно из второго приложения выполнять методы первого над объектами первого, и если JVM прибъёт второе приложение за шо-нибуть некорректное. то в первом остануться все методы и все объекты на момент последней незавершённой транзакции. Это сообщение отредактировал(а) Prol - 16.1.2008, 14:52 |
||||||||||
|
|||||||||||
fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 6 Всего: 27 |
Prol, сколько можно тупить? (при всем уважении к возрасту и прочим регалиям).
Вам уже неоднократно сказали, что Java это не C и то что прокатывает во втором не обязано работать также в первом. Мое мнение, что на Java Вам переходить не стоит. -------------------- ![]() |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Так что, даже если я откомпилю приложения Java в нативный код и они будут работать без JVM, то всё равно они не смогут пользоваться общей разделяемой памятью? ;о))) |
|||
|
||||
fixxer |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 6 Всего: 27 |
Попробуйте ;) Добавлено через 2 минуты и 15 секунд
Непонятно, чем здесь помешает RMI? -------------------- ![]() |
||||
|
|||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Я вот чё подумал...
Может быть я недооцениваю потоки в Java? Например пусть в одном приложении у меня есть поток Keeper и поток Utilizateur, и в одном из них произошёл непоправивый сбой, то JVM мне остановит только поток-виновник сбоя или прибъёт всё приложение? Добавлено через 2 минуты и 51 секунду
Предстаьте себе, что вы меняете значения трёх миллионов объектов не напрямую, а используя сериализацию/десериализацию (RMI) :о) Насколько это будет медленнее? |
|||
|
||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Только поток вызвывший сбой. Плюс ты можешь зарегистрировать своего обработчика на это событие. Добавлено через 5 минут и 16 секунд
Внутри одной JVM можно использовать статические поля/методы. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
Prol |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Тогда это выход. Если сбой в одном потоке не вызывает снятия всего приложения исполняющей JVM, то я нашёл ответ на свой вопрос. Всем участникам спасибо за возню со мной, косноязычным :о) Теперь бы ещё понять, как отловить переполнение.... Но для этого я открыл другую тему. Ещё раз спасибо, ребята :о) |
||||
|
|||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Если сбой произошел по вине данных, то они успешно положат и второй поток. Если же, допустим, засбоит JVM, то приложение также умрёт. Поэтому я не понимаю смысл подобной избыточности - она не даёт особых прибылей. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Данные не могут положить поток. Поток может положить неправильный метод. Не положат они второй поток, потому что второй поток не делает с ними те же операции что и первый :о) Прибыль получается, что в случае сбоя второго потока, нам нужно его перезапустить на уже готовые, существующие объекты. А в случае однопоточного приложения нам придётся переиничивать все объекты, а это занимает бешеное время, в моём приложении 15 минут. |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А что помешает ему после перезапуска, на тех же самых данных снова лечь? ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
А он ведь не с того же места начнёт выполнение, а значит вызовет другой метод или тот же метод с другим объектом, так что может вообще повторной ошибки не произойти :о))) Грубо говоря, вот у нас любое оконное приложение состоит из трёх потоков. 1. UI 2. Внутренняя логика 3. Ввод-вывод всякий, кроме UI. В таком приложении нужно просто добавить поток Keeper, который всегда будет работать, ничего не делая, кроме ожидания остановки одного из первых трёх потоков по ошибке. В случае остановки одного из указанных потоков, Keeper его перезапускает. При этом данные приложения сохранятся. :о) |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
что значит - неправильный метод? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
неправильный метод, это такой метод, который делает не то, что написано в спецификации этого метода, например закоден с ошибкой в алгоритме, или кодер ошибся с приоритетом операций и скобки не там стоят... |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Так его надо переписывать, значит, а не в двух потоках запускать. А если у тебя есть два неправильных метода, и они выполнятся в двух потоках с интервалом, допустим, в три минуты? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
serger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
to Prol, Вы какие ошибки имеите в виду? Какие данные? В двух словах, какой алгоритм?
Просто опять грубо: Возникает у Вас ошибка деления на 0 в алгоритме, алгоритм завершается, как-либо? Ну допустим вылетает. Данные сохранились. И опять так же обрабатываются. Алгоритм опять вылетает.. Что дальше?! ps. Горе от ума?! ![]() -------------------- упс! |
|||
|
||||
Prol |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Значит я подготавливаю исправленный вариант, оцениваю, требуется ли перезапуск и пишу емерженси рекваест, в котором указываю причиной требования - мои ошибки в коде и несу его начальству, начальство снимает с меня премию месячную, аппрувит рикваест, я перезапускаю приложение внепланово. Добавлено через 3 минуты и 54 секунды
Ну ето не самая частая ошибка, в прошлом году три раза вылетала. Ничего страшного, перезапустился тут-же, а там другие проверки не пропустили до этого места, а потом корку копал, искал откуда он проскочил, етот делений на ноль. |
||||||
|
|||||||
serger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
Печально, но ничего не понял, кроме того, что лучше бы таких ошибок не возникало.
Ну это и так понятно. Ну возникла идея. А почему бы тогда всё-таки данные и обработчик вообще разъединить? Чтобы перезапускать надо было только обработчик, если он сбоит? -------------------- упс! |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Так я так и делаю сейчас. У меня Кипер и Утилизатор два разных приложения в контексте ОС. Кипер хранит данные и работает ну вот последний аптайм 170 суток. А Утилизатор с этими данными работает аптайм уже две недели со времени последнего перезапуска. |
|||
|
||||
serger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
Ну дык, тогда я не понял.. Если алгоритм засбоит, Утилизатор быстро можно перезапустить?!..
-------------------- упс! |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Утилизатор поднимается мгновенно - за одну секунду :о) |
|||
|
||||
serger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
Не если его передеплоить придётся. Раз он за секунду поднимется, в чём проблема?
-------------------- упс! |
|||
|
||||
Prol |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Без санкции руководства я не имею права запускать новые версии вне плановых перезапусков :о) Что непонятного? Порядок должен быть полным орднунгом, такая процедура, и очень правильная. Простой перезапуск текущего Утилизатора не требует санкции. Я его даже с мобилки могу сейчас перезапустить, юзера даже коннект не потеряют. Плановый перезапуск раз в месяц, если требуется. Я как правило им пользуюсь, где-то лики памяти всё-таки есть... |
|||
|
||||
mindflyer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.10.2004 Где: Smolensk, Russia Репутация: 1 Всего: 4 |
Сегодня знакомый упомянул про некую http://www.terracotta.org/ - типа возможность в одной java-машине напрямую использовать объекты, которые реально хранятся в другой JVM. Ничего об этом не знаю, но по форме звучит похоже на название темы
![]() Кто-нить реально использовал эту штуку? Какие впечатления? |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
"напрямую" - это, очевидно, все равно обмен через сокетные соединения, но реализация скрыта. Так же "напрямую" работает и RMI. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |