2016-10-14 3 views
0

Теперь я немного смущен, у меня есть 4 java-кодированных баночки, которые должны делиться одним и тем же экземпляром класса над ними. Я реализовал «Реализация синглтона Билла Пьюга» в своем коде. Проблема в том, что я запускаю эти банки, они показывают, что у них есть другой экземпляр класса singleton. Банки, которые запускаются на одной машине, имеют свою собственную JVM, загруженную или что? ниже - это то, что я реализовал.Невозможно передать экземпляр singleton в нескольких банках, запущенных на одной машине

public class MyProducer implements ProducerInterface{ 

    private static KafkaProducer<String, byte[]> producer; // this variable should be shared among all jars..... 

    private MyProducer() { 
     logger.warn("Producer is called now........."); 
     setProducerConfigurations(); 

    } 

    public static Producer getInstance(){ 

     return SingletonProducer.INSTANCE; 
    } 

    private static class SingletonProducer{ 
     private static final MyProducer INSTANCE = new MyProducer(); 
    } 
} 

Теперь классы, которые используют есть такой код:

public class MyProcessThread extends ProcessThread { 
    public static ProducerInterface producer; 

    @Override 
    public void run() { 


      if(producer==null){ 

       producer= MyProducer .getInstance(); 
      } 
    } 
} 
+0

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

ответ

1

Если вы работаете четыре баночки с использованием четырех различных команд Java, то эта установка будет четыре различных виртуальных машин Java (JVM) в вашем machine: singleton уникален в каждой JVM (без учета установки загрузчика классов, которая может усложнить тему).

+0

Да, я использую java -jar для запуска каждой банки. если это так, то какой лучший подход сейчас. как я могу их разделить, OSGI не может быть вариантом в нашем случае, так как вначале возникло множество проблем с разрешением библиотек. – usman

+0

Это действительно зависит от вашего варианта использования; возможно ли, чтобы вы выполнили одну команду java со всеми 4 баночками в своем пути к классам? –

+0

, что вы имеете в виду, пожалуйста, уточните или укажите пример. – usman

0

Эти 4 банки все пригодны для использования банками, и все они имеют основной метод.

Если вы хотите использовать синглтон, вы должны запускать их в одной JVM. Напишите обертку main, называя сеть каждой банки. При необходимости в отдельных потоках.