Re[5]: Singleton применительно к апплетам
От: Blazkowicz Россия  
Дата: 30.07.09 11:55
Оценка: 3 (1)
Здравствуйте, Debussy, Вы писали:

D>Не смогли бы вы подробнее написать про стек, как его посмотреть?

Thread.dumpStackTrace()
Надо ещё по процессам посмотреть сколько запущено JVM, потому как в последних версиях апплет можно запускать в разных JVM.
Надо так же дампить имя класслоадера. Может все же дело в плагине и он ошибочно и апплет загружен 2 раза, и разнице в стеке исполнения не будет видно.
Re[3]: Singleton применительно к апплетам
От: Nicht Россия  
Дата: 30.07.09 10:50
Оценка: 2 (1)
Здравствуйте, Debussy, Вы писали:

D>Здравствуйте, Blazkowicz, Вы писали:


B>>Здравствуйте, Debussy, Вы писали:


D>>>p.s. Просьба не предлагать перейти с апплета на JWS

B>>Апплен и JWS уже практически одно и то же.
D>Согласен, но есть небольшое, но очень критичное для меня различие — JWS не дает возможности работать с файловой системой пользователя. Это единственное, ради чего тут используется апплет.

Это как это не дает? Это как раз в аплете шаги в стороны запрещены пока на клиенте секьюрити не настроишь. А Java Web Start как раз с этим ве в порядке. Лично я спокаой пишу клиенту в файлы все что угодно.
Re[5]: Singleton применительно к апплетам
От: Blazkowicz Россия  
Дата: 30.07.09 11:57
Оценка: 2 (1)
Здравствуйте, Debussy, Вы писали:

D>Да, с апплетами это иногда бывает, но критическая секция у меня длится недолго, да еще и идет в конструкторе. Так что подобной проблемы никогда не возникало.

Вот это и есть ошибка. Нельзя привязыватся к конструктору апплета. Плагин имеет право его инстанциировать сколько ему надо раз. Ведь есть специальный метод init
Singleton применительно к апплетам
От: Debussy  
Дата: 30.07.09 08:52
Оценка:
Столкнулся с тем, что апплет на одной странце почему-то запускается два раза вместо одного.
Запуски происходят подряд, с минимальным интервалом, оба экземпляра пытаются обратиться к одним и тем же ресурсам, что влечет за собой ошибки.
В странице апплет встроен только один раз. Ошибка носит плавающий характер.
На англоязычных форумах тоже читал описание такого глюка, но внятного решения не увидел. Приходится придумывать обходной путь

В связи с этим, вопрос — как можно программно ограничить количество экземпляров апплета?
Пока в голову приходит мысли о lock-файле или какой-нибудь встроенной в java реализации Singleton (слышал такое применительно к родному java logging). Общая идея — хранить вне апплета флаг, проверяя и устанавливая который можно будет продолжать работу(для первого экземпляра) или завершать(для последующих).
Посоветуйте, как лучше это сделать?

p.s. Просьба не предлагать перейти с апплета на JWS
Re: Singleton применительно к апплетам
От: Blazkowicz Россия  
Дата: 30.07.09 10:12
Оценка:
Здравствуйте, Debussy, Вы писали:

D>p.s. Просьба не предлагать перейти с апплета на JWS

Апплен и JWS уже практически одно и то же. Не пробовал выяснить почему получаются две экземпяра? Посмотреть, например, стек в методе init, или в дефолтном конструкторе класса?
Re[2]: Singleton применительно к апплетам
От: Debussy  
Дата: 30.07.09 10:43
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Debussy, Вы писали:


D>>p.s. Просьба не предлагать перейти с апплета на JWS

B>Апплен и JWS уже практически одно и то же.
Согласен, но есть небольшое, но очень критичное для меня различие — JWS не дает возможности работать с файловой системой пользователя. Это единственное, ради чего тут используется апплет.

B>Не пробовал выяснить почему получаются две экземпяра? Посмотреть, например, стек в методе init, или в дефолтном конструкторе класса?

А как это посмотреть? Проблема в том, что у меня ошибка пока не появляется, а у клиентов она появляется случайным образом.
Re[3]: Singleton применительно к апплетам
От: Blazkowicz Россия  
Дата: 30.07.09 10:49
Оценка:
Здравствуйте, Debussy, Вы писали:

D>Согласен, но есть небольшое, но очень критичное для меня различие — JWS не дает возможности работать с файловой системой пользователя. Это единственное, ради чего тут используется апплет.

Озадачен. В чем принципиальная разница??? Или у вас просто не получилось?

B>>Не пробовал выяснить почему получаются две экземпяра? Посмотреть, например, стек в методе init, или в дефолтном конструкторе класса?

D>А как это посмотреть? Проблема в том, что у меня ошибка пока не появляется, а у клиентов она появляется случайным образом.
Может у вас оккупируеются какие-то ресурсы типа потоков и потом не уничтожаются в методе destory? И второй экземпляр остается жить после перезегрузки страницы.
Какая ошибка происходит? Вероятно она происходит на каком-то критическом ресурсе? Может его и стоит использовать для разруливания конкурентного доступа?
Re[4]: Singleton применительно к апплетам
От: Debussy  
Дата: 30.07.09 11:15
Оценка:
Здравствуйте, Nicht, Вы писали:

N>Здравствуйте, Debussy, Вы писали:


D>>Здравствуйте, Blazkowicz, Вы писали:


B>>>Здравствуйте, Debussy, Вы писали:


D>>>>p.s. Просьба не предлагать перейти с апплета на JWS

B>>>Апплен и JWS уже практически одно и то же.
D>>Согласен, но есть небольшое, но очень критичное для меня различие — JWS не дает возможности работать с файловой системой пользователя. Это единственное, ради чего тут используется апплет.

N>Это как это не дает? Это как раз в аплете шаги в стороны запрещены пока на клиенте секьюрити не настроишь. А Java Web Start как раз с этим ве в порядке. Лично я спокаой пишу клиенту в файлы все что угодно.


Странно, вроде я даже в спеках вычитывал, что нельзя, но после ваших слов попробую.
Да, второе условие — нужно взаимодействовать с веб-страницей.
Вкратце, это нужно для того, чтобы перед отправкой POST-формы на сервер подписывать ее ключом пользователя (тут и происходит обращение к файлам).
Re[4]: Singleton применительно к апплетам
От: Debussy  
Дата: 30.07.09 11:45
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Debussy, Вы писали:


D>>Согласен, но есть небольшое, но очень критичное для меня различие — JWS не дает возможности работать с файловой системой пользователя. Это единственное, ради чего тут используется апплет.

B>Озадачен. В чем принципиальная разница??? Или у вас просто не получилось?

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

B>>>Не пробовал выяснить почему получаются две экземпяра? Посмотреть, например, стек в методе init, или в дефолтном конструкторе класса?

D>>А как это посмотреть? Проблема в том, что у меня ошибка пока не появляется, а у клиентов она появляется случайным образом.
B>Может у вас оккупируеются какие-то ресурсы типа потоков и потом не уничтожаются в методе destory? И второй экземпляр остается жить после перезегрузки страницы.

Да, с апплетами это иногда бывает, но критическая секция у меня длится недолго, да еще и идет в конструкторе. Так что подобной проблемы никогда не возникало.
Здесь же апплет запускается дважды иногда и на только стартовавшей jvm, на впервые загруженной странице. И оба запуска практически одновременно, потому и до критической секции доходят вместе.


B>Какая ошибка происходит? Вероятно она происходит на каком-то критическом ресурсе? Может его и стоит использовать для разруливания конкурентного доступа?


Ошибка ввода-вывода, IO. Да, именно что на критическом ресурсе, идея хорошая, но использовать ресурс таким образом не получится — особенности его API (не можем узнать, занят ли ресурс или отсутсвует, а на отсуствие уже навешана логика)

Не смогли бы вы подробнее написать про стек, как его посмотреть?
Re[6]: Singleton применительно к апплетам
От: Debussy  
Дата: 31.07.09 08:04
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Debussy, Вы писали:


D>>Да, с апплетами это иногда бывает, но критическая секция у меня длится недолго, да еще и идет в конструкторе. Так что подобной проблемы никогда не возникало.

B>Вот это и есть ошибка. Нельзя привязыватся к конструктору апплета. Плагин имеет право его инстанциировать сколько ему надо раз. Ведь есть специальный метод init

Простите, не было кода под рукой — и я ошибся, конечно же используется метод init
Re[6]: Singleton применительно к апплетам
От: Debussy  
Дата: 31.07.09 08:13
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Debussy, Вы писали:


D>>Не смогли бы вы подробнее написать про стек, как его посмотреть?

B>Thread.dumpStackTrace()
B>Надо ещё по процессам посмотреть сколько запущено JVM, потому как в последних версиях апплет можно запускать в разных JVM.
B>Надо так же дампить имя класслоадера. Может все же дело в плагине и он ошибочно и апплет загружен 2 раза, и разнице в стеке исполнения не будет видно.


Консоль и класслоадер буду дампить, спасибо. Ошибка плавающая, у меня не проявляется, а встречается случайным образом у клиентов, так что дамп будет полезен.
Поскольку установлен флажок "всегда показывать консоль", думаю, можно судить о количестве запущенных jvm по консолям. Консоль одна, и именно в ней видно одновременно выполнение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.