Is there a good lightweight framework for java that provides the publish/subscribe pattern?
Some ideal features
Support for generics
Registration of multiple subscribers to a publisher
API primarily interfaces and some useful implementations
purely in-memory, persistence and transaction guarantees not required.
I know about JMS but that is overkill for my need. The publish/subscribed data are the result of scans of a file system, with scan results being fed to another component for processing, which are then processed before being fed to another and so on.
EDIT:
All within the same process. PropertyChangeListener from beans doesn't quite cut it, since it's reporting changes on properties, rather than publishing specific items. I could shoehorn ProprtyChangeListener to work by having a "last published object" property, and so published objects. PropertyChangeListeners don't support generics, and are entrenched in property change semantics, rather than pure publish/subscribe. The java.util Observer/Observable pattern would be good, but Oberver is a concrete class.
解决方案
JMS is as light or heavy as you configure it. We use for example HornetQ in one project with an in memory queue. It is easy to setup, doesn't need any JNDI based configuration and is really easy to use.
I believe that JMS as an API for Message Pub/Sub is as easy as it gets. (And not easier ;)