Title: JavaBean Component
1 JavaBean Component
- Java bean is a reusable software component that
can be manipulated visually in a builder tool - Graphic bean and Non-graphic bean
- Javabean is not distributed component like EJB
- Interface of javabean is provided by
- 1. Design pattern(implicitly)
- 2. Using a class to implement the BeanInfo
or Customizer - interface(explicitly)
2Javabean Component
- It is a binary building block
- Development and deployment of a javabean
- Assembly javabeans to build a new javabean or a
new application, applet - Write glue codes to wire all beans together
- javabean with CORBA as a CORBA client
- Client side javabean
- Javabean for business logic process in MVC on
server - javabean on server is not visible
3Advantage of Java Bean
- Write once, run anywhere
- The properties, events, and methods of a bean
that are exposed to an application builder tool
can be controlled - They are the interface of the bean.
- They are platform independent
- Configuration setting of a bean can be saved in
persistent storage and restored later - Bean may register and receive events from other
object and can generate event sent to other
objects - (Bean communication)
4BeanInfo
Methods
JavaBean Component
Events
Properties
JAR
Customizer
5Design Pattern
- All beans should implement the Serializable
interface so that the state can be saved and
later restored - Methods must be made public
- All exposed methods should be threadsafe,
possibly synchronized to prevent more than one
thread from calling method at a given time - Propertie X is exposed by public setX and getX
methods - Boolean property may be exposed by isX method
which returns a boolean value - The bean which may trigger event must provide
addEventListener and removeEventListener mehods
for other bean to register with it to be notified
6Deployment of Bean
- All java classes can be converted to a bean
- Bean is compressed and saved in the format of
jar file which contains manifest file, class
files, gif files, and other information
customization files - Sun NetBeans, BDK, Visual Café, JBuilder, Visual
Age are the bean builder tools -
7Criteria to be a bean
- Can this piece of code be used in more than one
area? - Can you quickly think of ways that this piece of
code might be customized? - Is the purpose of this code easy to explain?
- Does this code module contain all the info it
needs to work itself? - Does it have good encapsulation?
- If you answer all yes, You should make the
class a bean
8JAR file
- JAR file allows you to efficiently deploy a set
of classes and their associated resources. - JAR file makes it much easier to deliver,
install, and download. It is compressed.
9Manifest file
- Manifest.tmp
- Name SimpleBean.class
- Java-Bean True
- ...
10Creating and extract a jar file
- Create a jar file
- jar cfm simplebean.jar manifest.tmp
.class - Extracting files from a jar file
- jar xf simplebean.jar
11Develop a New Bean
- Create a directory for the new bean
- Create the java bean source file(s)
- Compile the source file(s)
- Create a manifest file
- Generate a JAR file
- Start BDK
- Test
- Working-dir can be at ltbdkgt\demo where ltbdkgt
is the installation dir for BDK
12Create bean source file - SimpleBean.java
- package simplebean
- import java.awt.
- import java.io.Serializable
- public class SimpleBean extends Canvas implements
Serializable - public SimpleBean()
- setSize(60,40)
- setBackground(Color.red)
13Compile and make jar file
- Javac -d . SimpleBean.java
- Edit a manifest file called manifest.tmp
- Name SimpleBean.class
- Java-Bean True
- jar cfm ..\jars\simplebean.jar manifest.tmp
simplebean\.class - SimpleBean and colorsbean demo
14Introspection
- Process of analyzing a bean to determine the
capability - Allows application builder tool to present info
about a component to software designer - Naming convention implicit method
- BeanInfo class to explicitly infer info of a bean
15Design Pattern for Properties
- Property is a subset of a beans state which
determines the appearance and behavior of the
component - Simple property
- Indexed Property
- Bound Property
- Constrained property
16Simple Property
- Simple property has a single value.
- N is the name of the property and T is its type
- public T getN()
- public void setN(T arg)
- For readonly property there is getN() method only
17Indexed Property
- One property may consists of multiple values
stored in an array - public T getN(int index)
- public void setN(int index, T value)
- public T getN()
- public void setN(T values)
- where N may be a double data and T is double
18Bound Property
- It can generate an event when the property is
changed - The event is of type PropertyChangeEvent and is
sent to objects that previously registered an
interest in receiving such notifications - bean with bound property - Event source
- Bean implementing listener -- event target
19Implement Bound Property in a Bean
- 1. Import java.beans package
- 2. Instantiate a PropertyChangeSupport object
- private PropertyChangeSupport changes new
- PropertyChangeSupport(this)
- 3. Implement methods to maintain the property
change listener list - public void addPropertyChangeListener(Property
ChangeListener l) - changes.addPropertyChangeListener(l)
- also removePropertyChangeListener method is
needed
20Event Source Cont.
- 4. Modify a propertys setter method to fire a
property change event when the property is
changed. - Public void setX(int newX)
- int oldx x
- x newX
- changes.firePropertyChange(x, oldX,
newX)
21Implement Bound Property Listener
- 1. Listener bean must implement
PropertyChangeListner interface - public class MyClass implements
PropertyChangeListener, Serializable - 2. It must override this method
-
- public abstract void propertyChange(PropertyChange
event evt)
22Registration
- For example
- OurButton button new OurButton()
- button.addPropertyChangeListener(aButtonListener)
- ..
23Constrained Property
- It generates an event when an attempt is made to
change it value - The event type is PropertyChangeEvent
- The event is sent to objects that previously
registered an interest in receiving an such
notification - Those other objects have the ability to veto the
proposed change - This allows a bean to operate differently
according to the runtime environment
24Three Parts in Implementation of Constrained
Property
- 1. Source bean containing one or more constrained
properties - 2. Listener objects that implement the
VetoableChangeListener interface. This object
either accepts or rejects the proposed change. - 3. PropertyChangeEvent object containing property
name, old value, new value. -
25Implement Constrained Property in a Bean
- Bean with constrained property must
- 1. Allow VetoableChangeListener object to
register and unregister its interest in receiving
notifications - 2. Fire property change at those registered
listeners. The event is fired before the actual
property change takes place
26Implementation of Constrained Property in a Bean
- 1. Import java.beans package
- 2. Instantiate a VetoableChangeSupport object
- private VetoableChangeSupport vetosnew
- VetoableChangeSupport(this)
- 3. Implement methods to maintain the property
change listener list - public void
- addVetoableChangelistener(VetoableChangelis
tener l) - vetos.addVetoableChangeListener(l)
27Cont.
- 4. Write a propertys setter method to fire a
property change event - public void setX(int newX)
- int oldXX
- vetos.fireVetoableChange(X, oldX,
newX) - //if no veto there
- XnewX
- changes.firePropertyChange(X, oldX,
newX)
28Implementing Constrained Property Listeners
- 1. Implements the VetoableChangeListener
interface which has an abstract method - Void vetoChange(PropertyChangeEvent evt)
- 2. Overide this abstract method. This is the
method that will be called by the source bean on
each object in the listener list kept by
vetoableChangeSupport object
29Persistence
- It has the ability to save a bean to storage and
retrieve it at a later time - Configuration settings are saved
- It is implemented by Java serialization
- If a bean inherits directly or indirectly from
Component class it is automatically Serializable. - Transient keyword can be used to designate data
members not be saved ex. Thread reference member
30Customizers
- Property sheet may not be the best user interface
for a complex component - It can provide step-by-step wizard guide to use
component - It can provide a GUI frame with image which
visually tells what is changed such as radio
button, check box, ... - It can customize the appearance and behavior of
the properties
31Design Pattern for User Defined Events
- Bean can generate events and send them to other
objects in delegation event model - Listener registration and unregistration
- public void addTListener(TListener x)
- public void removeTListener(TListener x)
32User defined listener and event
- Timer class will fire off timeout event
- public interface TimerListener extends
EventListener public void timeOut(TimeEvent
e) - public class TimerEvent extends EventObject
- int count0
- public TimerEvent(Object obj)super(obj)
- public int getCount() return count
- public void setCount(int
count)this.countcount
33Timer class fires off timeout event to all
registered objects
- public void startTimer()
- if (tnull)tnew Thread(this) t.start()
- public void run()for()
- tryt.sleep(timeout)
- catch(Exception e)
- fireOff()
- void fireOff()TimerEvent tenew TimeEvent(this)
- te.setCount(number)
- Vector listeners (Vector)listeners.clone()
- for(int I0Iltlisteners.size() I)
- ((TimerListener)listeners.elementAt(I).timeOut(
te)
34Any class that implements TimerListener can
register itself by calling addTimerListener()
- Vector listeners new Vector()
- public void addTimerListener(TimerListener l)
- listeners.addElement(l)
- public void removeTimerListener(TimerListener l)
- listeners.removeElement(l)
- Any class that implements TimerListener interface
must override the timeOut method of interface
TimerListener to respond the notification
35Colors.java
- package colors
- import java.awt.
- import java.awt.event.
- public class Colors extends Canvas
- transient private Color color
- private boolean rect
- public Colors()
- addMouseListener(new MouseAdapter()
- public void
mousePressed(MouseEvent me)change()) - rectfalse setSize(200,100) change()
36Colors.java(Cont.)
- public boolean getRect() return rect
- public void setRect(boolean flag)this.rectflag
repaint() - public void change()colorrandomColor()
repaint() - private Color randomColor()
- int r(int)(255Math.random())
- int g (int)(255Math.random()) int
b(int)(255Math.random()) - return new Color(r,g,b)
- public void paint(Graphics g)
- Dimension d getSize() int hd.height int
wd.width g.setColor(color) - if(rect)g.fillRect(0,0,w-1,h-1)
- elseg.fillOval(0,0,w-1,h-1)
37Summary
- JavaBean is a platform-neutral component
architecture for reusable software component - It is a black box component to be used to build
large component or application - Property,method,event, introspector, customizer
are parts of javabean interface
38Quiz
- True of False
- 1. One JavaBean can fire off an event taken by
more than one targets. - 2. Javabean cant be inherited by other bean.
- 3. Javabean can be distributed.
- 4. Javabean is in binary format and deployed in
JAR file - 5. Javabean can only be introspected by property
sheet. - 6. Javabean is a language independent
architecture
39Quiz
- Javabean can only be developed by BDK.
- Every java class can be turned into a Javabean.
- Javabean must be a graphic component.
- Javabean can be used on web server.
- The event a Javabean can trigger is a subclass of
class EventObject - The bound property bean can prevent its property
change by other bean. - JAR file is compressed file
40Quiz
- Event source must implement listener and override
the method provided by the listener - Event Target must provide the addTListener and
removeTListener methods - BeanInfo class is used to explicitly introspect
the bean property - Customizer class can be used to provide winzard
for bean configuration