Package de.willuhn.jameica.services
Class ArchiveService
- java.lang.Object
-
- de.willuhn.jameica.services.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()
-
-
-
Method Detail
-
depends
public java.lang.Class[] depends()
- Specified by:
depends
in interfacede.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 interfacede.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 interfacede.willuhn.boot.Bootable
- See Also:
Bootable.shutdown()
-
-