Serializing Event Listeners

Event-source objects keep references to their target event listeners, either directly or indirectly through a support object. It’s very important to recognize that these listeners may not be serializable. For instance, if you keep a Vector of event listeners, an attempt will be made to serialize the listeners when the Vector is serialized. One possible solution is to mark the collection of event listeners as transient. But we certainly don’t want to ignore the listeners, as some or all of them may very well be serializable. The best we can do is to serialize those listeners that can be serialized, and skip the others. Let’s look at a simple example class called SimpleTemperature that fires a TemperatureChangeEvent to its registered listeners. References to those listeners are kept in a Vector called listeners. Since we don’t know if the elements of listeners are serializable, we mark listeners as transient. We won’t actually be serializing listeners at all, only those elements of it that are serializable. We really don’t even need to construct the Vector until an event listener is added, so we won’t create it until it’s needed. The code illustrating this is next.

public class SimpleTemperature { // collection of temperature change listeners protected transient Vector listeners = null; public synchronized void addTemperatureChangeListener(TemperatureChangeListener l) { // if the vector doesn't exist yet, create it now if (listeners == null) { listeners ...

Get Developing Java Beans now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.