Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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