Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Совместное использование памяти двумя приложениями, Как это сделать? 
V
    Опции темы
seth
Дата 11.1.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 4.6.2006

Репутация: нет
Всего: 1



а с помощью JNDI не получится?


--------------------
PM MAIL   Вверх
Prol
Дата 11.1.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(seth @ 11.1.2008,  14:33)
а с помощью JNDI не получится?

JNDI хранит сериализованные объекты (как я понял, методы не сериализуются). 

Но я веду речь не о том, как хранить совместно используемые данные (свойства объектов), а как использовать один и тот же объект из разных приложений одновременно :о)
PM MAIL WWW ICQ   Вверх
batigoal
Дата 11.1.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Prol @  11.1.2008,  14:42 Найти цитируемый пост)
Как самому сделать такой "синглетон", одни объект, который могут использовать одновременно два моих приложения? 

С помощью статической переменной:

Код

public class MySingleton {
  private static MySingleton instance;
  private MySingleton() { }
  
  public static MySingleton getInstance() {
    if( instance == null ) {
      instance = new MySingleton();
    }
    return instance;
  }
}


Это сообщение отредактировал(а) batigoal - 11.1.2008, 14:55


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Prol
Дата 11.1.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(batigoal @ 11.1.2008,  14:55)
Цитата(Prol @  11.1.2008,  14:42 Найти цитируемый пост)
Как самому сделать такой "синглетон", одни объект, который могут использовать одновременно два моих приложения? 

С помощью статической переменной:

Код

public class MySingleton {
  private static MySingleton instance;
  private MySingleton() { }
  
  public static MySingleton getInstance() {
    if( instance == null ) {
      instance = new MySingleton();
    }
    return instance;
  }
}

Дык оно же будет создавать новый синглтон для каждого приложения, которое пользуется им :о)

А как сделать синглтон, который создан одним приложением и виден из другого приложения, которое в это время запущено одновременно с приложением, которое создало синглтон?
PM MAIL WWW ICQ   Вверх
batigoal
Дата 11.1.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Prol @  11.1.2008,  16:03 Найти цитируемый пост)
Дык оно же будет создавать новый синглтон для каждого приложения, которое пользуется им :о)

Нет, если класс для обоих приложений будет загружен одним и тем же загрузчиком классов.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Prol
Дата 11.1.2008, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(batigoal @ 11.1.2008,  15:06)
Цитата(Prol @  11.1.2008,  16:03 Найти цитируемый пост)
Дык оно же будет создавать новый синглтон для каждого приложения, которое пользуется им :о)

Нет, если класс для обоих приложений будет загружен одним и тем же загрузчиком классов.

Но ведь в одной JVM один загрузчик классов?
То есть если я сейчас запущу приложение c вашим синглтоном, то второе запущенное приложение его увидит и не будет делать new?

Это сообщение отредактировал(а) Prol - 11.1.2008, 15:19
PM MAIL WWW ICQ   Вверх
Maksym
Дата 11.1.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Prol
Ты не создаешь новый экземпляр через new в этом случае, а получешь единственный через MySingleton.getInstance() -- в это суть паттерна: используется только один экземпляр класса, который хранится в статике.
PM MAIL   Вверх
Prol
Дата 11.1.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(Maksym @ 11.1.2008,  15:35)
Prol
Ты не создаешь новый экземпляр через new в этом случае, а получешь единственный через MySingleton.getInstance() -- в это суть паттерна: используется только один экземпляр класса, который хранится в статике.

Извините, я новик, у меня не получается сделать приложение с вашим синглтоном :о(

Код

public static void main(String[] args) {
          final MySingleton Sing1; // вот тут компилер ругается что the local variable Sing1 is never read
          System.out.println("S1 started");
}

PM MAIL WWW ICQ   Вверх
batigoal
Дата 11.1.2008, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Это просто предупреждение, что объявленная переменная, в общем-то, не нужна. Оно не препятствует выполнению программы.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
COVD
Дата 11.1.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Prol, вы явно хотите использовать java не по назначению, т.е. преодолеть существующие защитные механизмы java, используемые для повышения надежности программ. Идея сделать на java как на C - не продуктивна.  
Если работа с данными происходит в отдельном потоке и происходит деление на ноль, то выбрасывается исключение и этот поток может спокойно умереть. Если этот поток не модифицировал данные, то данные будут в сохранности и приложение продолжает функционировать. 

Это сообщение отредактировал(а) COVD - 11.1.2008, 17:50
PM MAIL   Вверх
tux
Дата 11.1.2008, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Цитата(Prol @  11.1.2008,  15:18 Найти цитируемый пост)
Но ведь в одной JVM один загрузчик классов?

Нет, не один.
PM MAIL Skype GTalk Jabber YIM   Вверх
Stampede
Дата 11.1.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 24
Всего: 144



Цитата(Prol @  11.1.2008,  02:42 Найти цитируемый пост)
Запускаю:

prol@corphangar> CorporationApplication -Keeper

Приложение запускается, распределяет память и остаётся в режиме кипера, ничего не делает.

Запускаю вторую копию этого же приложения

prol@corphangar> CorporationApplication -Utilizateur

С помощью механизма shm второе приложение работает над данными первого приложения с помощью функций первого приложения, в том числе делает new и dispose, новые объекты создаются и удаляются в общей shared memory, и первое приложение, которое ничего не делает в sleep'e, при этом владеет всеми новыми объектами.

Так как первое приложение ничего не делает, то оно и не падает. А вот если второе приложение свалится по какой-либо причине, то в первом приложении останутся все данные целыми. :о)


А откуда такая увереность, что приложение-утилизатор, свалившись, не оставит после себя полную абракадабру в приложении-хранителе? Это, я вам скажу, более чем зыбкая посылка.

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


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Prol
Дата 11.1.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(Stampede @ 11.1.2008,  20:42)
А откуда такая увереность, что приложение-утилизатор, свалившись, не оставит после себя полную абракадабру в приложении-хранителе? Это, я вам скажу, более чем зыбкая посылка.

Не оставит, потому что снимать его будет ОС за оперейшен эксепшен или другое подобное.

Точнее, если второе приложение оставило белиберду, то и первое в этом же месте оставило бы точно такую же белиберду :о) Первое и второе приложение совершенно одинаковы. А значит надо править неправильный код приложения.

Но вот в случае исключительных ситуаций, связанных с вводом-выводом, делением на ноль или подобным, данные сохраняют целостность, а ОС убивает виновника, то есть второе приложение, сохранив при этом работающее первое, которое мне присылает смс, я смотрю, почему ОС убила второе приложение, если исправления в коде не требуются, то перезапускаю второе приложение, которое опять подхватывает shared memory, находящуюся в первом приложении и работает :о)



Это сообщение отредактировал(а) Prol - 11.1.2008, 22:29
PM MAIL WWW ICQ   Вверх
intr
  Дата 12.1.2008, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 1
Всего: 2



RMI или ему подобное. Другие варианты извращение...
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
Prol
Дата 12.1.2008, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(intr @ 12.1.2008,  06:27)
RMI или ему подобное. Другие варианты извращение...

Как вы себе представляете работу RMI с тремя миллионами объектов? Сколько будет длиться сериализация/десериализация трёх миллионов объектов?

А у меня уже несколько лет работают реалтайм приложения на С по схеме с шаред мемори. Одно держит методы и данные, а второе использует методы и данные первого приложения прямо в памяти. Когда второе приложение падает, первое продолжает работать, и сохранять данные тысяч пользователей.

Если вы скажете, что в Java такое невозможно, то я вам приведу в пример SAP JVM, которая позволяет шарить объекты прямо в памяти между несколькими JVM.

Это сообщение отредактировал(а) Prol - 12.1.2008, 06:48
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0988 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.