Przykładowa implementacja listenera

Jako przykład zostanie przedstawiony prosty listener nasłuchujący na pojawiające się pliki w danym katalogu, wypisujący do logów podstawowe informacje dotyczące tego pliku i następnie kasujący ten plik ;). Listener będzie nasłuchiwał na zakodowanym na sztywno katalogu (który z założenia powinien istnieć). Okres odpytwania katalogu będzie na sztywno ustawiony na 1000 ms. Nie wszystkie sytuacje wyjątkowe są obsłużone (np. sytuacja gdy zadany katalog nie istnieje). Przykład został maksymalnie uproszczony, aby był jak najbardziej czytelny.

package sample.listener;

import java.io.File;
import java.util.Properties;

import org.apache.log4j.Logger;

import palio.Current;
import palio.Instance;
import palio.listeners.PalioListener;


public class SampleListener extends PalioListener {

/** Default path for listening */
private final String DEFAULT_PATH = "/tmp/listener/";

/** Default polling period */
private final long DEFAULT_POLLING_PERIOD = 1000L;

private boolean running = false;

public SampleListener(String name, Instance instance, Properties properties) {
super(name, instance, properties);
start();
}

@Override
public void close() {
running = false;
getLogger().info("Listener is going to be stopped ...");
}

public void start() {
running = true;
Thread thread = new Thread(new Runnable() {

public void run() {
// Setting a Current is required to make possible invoking most methods of jPALIO modules.
Current threadCurrent = new Current(getInstance());
Instance.setCurrent(threadCurrent);

File directory = new File(DEFAULT_PATH);

while (running) {
for (File file : directory.listFiles()) {

getLogger().info(String.format("File %s detected, size: %d bytes", file.getPath(), file.length()));

if (file.delete()) {
getLogger().info("File " + file.getPath() + " deleted");
} else {
getLogger().info("Unable to delete a file: " + file.getPath());
}
}

try {
Thread.sleep(DEFAULT_POLLING_PERIOD);
} catch (InterruptedException ex) {
// Ignore
}

}
getLogger().info("Listener stopped");
}
});

thread.setName("jPALIO - " + instance.getName() + " - " + getClass().getName() + " listener");
thread.setDaemon(true);
thread.start();
getLogger().info("Listener started ...");
}

/**
* Returns a logger for this listener
*/
private Logger getLogger() {
return palio.Logger.getLogger(instance, getClass().getName());
}
}

Przykładowe wpisy do logów:

2010-11-22 22:50:36 INFO  workshop.sample.listener.SampleListener - Listener started ...
2010-11-22 22:51:08 INFO workshop.sample.listener.SampleListener - File /tmp/listener/IMG_4180.JPG detected, size: 3916067 bytes
2010-11-22 22:51:08 INFO workshop.sample.listener.SampleListener - File /tmp/listener/IMG_4180.JPG deleted
2010-11-22 22:51:11 INFO workshop.sample.listener.SampleListener - File /tmp/listener/IMG_4181.JPG detected, size: 3768109 bytes
2010-11-22 22:51:11 INFO workshop.sample.listener.SampleListener - File /tmp/listener/IMG_4181.JPG deleted
2010-11-22 22:51:13 INFO workshop.sample.listener.SampleListener - File /tmp/listener/IMG_4182.JPG detected, size: 4333296 bytes
2010-11-22 22:51:13 INFO workshop.sample.listener.SampleListener - File /tmp/listener/IMG_4182.JPG deleted
2010-11-22 22:51:15 INFO workshop.sample.listener.SampleListener - File /tmp/listener/IMG_4652.JPG detected, size: 4988662 bytes
2010-11-22 22:51:15 INFO workshop.sample.listener.SampleListener - File /tmp/listener/IMG_4652.JPG deleted
2010-11-22 22:51:26 INFO workshop.sample.listener.SampleListener - Listener is going to be stopped ...
2010-11-22 22:51:26 INFO workshop.sample.listener.SampleListener - Listener stopped