Синглтоны в случаях Multiple Classloader и VM - PullRequest
3 голосов
/ 29 июля 2011

Как безопасно кодировать Singletons в случае двух или более загрузчиков классов и виртуальных машин. Я вижу эту проблему, объясненную в: http://java.sun.com/developer/technicalArticles/Programming/singletons/

Решения?

Ответы [ 4 ]

3 голосов
/ 29 июля 2011

Если вы хотите поделиться синглтоном между ClassLoaders, у вас есть общий родительский файл, загружающий синглтон, или вы можете сделать так, чтобы каждый ClassLoader явно определял, какие классы Singleton вы хотите использовать для этого Classloader.

2 голосов
/ 29 июля 2011

В статье четко указано, что распределенные приложения должны держаться подальше от Singletons.Какую-то конкретную проблему вы пытаетесь решить здесь?Кроме того, для синглетов, которые содержат истинные константы, которые никогда не изменяются во время выполнения приложения, множественные «экземпляры» вашего «синглтона» не должны представлять проблемы.В других случаях вам лучше внедрить свою конфигурацию (способ внедрения зависимостей) в классы, которые в этом нуждаются.

1 голос
/ 06 марта 2013

Внимание: если компьютер имеет несколько интерфейсов (IP), то один и тот же разъем (8765) может быть связан со всеми из них (поэтому он не настолько надежен). Файл лучше, хотя бывают случаи, когда его тоже можно спрятать (например, смонтировать)

0 голосов
/ 29 июля 2011

1) сетевой сокет выживает на нескольких виртуальных машинах

    Port busy 8765 java.net.BindException: Address already in use

2) поэтому файл

    WARNING: Creating a new instance of CacheManager using the diskStorePath

безопасно кодирует Singletons в случае двух или более загрузчиков классов и виртуальных машин на основе этих ресурсов (если вам действительно нужно придерживаться этого анти-паттерна)

...