In the middle of refactoring to a single ExpirationManager implementation with multiple ExpirationBlockStore implementations that only deal with storage/retrieval of blocks of expirations at a time. Also, adding the notion of an Expiration clock source, which can allow driving expiration triggers via JEE @Schedule, java.util.Timer, or other implementation.
Switch to main (default) expiration manager, based around the idea of loaded blocks of expirations that are grouped by expiration date, using 5-minute blocks, then implementing storage for these blocks via storage drivers. Currently working/tested are in-memory and flat-file drivers. Removing the filter module, as this is trivial to implement in a consuming app, and this implementation is too simplistic for most applications anyway.
fix NPE
use weft runnable abstract classes for timer threads, and provide caching and burst-writes for flat-file block store (this is important when many things are timed to expire at the same time, and the block file can get very large...adding a lot of single new entries results in a lot of I/O without caching).