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

Когда я узнаю о кластерной среде.

В нескольких средах JVM каждая из них будет иметь свою собственную копию одноэлементного объекта, что может привести к множеству проблем, особенно в кластерной среде, где доступ к ресурсу должен быть ограничен и синхронизирован.

Weblogic имеет концепцию Singleton Service - где только экземпляр работает в кластере, и все клиенты будут искать один и тот же экземпляр.

В моем случае у меня есть сервер Weblogic с кластерной средой, который имеет два управляемых сервера MS1 и MS2. Мое приложение содержит один поток, который отвечает за чтение почты из почтового ящика и размещение этой записи в базе данных. Когда я развернул это приложение на сервере Weblogic.

Поток отвечает за чтение почты и занесение ее в базу данных. На самом деле это не лучшее решение, поскольку в некоторых случаях возникают проблемы, когда два потока MS1 и MS2 читают одну и ту же запись за раз, помещают ее в базу данных и создают повторяющуюся запись. Чтобы решить эту проблему, я реализовал интерфейс SingletonService. Этот интерфейс находится в пакете ниже

weblogic.cluster.singleton.SingletonService

Этот интерфейс содержит два метода, которые необходимо реализовать.

  1. активировать ()
  2. деактивировать ()

Что такое SingletonService?

Одноэлементная служба - это служба, которая может работать только на одном управляемом сервере в кластере одновременно. Weblogic Server позволяет автоматически отслеживать и переносить одноэлементные службы с одного управляемого сервера на другой.

Как это реализовать?

Шаги по реализации и настройке одноэлементной службы.

Шаг 1: - Реализуйте weblogic.cluster.singleton.SingletonService интерфейс.

package org.teliet.singletontest;
import weblogic.cluster.singleton.SingletonService;  
   
 public class MySingletonServiceClass implements 
    SingletonService{
    
    @Override  
    public void activate() {
      System.out.println("This is activate");
       // for testing purpose I put here SOP 
       }
    @Override  
    public void deactivate() {
     System.out.println("This is deactivate");
       // for testing purpose I put here SOP   
    }
}

Шаг 2: - Добавьте конфигурацию в weblogic-application.xml

откройте свой .ear → META-INF → weblogic-application.xml и добавьте ниже конфигурации

<weblogic-application>
...
<singleton-service>
 <class-name> org.teliet.singletontest.MySingletonServiceClass
 </class-name>
      <name>singletonserviceclass</name>
</singleton-service>
...
</weblogic-application>

Примечание. Элементы ‹class-name› и ‹name› являются обязательными.

Шаг 3: - Теперь настройте поведение миграции SingletonService.

Откройте консоль административного портала Weblogic, которая выглядит следующим образом

Теперь нам нужно настроить кластер для Singleton Service. В Консоли администрирования WebLogic перейдите к своему кластеру, а затем на вкладку Миграция. Вам нужно будет каким-то образом настроить миграцию, я использовал Консенсус, чтобы избежать использования базы данных для этого примера, но ваша производственная модель может иметь совершенно другие потребности.

Теперь вам нужно перейти на вкладку «Singleton Services» кластера и создать новую Singleton Service.

Вы захотите использовать полное имя класса для синглтона:

Теперь повторно разверните приложение. Чтобы протестировать изменения в Singleton Services, перейдите к

Clusters → Cluster1 → SingletonServicesName → затем щелкните вкладку Control

Теперь предпочтительным сервером является MS1, когда MS1 не работает, он автоматически переносится на MS2. Вы также можете сделать то же самое, просто используя журналы. В журналах MS1-studout вы получите эти журналы «This is activate», в MS2 ничего не будет отображаться. Если условие обратное, вы найдете журналы в MS2-studout.

Примеры использования службы Singleton

  1. Таймер задачи или планировщик заданий в кластере.
  2. Синглтон-сервис для обработки других некластеризованных сервисов.
  3. Единый источник свойств для кластерных приложений.

Это просто идея. Копайте глубже, найдите больше и дайте мне знать.

Если вам понравилась эта статья, не забудьте хлопать в ладоши.

Еще рассказы.

Канал Youtube: -

Https://www.youtube.com/channel/UCiTaHm1AYqMS4F4L9zyO7qA

Давайте подключимся к Stackoverflow, LinkedIn, Facebook и Twitter.