Class ArchiveService

  • All Implemented Interfaces:
    de.willuhn.boot.Bootable

    public class ArchiveService
    extends java.lang.Object
    implements de.willuhn.boot.Bootable
    Ein Archiv-Service, der Daten an eine andere Jameica-Instanz senden kann, auf der das Plugin "jameica.messaging" installiert ist. Da diese andere Jameica-Instanz via Multicast-Lookup automatisch im LAN gefunden wird, kann man auf diese Weise einen konfigurationsfreien Archiv-Server aufsetzen und Dokumente einfach via QueryMessage an den Server senden. Falls auf dem lokalen System bereits das Plugin "jameica.messaging" installiert ist, schaltet Jameica automatisch in lokale Zustellung um. In dem Fall wird nicht im LAN nach einem Archiv-Server gesucht - stattdessen werden die Dateien/Nachrichten an die lokale Instanz zur Archivierung uebergeben. Beispielcode kann so aussehen:
     
     // Laedt den Archiv-Service on demand
     // WICHTIG: Dieser Aufruf muss zumindest einmal pro Jameica-Sitzung
     // stattfinden, bevor Messages an den Archiv-Server verschickt werden.
     // Andernfalls wird der Archiv-Service nicht initialisiert und die
     // Nachrichten werden nicht zugestellt.
     
     Application.getBootLoader().getBootable(ArchiveService.class);
    
     
     // 1. Neue Datei zum Archiv hinzufuegen. Die Nachricht wird synchron geschickt,
     //    damit wir die vergebene UUID erhalten. Anhand dieser UUID koennen wir die
     //    archivierte Datei jederzeit wieder abrufen.
     //    "test.remote" ist hier der Name eines Channels. Mit dem laesst sich
     //    das Archiv auf dem Server hierarich strukturieren.
     //
     //    Die Nutzdaten koennen in Form eines byte[] (Byte-Array) oder als InputStream
     //    uebergeben werden. Sind die Nutzdaten von keinem dieser beiden Typen,
     //    wird der Wert von data.toString().getBytes() gesendet.
     
     QueryMessage qm = new QueryMessage("test.remote","Das ist der Dateiinhalt".getBytes());
     Application.getMessagingFactory().getMessagingQueue("jameica.messaging.put").sendSyncMessage(qm);
     String uuid = qm.getData().toString();
     
      
     // 2. Die Datei mit der genannten UUID wieder abrufen. Der Dateiinhalt wird
     //    anschliessend in qm.getData() als byte[] (Byte-Array) bereitgestellt
    
     qm = new QueryMessage(uuid,null);
     Application.getMessagingFactory().getMessagingQueue("jameica.messaging.get").sendSyncMessage(qm);
     byte[] data = (byte[]) qm.getData();
    
     
     // 3. Die Datei noch mit zusaetzlichen Properties versehen
     
     Map map = new HashMap();
     map.put("filename","test.html");
     qm = new QueryMessage(uuid,map);
     Application.getMessagingFactory().getMessagingQueue("jameica.messaging.putmeta").sendMessage(qm);
     
     
     // 4. Die Properties wieder abfragen
     
     qm = new QueryMessage(uuid,null);
     Application.getMessagingFactory().getMessagingQueue("jameica.messaging.getmeta").sendSyncMessage(qm);
     map = (Map) qm.getData();
     
     
     // 5. Die naechste Datei aus einem genannten Channel abrufen. Mit der "next"-
     //    Funktion kann man eine Rechner-uebergreifende Message-Queue bereitstellen.
     //    Die Funktion liefert die naechste verfuegbare Datei aus dem Channel
     //    (nach dem FIFO-Prinzip) und loescht(!) sie nach der Uebertragung automatisch
     //    vom Server. Auf diese Weise kann ein Rechner regelmaessig Messages an
     //    den Server uebergeben, waehrend ein anderer Rechner sie abarbeitet.
     
     qm = new QueryMessage("test.remote",null);
     Application.getMessagingFactory().getMessagingQueue("jameica.messaging.next").sendSyncMessage(qm);
     byte[] data = (byte[]) qm.getData();
     
     
     // 6. Eine Datei mit der genannten UUID auf dem Server loeschen.
     
      qm = new QueryMessage(uuid,null);
      Application.getMessagingFactory().getMessagingQueue("jameica.messaging.del").sendSyncMessage(qm);
     
    • Constructor Summary

      Constructors 
      Constructor Description
      ArchiveService()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.Class[] depends()  
      void init​(de.willuhn.boot.BootLoader loader, de.willuhn.boot.Bootable caller)  
      boolean isEnabled()
      Liefert true, wenn der Archive-Service verfügbar ist, weil entweder lokal das Plugin jameica.messaging installiert ist oder aber im LAN eine Instanz per Multicast-Lookup gefunden wurde.
      void shutdown()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • ArchiveService

        public ArchiveService()
    • Method Detail

      • depends

        public java.lang.Class[] depends()
        Specified by:
        depends in interface de.willuhn.boot.Bootable
        See Also:
        Bootable.depends()
      • isEnabled

        public boolean isEnabled()
        Liefert true, wenn der Archive-Service verfügbar ist, weil entweder lokal das Plugin jameica.messaging installiert ist oder aber im LAN eine Instanz per Multicast-Lookup gefunden wurde.
        Returns:
        true, wenn der Archive-Service verfügbar ist.
      • init

        public void init​(de.willuhn.boot.BootLoader loader,
                         de.willuhn.boot.Bootable caller)
                  throws de.willuhn.boot.SkipServiceException
        Specified by:
        init in interface de.willuhn.boot.Bootable
        Throws:
        de.willuhn.boot.SkipServiceException
        See Also:
        Bootable.init(de.willuhn.boot.BootLoader, de.willuhn.boot.Bootable)
      • shutdown

        public void shutdown()
        Specified by:
        shutdown in interface de.willuhn.boot.Bootable
        See Also:
        Bootable.shutdown()