Announcement

Collapse
No announcement yet.

Server/cluster-wide singleton

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Server/cluster-wide singleton

    Hi,

    ich habe zwei Webanwendungen, die auf dem selben Server laufen. Sie müssen miteinander Daten über ein singleton-Object austauschen, das in ihrer gemeinsamen jar liegt. Aber das klappt nicht. Statt auf das selben Object zu zugreifen, benutzen sie unterschiedliche Objekte. Geht das überhaupt? Wenn ja, wie? Oder bin ich beim falschen Forum?

    Vielen Dank im Voraus.
    Beste Grüße,
    -sipungora

  • #2
    Singleton innerhalb ein und derselben JVM

    Hi Sipungora,

    echte Singletons gibt es nur innerhalb ein und der selben JVM. Ein Clusterweites Singleton wirst Du also nicht hinbekommen. Nachdem Deine beiden Anwendungen auf dem selben Server laufen, vermute ich mal, dass sie auch in der selben JVM laufen. Der Benutzung von Singletons steht also nichts im Wege. Obwohl der Ansatz aus anderen Gründen fragwürdig ist, aber egal...

    Mit den in Java 5 eingeführten Enums kannst du Singletons am besten implementieren, indem Du das Enum-Singleton-Pattern verwendest. Hier ein Codebeispiel:
    Code:
    public enum MySingleton {
      /**
       * Die einzige Enum-Konstante repräsentiert das Singleton.
       **/
       INSTANCE;
    
       ...Felder, Methoden ...
    }
    Wenn Du in Clientcode auf MySingleton.INSTANCE zugreifst, kannst Du sicher sein, immer die selbe und einzige Instanz zu erwischen.
    Gruß ngomo
    Zuletzt editiert von ngomo; 06.05.2011, 14:04.
    http://www.winfonet.eu

    Comment


    • #3
      Originally posted by ngomo View Post
      der Ansatz aus anderen Gründen fragwürdig ist, aber egal...
      Und wie soll man es richtig machen? Über Web-Services oder Servlets oder RMI? Ich hab gedacht, dass der Weg mit dem Singleton einfacher ist.

      Originally posted by ngomo View Post

      echte Singletons gibt es nur innerhalb ein und der selben JVM. Ein Clusterweites Singleton wirst Du also nicht hinbekommen. Nachdem Deine beiden Anwendungen auf dem selben Server laufen, vermute ich mal, dass sie auch in der selben JVM laufen. Der Benutzung von Singletons steht also nichts im Wege. Obwohl der Ansatz aus anderen Gründen fragwürdig ist, aber egal...

      Mit den in Java 5 eingeführten Enums kannst du Singletons am besten implementieren, indem Du das Enum-Singleton-Pattern verwendest. Hier ein Codebeispiel:
      Code:
      public enum MySingleton {
        /**
         * Die einzige Enum-Konstante repräsentiert das Singleton.
         **/
         INSTANCE;
      
         ...Felder, Methoden ...
      }
      Wenn Du in Clientcode auf MySingleton.INSTANCE zugreifst, kannst Du sicher sein, immer die selbe und einzige Instanz zu erwischen.
      Gruß ngomo
      Und wieso kann ich solch ein singleton nicht benutzen?

      1 protected static Controller controller;
      2
      3 public static Controller getInstance() {
      4 if(controller == null) {
      5 controller = new Controller();
      6 }
      7 return controller;
      8 }

      Comment


      • #4
        Http oder Context sharing

        Und wie soll man es richtig machen? Über Web-Services oder Servlets oder RMI? Ich hab gedacht, dass der Weg mit dem Singleton einfacher ist.
        Webanwendungen tauschen Daten grundsätzlich über http aus. Bei Java-Webanwendungen, die auf dem selben Server laufen, kann man die Abkürzung "Context Sharing" benutzen, indem man auf der jeweils anderen Anwendung "ServletContext.getContext()" aufruft, und sich dann die Daten aus dem ServletContext der anderen Anwendung holt. Dafür muss der Server/Context so konfiguriert sein, dass das erlaubt ist. Beim Tomcat geht das mit dem Attribut "crossContext" des Context Elements.
        Und wieso kann ich solch ein singleton nicht benutzen?
        Probier mal das Pattern aus, dass ich gepostet habe und nicht das mit static Feldern.
        http://www.winfonet.eu

        Comment

        Working...
        X