5. Wiederverwendung im Softwareentwurf 5.3 Komponenten

Werbung
5. Wiederverwendung im Softwareentwurf
5.3
Komponenten
Literatur:
C. Szyperski: Component Software - Beyond Object-oriented Programming,
Addison-Wesley 1997
V. Gruhn, A. Thiel: Komponentenmodelle, Addison-Wesley 2000
D. Flanagan: Java in a Nutshell, Kap. 10, O‘Reilly 1997 (2nd ed.)
M. Johnson: A beginner‘s guide to Enterprise JavaBeans, JavaWorld 10/98,
http://www.javaworld.com/javaworld/jw-10-1998/jw-10-beans_p.html
R. Monson-Haefel: Enterprise JavaBeans, O‘Reilly 1999
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
Bausteinorientierte Programmierung
(Component-Ware)
• Idealzustand der Softwareentwicklung ist die Konstuktion aus
vorgegebenen Bausteinen ("Software-ICs")
• Generische Bausteine (components)
– anpaßbar
– zusammensetzbar ("Verdrahtung")
• Einfache Kompositionsmechanismen:
– werkzeuggestützt
– graphisch
• Infrastruktur zur Komponenteninteraktion: "object bus"
• Beispiele:
–
–
–
–
Visuelle Programmierung von GUIs
Java Beans, Enterprise Java Beans (EJBs)
CORBAcomponents
Microsoft COM+, DCOM
Technische Universität Dresden
Prof. Hußmann
Seite 1
Softwaretechnologie II
Komponenten
• Definition: „A software component is a unit of composition with
contractually specified interfaces and explicit context dependencies only. A software component can be deployed independently
and is subject to composition by third parties.“
ECOOP 1996, Workshop on Component-oriented Prog. 1997
& Clemens Szyperski
• Schnittstellen (interfaces):
– Explizit definierte Interaktionen mit Komponenten und Umgebung
• Kontextabhängigkeiten (context dependencies):
– benötigte Komponenten-Infrastruktur
– Systemressourcen
• Unabhängige Einsetzbarkeit (independent deployment):
– Alle Bestandteile enthalten (Archiv-Dateien), als Ganzes eingesetzt
• Komposition durch Dritte (composition by third parties):
– Endbenutzer, Komponenten-Hersteller und Komponenten-Integrator
– Meist nur als compilierter Code verfügbar, nicht als Quellcode
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
Sind Komponenten Objekte?
Widersprüchliche Stellungnahmen in der Literatur:
• Evolutionäre Position:
– Komponenten als spezielle (komplexe) Objekte
– Komponentenorientierte Programmierung als Abstraktionsschicht über
objektorientierter Programmmierung
– Komponentenbaukästen als datengetriebene Frameworks
– z.B. JavaBeans, Enterprise Java Beans
» im folgenden näher erklärt
• Revolutionäre Position:
– Komponentenorientierte Programmierung als Revolution
– „Objektorientierte Programmierung ist gescheitert.“
– Komponentenorientierte Programmierung benötigt die Konzepte der
Objektorientierung nicht.
– Komponenten ähnlich zu klassischen Modulen
Technische Universität Dresden
Prof. Hußmann
Seite 2
Softwaretechnologie II
Client- und Server-Komponenten
• Komponenten für eigenständige Anwendungen und Clients:
– orientiert auf graphische Benutzungsoberfläche
– Fachlogik ohne Berücksichtigung von Mehrbenutzer-Betrieb
• Komponenten für Client/Server-Anwendungen:
–
–
–
–
Serverseitige Komponenten
Komponentenbasierte "Application-Server"-Software
"Unsichtbare" Komponenten
Sicherstellung von Eigenschaften für Server-Software:
» Performance
» Sicherheit
» Mehrbenutzerbetrieb
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
JavaBeans
• JavaBeans ist das Komponentenmodell von Java (ab Version 1.1).
• Definition: Eine Bean (Bohne) ist eine Sammlung von JavaKlassen und anderen Ressourcen, bei der die Klassen bestimmten
Konventionen genügen.
Eine Bean exportiert zu ihrer Umgebung:
– Eigenschaften (properties),
d.h. Bestandteile des lokalen Zustands, auf die über get- und setMethoden zugegriffen werden kann;
– Ereignisse (events),
d.h. Ereignisklassen und "EventListener"-Klassen nach den
Konventionen des Ereignismodells von Java 1.1/AWT
– Methoden (methods),
d.h. öffentlich bekannte Methoden des Objekts
Technische Universität Dresden
Prof. Hußmann
Seite 3
Softwaretechnologie II
Beispiel: SimpleBean
public class SimpleBean extends Canvas
implements Serializable {
private Color color = Color.green;
public Color getColor(){
return color;
}
public void setColor(Color newColor){
color = newColor;
repaint();
}
public void paint(Graphics g) {
g.setColor(color);
g.fillRect(20, 5, 20, 30);
}
public SimpleBean(){
setSize(60,40);
setBackground(Color.red);
}
}
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
Wann ist eine Java-Klasse eine JavaBean?
• Es gibt keine Wurzelklasse aller JavaBeans und kein spezifisches
Interfaces für alle JavaBeans!
• Eine Klasse wird zur JavaBean(-Klasse) durch Einhaltung
bestimmter Namens-Konventionen:
– Konventionen für Eigenschaften (Properties):
» public setPropertyName (PropertyType p);
» public PropertyType getPropertyName();
• Bean-basierte Entwicklungswerkzeuge unterstützen:
– Instanziieren von Bean-Objekten
– Manipulation von Properties
– Ereignisbehandlung
» Verwendung von "Meta-Programmierung" (Reflektion)
• Die graphischen Elemente der Java-GUI-Toolkits AWT und Swing
erfüllen die JavaBean-Konventionen.
Technische Universität Dresden
Prof. Hußmann
Seite 4
Softwaretechnologie II
SimpleBean in Entwicklungsumgebung
Workbench
Properties
color
background
foreground
font
...
background, foreground und font
sind ererbte Properties
(aus java.awt.Component via Canvas)
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
java.awt.Button
public class Button extends Component {
...
public String getLabel;
public void setLabel (String label);
public void addActionListener (ActionListener l);
public void removeActionListener
(ActionListener l);
...
}
Technische Universität Dresden
Prof. Hußmann
Seite 5
Softwaretechnologie II
java.awt.event.ActionEvent, ActionListener
public interface ActionListener
extends EventListener {
public void actionPerformed (ActionEvent ev);
}
public class ActionEvent extends AWTEvent {
...
public ActionEvent (object source, ...);
...
public Object getSource ()
}
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
Beispiel: Stop Juggling
Press
Press
"Juggler Bean":
• Aktive Bean (jongliert)
• Methoden:
"startJuggling()"
"stopJuggling()"
Button Bean:
• Instanz von java.awt.Button
• Graphische Manipulation in Entwicklungstool:
– Auswahl der ActionEvents der Button Bean
– Verbindung mit der Methode "stopJuggling" der Juggler Bean
• Automatische Generierung einer speziellen Klasse, die die
Schnittstelle "ActionListener" implementiert
Technische Universität Dresden
Prof. Hußmann
Seite 6
Softwaretechnologie II
Generierte Klasse für "Stop Juggling"
// Automatically generated event hookup file.
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
...
public class ___Hookup_16421c6ea3 implements
java.awt.event.ActionListener {
private Juggler target;
public void setTarget(Juggler t) {
target = t;
}
public void actionPerformed(ActionEvent arg0) {
target.stopJuggling(arg0);
}
}
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
Spezialfälle von Bean-Eigenschaften
• indexed property:
– Feld von Einzeleigenschaften
• bound property:
– erzeugt bei Veränderung ein Ereignis
• constrained property:
– erzeugt bei Veränderung ein Ereignis
– läßt „Veto“ der Veränderung durch andere Objekte zu
• Implementierungsidee für alle diese Varianten ist identisch zur
Behandlung von EventListenern.
Technische Universität Dresden
Prof. Hußmann
Seite 7
Softwaretechnologie II
JavaBeans und GUIs
• JavaBeans taugen nicht nur für Benutzungsoberflächen...
• Arten von JavaBeans
– Sichtbare (visible) Beans
» AWT- und Swing-Komponenten (z.B. Frame, Window, Button, ...)
als JavaBeans
» Selbstdefinierte graphische Beans
» Graphische Komposition von Beans in GUI-Buildern
– Unsichtbare (invisible) Beans
» Logische Einheiten, die Bean-Konventionen folgen
» Interagieren mit sichtbaren Beans
» Können in Werkzeugen analog zu sichtbaren Beans behandelt
werden
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
Beispiel: Sichtbare und unsichtbare Beans
Quelle: http://xputers.informatik.uni-kl.de/multimedia/javadoc/beans/
Technische Universität Dresden
Prof. Hußmann
Seite 8
Softwaretechnologie II
Beispiel: Komplexitätsfalle !
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
Meta-Information über Komponenten
• Eine Komponente muß alle notwendige Information über ihre
Verwendung in sich tragen.
• Entwicklungswerkzeuge greifen auf diese Information zu:
„Introspektion“
• Beispiel: Für eine JavaBean B kann eine Klasse BBeanInfo
definiert und mitgeliefert werden.
– Java-Klasse, also ausführbar durch (Java-)Entwicklungswerkzeuge
– Enthaltene Information:
» Icon
( public Image getIcon (int kind) )
» BeanDescriptor (Referenz auf sog. „Customizer“-Objekt)
» Liste der Eigenschaften, zusammen mit textueller Beschreibung
» Standardmäßig zur Modifikation anzubietende Eigenschaft
» Referenzen auf Editoren für Eigenschaften
» Liste der angebotenen Methoden
» Information zu den erzeugten Ereignissen
Technische Universität Dresden
Prof. Hußmann
Seite 9
Softwaretechnologie II
Client- und Server-Komponenten
• Wichtige Eigenschaften für Client/Server-Anwendungen:
–
–
–
–
Transaktionen
Sicherheit
Ressourcenverwaltung
Persistenz
• Komponentenkonzept für Server-Komponenten:
– meist unsichtbare Komponenten
– standardisierte Realisierung der wichtigen Eigenschaften für
Client/Server-Anwendungen
– Spezielle Infrastruktur: „Transaktionsmonitor“ für Komponenten
• Beispiele für Server-Komponentenmodelle:
– Enterprise Java Beans (EJBs)
– Microsoft Transaction Server (MTS)
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
EJB: Grundsätzliche Architektur
Server
EJB Container
erzeugen
finden
löschen
EJB Home
Client
Enterprise Bean
Fachliches
Objekt
„fachliche“
Methoden
Technische Universität Dresden
EJB Object
Dienste
Prof. Hußmann
Seite 10
Softwaretechnologie II
EJB: Grundsätzliche Architektur
Server
EJB Container
erzeugen
finden
löschen
EJB Home
Client
Deployment
Descriptor
Enterprise Bean
Fachliches
Objekt
„fachliche“
Methoden
EJB Object
Dienste
Transaktionen Weitere Dienste
Persistenz
Möglicherweise
auch außerhalb des
„Servers“
Technische Universität Dresden
DB
TP-Monitor
Prof. Hußmann
- Resourcen Mgmt.
- Sicherheit
- Namensdienst
- ...
Softwaretechnologie II
Arten von Enterprise Java Beans
• Entity Bean:
– Repräsentiert persistente Information aus einer Datenbank
– Typischerweise mit mehreren Transaktionen assoziiert
– Mehrbenutzerzugriff möglich
• Session Bean:
– EJB-Instanz, die mit einem einzelnen Client assoziiert ist
– Typischerweise nicht persistent
– Beispiele:
» Benutzersitzung innerhalb einer Web-Site
» Buchungsvorgang
– „Stateful Session Bean“
» Dialogzustände innerhalb der Session
– „Stateless Session Bean“
» keine Dialogzustände, hohe Effizienz
Technische Universität Dresden
Prof. Hußmann
Seite 11
Softwaretechnologie II
Beispiel: Remote Interface "Counter"
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
public interface Counter extends EJBObject {
public int getCurrent() throws RemoteException;
public int getStartValue() throws RemoteException;
public void setStartValue(int value) throws
RemoteException;
public int getIncrValue() throws RemoteException;
public void setIncrValue(int value) throws
RemoteException;
public boolean getEnabled() throws RemoteException;
public void setEnabled(boolean value)
throws RemoteException;
public void reset() throws RemoteException;
public void count() throws RemoteException;
}
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
Beispiel: Home Interface "CounterHome"
import javax.ejb.EJBHome;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
public interface CounterHome extends EJBHome {
Counter create() throws RemoteException,
CreateException;
}
Technische Universität Dresden
Prof. Hußmann
Seite 12
Softwaretechnologie II
Beispiel: EJB Class "CounterEJB" (1)
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class CounterEJB implements SessionBean {
private int count;
private int startValue;
private int incrValue;
private boolean enabled;
public void ejbCreate() {
startValue = 0;
incrValue = 1;
reset();
enabled = true;
}
public int getCurrent () {
return count;
}
public int getStartValue () {
return startValue;
}
...
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
Beispiel: EJB Class "CounterEJB" (2)
...
public void reset () {
count = startValue;
}
public void count () {
if (enabled) {
count += incrValue;
}
}
// EJB Lifecycle Callback Methods
public
public
public
public
void
void
void
void
ejbRemove() {}
ejbActivate() {}
ejbPassivate() {}
setSessionContext(SessionContext sc) {}
}
Technische Universität Dresden
Prof. Hußmann
Seite 13
Softwaretechnologie II
Beispiel: Deployment-Werkzeug
Sun
J2EE
ReferenzImplementierung
1.3 beta
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
Beispiel: Deployment Descriptor
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD
Enterprise JavaBeans 2.0//EN'
'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
<display-name>CounterJAR</display-name>
<enterprise-beans>
<session>
<display-name>CounterBean</display-name>
<ejb-name>CounterBean</ejb-name>
<home>CounterHome</home>
<remote>Counter</remote>
<ejb-class>CounterEJB</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Bean</transaction-type>
<security-identity>
<description></description>
<use-caller-identity></use-caller-identity>
</security-identity>
</session>
</enterprise-beans>
</ejb-jar>
Technische Universität Dresden
Prof. Hußmann
Seite 14
Softwaretechnologie II
Client-Programm für "Counter" Session Bean
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import Counter;
import CounterHome;
...
try {
Context ictx = new InitialContext();
Object ctrRef = ictx.lookup("JNDI Name");
CounterHome ctrHome =
(CounterHome)PortableRemoteObject.narrow
(ctrRef,CounterHome.class);
Counter counter = ctrHome.create();
...
counter.setStartValue(...);
counter.count();
...
} catch (Exception ex) {
System.err.println("Error when connecting to
server");
ex.printStackTrace();
}
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie II
Verpackungsform von Komponenten
• Eine Komponente ist eine geschlossene Einheit:
– Möglicherweise viele Klassen
– Dokumentation
– Mechanismen zur Anpassung
• JavaBeans:
• Enterprise JavaBeans:
– Bean wird ausgeliefert in JavaArchiv-Datei (JAR-Datei)
– Metainformation in der JAR-Datei
(„Manifest“) beschreibt, welche
Klassen Beans sind
– Archiv enthält alle möglicherweise
zusätzlich notwendigen
Ressourcen
» Klassen (als Bytecode)
(auch Ereignisklassen und
Listener-Klassen
» Serialisierte Objekte, Daten,
Medienobjekte
» ...
Technische Universität Dresden
– Bean wird ausgeliefert in JavaArchiv-Datei (JAR-Datei)
– Deployment Descriptor zur
Konfiguration der EJB
– Archiv enthält alle möglicherweise
zusätzlich notwendigen
Ressourcen
» z.B. Stubs und Skeletons zur
CORBA-Kommunikation
» ...
Prof. Hußmann
Seite 15
Softwaretechnologie II
Herunterladen