Download Introduction to Java Beans

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Introduction to Java Beans
by Anders Børjesson
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
2
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
3
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
4
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
5
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
6
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
7
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
8
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
9
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
10
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
11
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
12
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
13
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
14
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
15
Examples
• AccountBound.java
• ScreenLogListener.java
• AccountBoundApp.java
Introduction to JavaBeans
16
Observer pattern
Account
0..n
#pcs : PropertyChangeSupport
+addPropertyChangeListener(l : PropertyChangeListener)
+removePropertyChangeListener(l : PropertyChangeListener)
«Interface»
PropertyChangeListener
0..n
+propertyChange(evt : PropertyChangeEvent)
c
MyPropertyChangeListener
+propertyChange(evt : PropertyChangeEvent)
Introduction to JavaBeans
17
Sequence diagram: Firing a
property change event
:Account
:PropertyChangeSupport
:PropertyChangeListener
:PropertyChangeListener
setBalance
firePropertyChange
propertyChange
propertyChange
Introduction to JavaBeans
18
Sequence diagram: Adding a
property change listener to a bean
:PropertyChangeListener
:Account
:PropertyChangeSupport
addPropertyChangeListener(this)
addPropertyChangeListener(...)
Introduction to JavaBeans
19
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
20
PropertyChangeListener
• Interface PropertyChangeListener extends
EventListener
– EventListener is a marker interface
• No methods to implement
• PropertyChangeListener methods
– void propertyChange(PropertyChangeEvent evt)
Introduction to JavaBeans
21
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
22
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
23
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
24
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
25
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
26
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
27
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
28
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
29
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
30
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
31
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
32
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
33
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
34
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
35
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
36
References
• Niemeyer &
Knudsen Learning
Java, 3rd edition,
O’Reilly 2005
– 22. JavaBeans, page
751-786
Introduction to JavaBeans
37