Introduction to Java Beans by Anders Børjesson. Introduction to JavaBeans2 JavaBeans components...

Preview:

Citation preview

Introduction to Java Beans

by Anders Børjesson

Introduction to JavaBeans 2

JavaBeans components

• JavaBeans are the components in the Java environment– COM / ActiveX are components in the

Microsoft 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 beans, entire applications

Introduction to JavaBeans 4

Requirements for JavaBeans

• 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 no 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• A property with a new value

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 setSize(int size)– Public int getSize()– 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), isEnabled()

Introduction to JavaBeans 11

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

– Make a JUnit test to test the Car bean

Introduction to JavaBeans 12

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 13

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 14

Exercise: Owner bean

• Additional classes for the car registration system– Program a (car) owner bean

• Properties: Name, address, etc.• Indexed property: Cars

– One owner may have several cars

– 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

• Af 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– You may either change your “old” car bean or make a

new car bean.

• 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 JUnit test to test the bound properties.• 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 sends propertyChangeEvents to each other

• Example: User interface objects events a model objec, 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– Doesn’t 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

• 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 bound 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.

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• Interface PropertyDescriptor• Interface MethodDescriptor• Interface EventSetDescriptor

– Example: IntrospectionApp.java

Introduction to JavaBeans 34

Using JavaBeans

• JavaBeans can be used as ordinary classes in– Java applications, applets, servlets– JSP (JavaServer Pages)

• special tags to manipulated JavaBeans– <jsp:useBean id="cart" class="shop.cart.ShoppingCart"

scope="session" />– <jsp:getProperty name="cart" property="numberOfItems" />– <jsp:setProperty name="cart" property="... " value="... " />

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 JavaBeansand 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.]

Recommended