Introduction to Java Beans

eyelashesnectarineSoftware and s/w Development

Nov 3, 2013 (3 years and 7 months ago)

54 views

Introduction to Java Beans

by Anders Børjesson

Introduction to JavaBeans

2

JavaBeans components


JavaBeans are the components in the
Java environment


Many classes in J2SE are JavaBeans


Like the Java Swing classes

Introduction to JavaBeans

3

Characteristics


Visibility


Some JavaBeans are visual


Buttons, TextFields, etc.


Some JavaBeans are “invisible”


Model components (worker classes)


Size (granularity)


Some JavaBeans are small (in terms of features)


Buttons, TextFields, etc.


Some JavaBeans are big (in terms of features)


SMTP bean, entire applications

Introduction to JavaBeans

4

Requirements for JavaBeans
classes


Must have a no
-
arg (no parameters) constructor


More constructors are allowed


Remember: If you add a constructor with parameters
then the
default

no
-
arg constructor is gone.


Must implements java.io.Serializable


Data should not be public


Data should be accesses via get and set methods


Should be thread safe


Use
synchronized

carefully

Introduction to JavaBeans

5

Non
-
requirements for JavaBeans


An applet must extend java.lang.Applet


A servlet must extend javax.servlet.Servlet


A thread must implement
java.lang.Runnable


Beans does not need to extend or
implement anything special


Except for java.io.Serializable


Which is only a marker interface

Introduction to JavaBeans

6

JavaBeans terms


Properties


To be read or set by other objects


Get and set methods


Methods


To be called by other objects


Ordinary Java methods


Events


Sent to other objects when something happens to the
bean object


Like a property with a new value


This is the interesting part!

Introduction to JavaBeans

7

Access levels


3 access levels


Read
-
only


Make only a
get

method


Write
-
only


Make only a
set

method


Quite rare


Read / write


Make
get

and
set

methods


Most common

Introduction to JavaBeans

8

Different kinds of properties


Different kinds of properties


Simple or indexed (array) properties


Bound properties


Event
after

a new value is set on the property


To update other components (e.g. visual
components)


Constrained properties


Event
before

a new value is set on the property


To check if the new value is legal according to the
current business rules


Introduction to JavaBeans

9

Simple properties


Represents a single value


A simple property has


1 name


1 type


Primitive data type

or


Class based data type


Example: size


Name:
size

Type:
int


public void set
Size
(int
size
)


public
int

get
Size
()


AccountSimple.java

Introduction to JavaBeans

10

Example bean: JButton


Some properties of javax.swing.JButton


Text: setText(String), getText()


Font: setFont(Font), getFont()


Icon: setIcon(Icon), getIcon()


Enabled: setEnabled(boolean),
is
Enabled()


Properties of type boolean has special naming
conventions


setXx, isXx

Introduction to JavaBeans

11

Programming JavaBeans


JavaBeans can be programmed using


Ordinary text editors


TextPad, even Notepad


Builder tools


NetBeans, Eclipse, JBuilder, etc.


Builder tools often have special features that
makes programming JavaBeans easier.

Introduction to JavaBeans

12

Exercise: Car bean


You are supposed to program parts of a
system for car registration


Program a Car bean


Properties: Registration number, color, etc.


Methods:
toString
, equals


Constructors: No
-
arg

constructor + maybe other
constructors


Implement Serializable


Thread safety


Make a JUnit test to test the Car bean

Introduction to JavaBeans

13

Indexed properties


Represents an array of values


Example: Property: address Type: Address


Public void setAddress(int index, Address addr)


Public Address getAddress(int index)



Bulk operations:


Public void setAddresses(Address[] addr)


Public Address[] getAddresses()


AccountIndexedOwner.java

Introduction to JavaBeans

14

Exercise: Owner bean


Additional classes for the car registration
system


Program a (car) owner bean


Simple properties: Name, address, etc.


Indexed property: Car


One owner may have several cars


The type of this property is Car (from the previous
exercise),
not

String.


Make a JUnit test to test the Owner and Car
beans.

Introduction to JavaBeans

15

Bound properties


Sends an event to another object
after

the
property is assigned a new value.


The other object is sometimes called:
Observer, listener, etc.


The other object may react on the event


Update its own state


Content of an event


propertyName, oldValue, newValue, source

Introduction to JavaBeans

16

Examples


AccountBound.java


ScreenLogListener.java


AccountBoundApp.java

Introduction to JavaBeans

17

Observer pattern

Account
+
addPropertyChangeListener
(
l
:
PropertyChangeListener
)
+
removePropertyChangeListener
(
l
:
PropertyChangeListener
)
#
pcs
:
PropertyChangeSupport
«Interface»
PropertyChangeListener
+
propertyChange
(
evt
:
PropertyChangeEvent
)
0
..
n
0
..
n
MyPropertyChangeListener
+
propertyChange
(
evt
:
PropertyChangeEvent
)
c
Introduction to JavaBeans

18

Sequence diagram: Firing a
property change event

setBalance
firePropertyChange
:
Account
:
PropertyChangeSupport
:
PropertyChangeListener
propertyChange
:
PropertyChangeListener
propertyChange
Introduction to JavaBeans

19

Sequence diagram: Adding a
property change listener to a bean

:
PropertyChangeListener
:
Account
:
PropertyChangeSupport
addPropertyChangeListener
(
this
)
addPropertyChangeListener
(...)
Introduction to JavaBeans

20

Classes and interfaces


Package java.beans


Class PropertyChangeEvent


extends EventObject


Interface PropetyChangeListener


Extends EventListener


Class
PropertyChangeSupport


Helps you to make bound properties



Introduction to JavaBeans

21

PropertyChangeListener


Interface PropertyChangeListener extends
EventListener


EventListener is a marker interface


No methods to implement


PropertyChangeListener methods


void propertyChange(
PropertyChangeEvent

evt)


Introduction to JavaBeans

22

PropertyChangeEvent


After changing the value of a property


firePropertyChange(propertyChangeName, oldValue,
newValue)


Listener called


propertyChange(PropertyChangeEvent ev)


PropertyChangeEvent methods:


String getPropertyName()


Object getOldValue()


Object getNewValue()


Object getSource()

Introduction to JavaBeans

23

PropertyChangeSupport


Helps you to make bound properties


Constructor


PropertyChangeSupport(Object sourceBean)


Some methods


addPropertyChangeListener(PropertyChangeListener listener)


removePropertyChangeListener(PropertyChangeListener

listener)


addPropertyChangeListener(String

propertyName,
PropertyChangeListener

listener)


removePropertyChangeListener(String

propertyName,
PropertyChangeListener

listener)


firePropertyChange(String

propertyName, Object

oldValue,
Object

newValue)


firePropertyChange(String

propertyName, int

oldValue,
int

newValue)

Introduction to JavaBeans

24

Exercises: Car bean with bound
properties


Program

a car bean with bound properties


Don’t try to change the Car from the previous exercise.
Make a new class with a different name.


Program

a
PropertyChangeListener


LogListener

implements
PropertyChangeListener


Every time a property changes the listener writes to the
screen the data in the
propertyChangeEvent


Source, property name, old value, new value.


Make a Main to try the new Car bean with a
propertyChangeListener
.


Make
a JUnit test to test the bound properties.


Take a look at the test in my
BeanBank

example before you try to
make your own test.


Extra (if you have time): Make a more general log listener that
writes to a general stream
.

Introduction to JavaBeans

25

Event loops


Problem


2 beans send propertyChangeEvents to each other


Example: User interface objects events a model object, and
vice versa


The 2 beans might event each other forever.


Solution


Check if the new value is really a new value


i.e. newValue != oldValue


PropertyChangeSupport.firePropertyChange() does the
checking

Introduction to JavaBeans

26

Example bean: JButton


Javax.swing.JButton is a bean


Does not use ProperChangeEvent, etc.


addActionListener(ActionListener l)


Listens for button presses


addChangeListener(ChangeListener l)


Listens for changes in the button’s state


Size, font, text, etc.

Introduction to JavaBeans

27

Constrained properties


A bean object asks one (or more) observers if an
update of a property is legal


Observer may throw
PropertyVetoException


Example:
account.setBalance
(
-
100)


A property is often bound
and

constrained


Used to implement pluggable
business rules


Examples


AccountConstrained.java


MinimumBalanceChecker.java


MaximumWithdrawChecker.java


AccountConstrainedTest.java


AccountFrame.java

+
AccountGuiApp.java

Introduction to JavaBeans

28

Exercise: Car with constrained
properties


Program a car bean with constrained properties


You may either change your “old” car bean or make a new car bean.


Program a few VetoableChangeListeners


ColorChecker


Checks if a color is illegal


Pink, orange, etc. are considered illegal colors of a car


RegistrationNumberChecker


Checks if the registration number is legal


A proper registration number must have the structure AB12345, i.e. 2 letter
followed by 5 digits.


Make a JUnit test to test the Car bean with the new listeners.


Extra (if you have time)


Program a configurable ColorChecker as a bean +
VetoableChangeListener


Illegal colors is an indexed property

Introduction to JavaBeans

29

Dynamic vs. static characteristics
on properties


Static characteristic


Follows the object for its life time.


Dynamic characteristic


Changes over time during the objects life time


Characteristics may be (de)aggregated using
constrained properties.


Example: AccountAdminFrame.java


Introduction to JavaBeans

30

Low coupling


The event mechanism in JavaBeans
provides low coupling


The bean object doesn’t know much about the
listeners


Except that listeners must implement
PropertyChangeListener or PropertyVetoListener


The listeners doesn’t know much about the
bean


It’s just an Object


Which we sometimes have to typecast to the Bean class
(which is very bad)

Introduction to JavaBeans

31

Using JavaBeans in builder tools


JavaBeans can be used in a builder tool
like


NetBeans


Eclipse


Borland JBuilder


etc.


The bean must be “installed” in the builder


The builder usually helps you to during
installation

Introduction to JavaBeans

32

Packing JavaBeans in JAR files


JAR = Java Archive


The standard package format in Java


JAR = ZIP file with a manifest


A JAR file may contain


Class files


Icons, etc.


Manifest file describing the contents of the JAR file

Introduction to JavaBeans

33

Introspection


The builder tool
unzip’s

the JAR file to get the
class files.


The builder tool “learns” about the beans’
properties, methods, and events using the
introspection API


Package
java.beans


Class
Introspector


Interface
BeanInfo


Class
PropertyDescriptor


Class
MethodDescriptor


Class
EventSetDescriptor


Example:
beanbank
/introspection/IntrospectionApp.java

Introduction to JavaBeans

34

Using JavaBeans


JavaBeans can be used as ordinary classes
in


Java applications, applets, servlets


JSF(JavaServer Faces)

Introduction to JavaBeans

35

JavaBeans vs. Enterprise
JavaBeans


JavaBeans


Are relatively simple


Part of Java Standard Edition (J2SE)


Can be used in an ordinary Java application / applet


Enterprise JavaBeans


More advanced


Part of Java Enterprise Edition (J2EE)


Middle tier: Between (web)application and database.


Can only be used in an enterprise Java application


Requires an J2EE server to run the application

Introduction to JavaBeans

36

Job types using JavaBeans

and other types of components


Designing components


Programming components


Documenting components


Technical writer


Design using components


Programming using components


Marketing / selling components


Testing components


Correctness, performance, security [Trojan horses,
etc.]

Introduction to JavaBeans

37

References


Niemeyer &
Knudsen

Learning
Java
, 3
rd

edition,
O’Reilly 2005


22.
JavaBeans
, page
751
-
786