Что такое одиночный класс? Может ли это помочь мне запустить один экземпляр класса для двух связанных служб?
Это может показаться сложным, но я все равно спрошу:
Я использую сервис A, который использует класс X Я хочу запустить другую службу B, которая использует классы A помимо новых классов.
Служба А уже работает. Я делаю горячее развертывание Сервиса Б.
Вот реальный вопрос - будет ли Служба B использовать тот же экземпляр класса X или отдельный экземпляр. Как класс синглтона может помочь мне здесь?
2 ответа
Каждая служба будет работать в своем собственном пространстве процессов операционной системы (ОС), и каждое пространство процессов имеет свои собственные экземпляры классов. Класс "синглтон" обычно кодируется с использованием статических полей в классе, который будет локальным по отношению к пространству процесса, в котором выполнялся код, поэтому нет, они не будут совместно использовать синглтоны. Каждый получит свой экземпляр.
Однако вы можете делать то, что пытаетесь сделать, используя какой-то внешний процесс совместной синхронизации (например, выставляя синглтон поверх того, что эквивалентно java.Net Remoting (или WCF) - конечной точке, доступной для сети, которая закодирована для использования Singleton, и обе ваши службы "подключаются" и используют этот удаленно доступный Singleton)
Я не знаком с деталями того, как работают веб-сервисы Java, но если они оба работают в одной и той же виртуальной машине, я думаю, что классы будут общими для всех приложений в виртуальной машине, и поэтому статические поля будут общими. Поскольку шаблон Singleton обычно выполняется путем присоединения одного экземпляра к статическому члену, он будет общим.
Это основано на: Чистые переговоры по коду - "Глобальное государство и одиночные игры"
Вы должны быть в состоянии проверить это, написав два простых веб-сервиса. Один, который делает что-то с синглтоном, например, устанавливает флаг, а другой проверяет это.