Class ArchiveService

java.lang.Object
de.willuhn.jameica.services.ArchiveService
All Implemented Interfaces:
de.willuhn.boot.Bootable

public class ArchiveService extends 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
     
  • Method Summary

    Modifier and Type
    Method
    Description
     
    void
    init(de.willuhn.boot.BootLoader loader, de.willuhn.boot.Bootable caller)
     
    boolean
    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
     

    Methods inherited from class java.lang.Object

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

    • ArchiveService

      public ArchiveService()
  • Method Details

    • depends

      public 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()