Glassfish / Tomcat Java Server класс загрузки один раз - PullRequest
0 голосов
/ 25 апреля 2011

Я использую Glassfish v2, но у меня была такая же проблема в tomcat.

После запуска сервера я вижу:

sudo jmap -histo:live 14127 | grep KVStore
6222:             1             24  xxx.xxx.KVStore

Через некоторое время использования я получаю:

sudo jmap -histo:live 14127 | grep KVStore
7240:             1             24  xxx.xxx.KVStore
7360:             1             24  xxx.xxx.KVStore

Хотя я предполагаю, что это как-то связано с масштабированием Glassfish, это действительно проблематично, потому что я использую KVStore как класс хранения в памяти.

Этоодноэлементный класс со статической хеш-таблицей и методами получения и установки:

class KVStore
    public static KVStore kvstore;
    public Hashtable hash;

Теперь проблема в том, что с одним классом.Когда я звоню в магазин и получаю сервлет, я получаю объект просто отлично.Но с двумя классами или KVStore сервлет чередуется между двумя и никогда не возвращается правильно, когда вызовы выполняются последовательно.

Теперь мне действительно нужно сохранить объект в памяти.Как заставить этот класс загружаться только один раз?Или создать глобально доступную хеш-таблицу?

И последнее, я развертываю боевой файл с варпблом в jruby.Если нет никакого реального способа, которым это могло бы случиться, дайте мне знать, и я вместо этого рассмотрю это.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

Хорошо, фм.Скорее всего, вы хотите это:

config.webxml.jruby.min.runtimes = 1
config.webxml.jruby.max.runtimes = 1

в вашем warble.rb и назовите это хорошим.

0 голосов
/ 26 апреля 2011

Так что это не полный ответ, потому что у меня все еще есть ошибки:

https://stackoverflow.com/questions/5785531/jruby-typeerror-assigning-non-exception-to

Но используя jmap, я сделал один синглтон.

Как создать настоящий синглтон в Java?

в частности:

http://surguy.net/articles/communication-across-classloaders.xml

что взломать.

...