Title: Persistence
1Persistence Bean Properties
- Properties in Beans
- Accessors Mutators
- Indexed Bound properties
- Constrained properties
- Examples
- Persistence in JavaBeans
- Java Object Serialization
- The java.io.Serializable Interface
- Versioning
- Validating Objects
- The java.io.Externalizable Interface
2What is a Property?
- Named attributes / characteristics that define
the behavior state of the object (bean) - How is it different from a variable?
Bean
Bean
Properties
Bean actions tied to properties
3Design Patterns (coding convention)
- Why?
- Accessors
- function to get value of a variable, no params.
- ltproperty typegt ltproperty namegt
- ltproperty typegt getltproperty namegt( )
- Example
- public class Temperature
- protected double currentTemperature 25
- public double getCurrentTemperature()
- return currentTemperature
-
-
- public boolean isltPropertyNamegt( )
4Mutators
- Functions that change the value of a property
- Takes parameters
- Design pattern
- public void setltproperty namegt(ltproperty
typegt value) - Example
- public class Temperature
- protected double currentTemperature 25
- public double setCurrentTemperature(double
cTemp) - currentTemperature cTemp
-
-
5Indexed Bound properties
- Design pattern indexed property
- public ltPropertyTypegt getltPropertyNamegt( )
- public void setltPropertyNamegt (
ltPropertyTypegt value ) - public ltPropertyTypegt getltPropertyNamegt (int
index) - public void setltPropertyNamegt (int index,
ltPropertyTypegt value) - (Hint java.lang.ArrayIndexOutOfBoundsException
should be thrown !) - Bound properties support change notifications
- PropertyChangeListener PropertyChangeEvent
6Bound properties
Notifying a listener about a change in property
addPropertyChangeListener removePropertyChangeList
ener
Bean 1
Property Owner
(producer)
Property 1 Changed
Property 2 Changed
Property n Changed
PropertyChangeEvent
PropertyChangeEvent
PropertyChangeEvent
propertyChange( )
PropertyChangeListener
Bean 2
(consumer)
7java.beans.PropertyChangeEvent
- Constructor
- public PropertyChangeEvent (Object sourceBean,
String propertyName, Object oldValue, Object
newValue ) - Methods
- public Object getNewValue ( )
- public Object getOldValue ( )
- public String getPropertyName( )
- public Object getPropagationId ( )
- public Object setPropagationId ( Object newId )
8java.beans.PropertyChangeSupport utility class
Listener
Bean
Properties
Listener
Property Support
Listener
- public PropertyChangeSupport ( Object sourceBean
) - public synchronized void addPropertyChangeListener
(PropertyChangeListener newListener ) - public synchronized void addPropertyChangeListener
(PropertyChangeListener existingListener ) - public void firePropertyChange ( String
propertyName, Object oldValue, Object newValue )
9Constrained Properties
Change rejected
setProperty( )
PropertyVetoException
vetoableChange( )
Change rejected
VetoableChangeListeners
- VetoableChangeListener
- Public abstract void vetoableChange(
PropertyChangeEvent vetoablePropertyEvent ) - throws PropertyVetoException
- PropertyVetoException
- public PropertyVetoException (String
reasonForVeto, PropertyChangeEvent eventVetoed ) - VetoableChangeSupport
10Persistence!
Save
Restore
- Object Serialization java.io package
- java.io.FileInputStream java.io.FileOutputStream
- Java.io.ObjectInputStream java.io.ObjectOutputSt
ream
Object Stream source and target may vary
11An example
- //save a String and double to the stream
- String str Sample
- double d 3.14
- FileOutputStream fos new FileOutputStream
(Beans.ser) - ObjectOutputStream oos new ObjectOutputStream
(fos) - oos.writeObject (str)
- oos.writeObject (d)
- oos.flush()
- // restore the String and double
- FileInputStream fis new
FileInputStream (Beans.ser) - ObjectInputStream ois new
ObjectInputStream (fis) - String str (String) ois.readObject()
- double d s.readDouble()
12java.io.Serializable interface
- No methods
- Just a marker, indicating class is serializable
- Object / Class tree traversed to serialize
- java.io.NotSerializableException thrown, if
unserializable member found - Static and Transient members not serialized
- import java.io. Saver.java
- import java.awt.
- public class Saver
- Saver()
- Button b new Button("Bean Button")
- b.setFont(new Font("System", Font.BOLD, 20))
- try
- FileOutputStream f new FileOutputStream
("Saver.ser") - ObjectOutputStream o new ObjectOutputStream
(f) - o.writeObject(b)
- o.flush()
- catch (Exception e) System.out.println(e)
-
13Reader.java
//ltapplet code"Reader" height100
width200gtlt/appletgt import java.applet. import
java.io. import java.awt. public class
Reader extends Applet public void init()
try FileInputStream f new
FileInputStream ("Saver.ser") ObjectInputStream
o new ObjectInputStream (f) Button b
(Button)o.readObject() add(b)
catch (Exception e) System.out.println(e)
14Versioning
- inevitable tendency for an object to evolve over
time and gain new functionality - New version (vs.) old version conflict
- Compatible changes
- Do not render serialized data unusable by older
class - ? Adding new methods
- ? Changing the base class
- java.io.InvalidClassException thrown
- serialver ltclass namegt - generates a SUID
(Stream Unique ID ) - E.g., gt serialver Reader
- Reader static final long serialVersionUID
463333450398306235L
15java.io.Externalizable interface
- How is it different from Serializable interface?
- writeExternal ( ) and readExternal ( )
- Class hierarchy not traversed during
serialization - Versioning responsibility of the object
- Instantiating Serialized Objects
- the instantiate( ) method in java.beans.Beans
(static) - 2 parameters class loader, beans fully
qualified name - If 1st parameter null -gt uses default class
loader - Instantiate() looks for a pickled bean, if
not found uses new to create an instance - Requires that the bean have constructor with no
params.
16References
- Developing JavaBeans Robert Englander
- ( OReilly publications )
- JavaBeans Developers Resource Prashant
Sridharan ( Prentice Hall ) - Presenting JavaBeans Michael Morrison
- (MCP , Sams publishing )
- JavaBeans Developer's Guide Piroz Mohseni
- - ( IDG Books worldwide )
- http//java.sun.com/products/javabeans
- Questions ?!!