de.willuhn.jameica.services
Class ArchiveService

java.lang.Object
  extended by 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
ArchiveService()
           
 
Method Summary
 java.lang.Class[] depends()
           
 void init(de.willuhn.boot.BootLoader loader, de.willuhn.boot.Bootable caller)
           
 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()

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