• Keine Ergebnisse gefunden

Rekapitulation Teil 1 und 2 Steuerungsschicht

N/A
N/A
Protected

Academic year: 2021

Aktie " Rekapitulation Teil 1 und 2 Steuerungsschicht"

Copied!
55
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Vorlesung Wintersemester 2008 / 09 Technische Universität München Institut für Informatik

Lehrstuhl von Prof. Dr. Manfred Broy

Dr. Klaus Bergner, Prof. Dr. Manfred Broy, Dr. Marc Sihling

Softwarearchitektur

(Architektur: αρχή = Anfang, Ursprung + tectum = Haus, Dach)

10. Betriebliche Informationssysteme – Teil 3

(2)

Inhalt

Rekapitulation Teil 1 und 2 Steuerungsschicht

Aufgaben und Charakteristika Dienste und Middleware

Präsentationsschicht

Aufgaben und Charakteristika

Model-View-Controller-Architekturen

Unterstützungsschicht

Zusammenfassung

Literaturhinweise

(3)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.3

Inhalt

Rekapitulation Teil 1 und 2 Steuerungsschicht

Aufgaben und Charakteristika Dienste und Middleware

Präsentationsschicht

Aufgaben und Charakteristika

Model-View-Controller-Architekturen

Unterstützungsschicht

Zusammenfassung

Literaturhinweise

(4)

Logische Schichtenarchitektur

Die Aspekte der fachlichen und technischen Architektur werden vier Schichten zugeordnet. Die Unterstützungsschicht bietet querschnittliche Funktionalität.

Fachliche Komponenten

Workflows zu Prozessen

GUIs zu Aktivitäten

(5)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.5

Inhalt

Rekapitulation Teil 1 und 2 Steuerungsschicht

Aufgaben und Charakteristika Dienste und Middleware

Präsentationsschicht

Aufgaben und Charakteristika

Model-View-Controller-Architekturen

Unterstützungsschicht

Zusammenfassung

Literaturhinweise

(6)

Aufgabe der Steuerungsschicht

Ziele einer expliziten Steuerungsschicht

Agile Unternehmen, Anpassung durch rekonfigurierbare Prozesse

Neue Geschäftsprozesse aus vorhandenen Aktivitäten/Services bauen Einfache Kommunikation mit Partnern und Kunden

Einfaches Outsourcing von Teilprozessen

Funktionen der Steuerungsschicht

Bietet Ablaufumgebung für die spezifizierten Geschäftsprozesse Steuert den Ablauf der Aktivitäten

- Aufruf fachlicher Funktionalität

- Anzeige der Dialoge der Präsentationsschicht

Verwaltet Prozesskontext: Daten und Ressourcen

In vielen Systemen mit Anwendungsschicht zusammengefasst

(7)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.7

Geschäftsprozesse und Organisationen

(8)

Services als Anwendungs-Bausteine

(9)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.9

Workflow Management

Prozess

Aktivität Menschlicher Aktor

Aufgerufene Anwendung

Worklist

(10)

Workflow: Verwaltung von Abläufen und Zuständen

Aktivitäts- definition spezifiziert

Rolle

Worklist gehört zu Bearbeiter,

der Rolle innehat

(11)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.11

Workflow: Kontext- und Ressourcenverwaltung

Select Order

in1: Customer

o: Order c: Customer

out1: Order

Order Merchant Prozesskontext

Aktivitäten sind möglichst kontextlos ( Service-Orientierung)

spezifizieren lediglich Ein-/Ausgabeschnittstelle damit einsetzbar im Kontext beliebiger Prozesse

Workflow-Engine stellt Kontext zur Verfügung

Versorgt Ein-/Ausgabeschnittstelle mit aktuellen Kontext-Daten

- Per Value: Skalare Daten, Value-Objekte, Dokumente, Dateien - Per Reference: IDs von Geschäftsobjekten, URLs von Dokumenten

Ordnet Bearbeiter als Ressourcen gemäß Rollenspezifikation zu

Max Kunde:

Customer

o4711:

Order

Fritz Kaufmann:

Order Merchant

(12)

Beispiel: Order-System

(13)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.13

Beispiel: Order-System

(14)

Beispiel: Order-System (1)

Prozess- definitionen

Worklist (Aktivität und

Ablauf)

Arbeits- bereich:

aktive Aktivitäten

(15)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.15

Beispiel: Order-System (2)

(16)

Beispiel: Order-System (3)

(17)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.17

Beispiel: Order-System (4)

(18)

Middleware zum Workflow Management

Realisierung der Steuerungsschicht

Abläufe als Programmcode

± Nur bei kleinen Systemen tragfähig

Verwaltung der Prozesse durch Workflow Engine

+ Nutzung von mächtigen Mechanismen (s. nächste Folien) + Konfiguration und Modellierung statt Programmierung - Ggf. Integration mit System zu leisten

± Open-Source-Systeme bisher mäßig erfolgreich (Bsp. jBPM/JBOSS)

Sehr heterogener Markt, Standards nur in Teilbereichen

WfMC – Workflow Management Coalition – Traditionelle Schnittstellen OMG Workflow Facility – Prozesse und Aktivitäten als CORBA-Objekte BPEL-Engine als Standardisierungsansatz im Umfeld Web Services, oft

integrierter Dienst von ESBs (Enterprise Service Busses)

(19)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.19

WfMC Workflow Reference Model

Client- Integration

Server- und Anwendungs-

Integration

(20)

Workflow Client Application (Interface 2)

Workflow Presentation

System-Specific Presentation

System-Specific Application WfE Service

Workflow Presentation

GUI-Komponentenbibliothek für Workflow-Anwendungen mit

- Anzeige der Worklist

- Anzeige startbarer Prozesse - Ablaufvisualisierung

Workflow-Rahmenanwendung als Basis für „Worklets“

Workflow Client Application Interface

Sitzungsmanagement

Prozess- und Aktivitätskontrolle - Starten/Abbrechen von Prozessen - Durchführen von Aktivitäten

Worklist-Manipulation - Anzeige der Worklist

- Annehmen von Aktivitäten

(21)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.21

Invoked Application (Interface 3)

Aufruf von Anwendungen umfasst

Start, Parameterversorgung, Überwachung, ggf. Re-Start Zuordnung zu Bearbeiter und ggf. dessen Client-Rechner

Workflow-Ready Application

WfE Service

Application Agent Arbitrary Application Workflow-Enabled

Application Beispiel: WfE ruft

Web Service auf

(22)

Workflow Interoperability (Interface 4)

Verteilung der Workflow-Steuerung

Auslagerung und Aufruf von Teilprozessen Verteilte Ablaufsteuerung und Statusabfrage Transfer der Workflow-Kontextdaten

Senden von Prozessdefinitionen

Standardisierter Ansatz: BPEL, Business Process Execution Language

Kommunikation über Web-Services in XML-Form - Aufgerufene Anwendungen stellen Web-Services bereit - Aufruf von Prozessen erfolgt über Web-Services

Primitive zum Senden, Empfangen, Antworten auf Nachrichten

WfE Service WfE Service

(23)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.23

Einbettung in

Application Server

HTTP Server

Worklet Repository

Business Entities Process

Repository Network Session

Bean

Entity

EJB Server Bean

Workflow Engine with Running Processes Network

(24)

Beispiel: Architektur eines Engineering-Workflow-Systems

Application Interface

Product- Manager

Process- Manager

Session- Manager

Tool- Manager

Storage Interface

Engineering Desktop

Task-

Manager Tools

CORBA

NFS

References

Control

CORBA

(25)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.27

Inhalt

Rekapitulation Teil 1 und 2 Steuerungsschicht

Aufgaben und Charakteristika Dienste und Middleware

Präsentationsschicht

Aufgaben und Charakteristika

Model-View-Controller-Architekturen Verteilungsvarianten

Unterstützungsschicht

Zusammenfassung

Literaturhinweise

(26)

Aufgabe der Präsentationsschicht

Zeigt Anwendungsdaten an

Greift lesend auf die Anwendungsschicht zu Aktualisiert die Anzeige

Steuert die Interaktion mit dem Benutzer

Zeigt graphische Elemente der Bedienoberfläche an

Erkennt Benutzeraktionen auf unterschiedlichen Kanälen Verwaltet den Kommunikationszustand

Ruft Anwendungsfunktionalität auf

Führt selbständig einfache Prüfungen durch

Prüfung auf richtiges Eingabeformat (z.B. Eingabe einer Zahl) Prüfung auf Eingabebereiche (z.B. Eingabe einer Zahl kleiner 10)

(27)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.29

Rekapitulation: Model-View-Controller-Muster

Model Controller

Event

change get data change

Display

notify

View

1

2

3

4

6 5

(28)

Entwurfsmuster: Aufteilung des Models

Presentation Model

Bereitet Anwendungsdaten so auf, dass Views und Controller leicht damit arbeiten können (z.B. TreeModel)

Enthält möglichst wenig Anwendungs-

Application Model

Bildet Anwendungsfunktionalität in allgemeiner Form ab

Enthält die Anwendungslogik

Presentation Model View

Controller Event

Display

change

read data

change notify

Application Model

notify change

(29)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.31

GUI-Komponenten bei hierarchischem MVC

Presentation Model

Event

change Display

notify view models

M V

C

M V

C

View Components

1

2

8

4

6

5

9 8 9

10

Presentation Controller

get data

change

7

Mehrere Ebenen möglich!

Application Model

3

(30)

Anti-Pattern: Spagetthi-Controller

Presentation Controller und/oder Presentation Model fehlen Controller und Models ändern andere Controller und Models

Event Display

M V

C

M V

C

View Components

2

4?

Schlechte Wartbarkeit und Erweiterbarkeit, da View-Komponenten nicht mehr unabhängig

voneinander sind

Hohe Wahrscheinlichkeit für Fehler, insbesondere wenn sich Schleifen beim Aufruf ergeben

5?

(31)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.33

Generische GUI-Komponenten (1)

Bindung an beliebige Model-Objekte

GUI-Komponenten stellen über Reflection die Attribute und Operationen der Model-Objekte fest und zeigen diese dynamisch an

Beispiel: Entity Editor / Viewer

Editiere / zeige Attribute und aggregierte Objekte eines Geschäftsobjekts internationalisiert an

(32)

Generische GUI-Komponenten (2)

Beispiel: Generische Abfrage-Komponente

Erlaubt Suche nach allen Attributen eines Objekts Kann ggf. konfigurierbar

sein, um Attribute auszu-

(33)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.35

Umsetzung und Verteilung der MVC-Architektur

Bei der Auswahl sind folgende Architekturtreiber wichtig:

Geforderte Reaktivität und Performanz der GUI

Wie sind Latenz und Bandbreite zwischen Client und Server?

Notwendigkeit der Offline-Verfügbarkeit

Kann GUI auch ohne Server ausgeführt werden?

Anforderungen bei Installation und Deployment

Welche Basis-Software ist nötig? Wie erfolgt die Verbreitung?

Aufwand für Entwicklung und Test

Wie aufwändig ist die Erstellung von GUIs? Wie steil ist die Lernkurve?

Erweiterbarkeit und Zukunftssicherheit

Gibt es das Framework auch morgen noch?

Das MVC-Muster kann auf vielfältige Weise umgesetzt werden. Sie

unterscheiden sich insbesondere bei der Verteilung.

(34)

Fat Client

notify change

Architektur beim Fat Client

Fat Client erfordert universell programmierbare Ablaufumgebung

Client wird als vollständige Anwendung installiert (Java Swing, Eclipse RCP).

Client wird in bestehende Runtime geladen (Java Applet, JavaFX, Adobe AIR, Microsoft Silverlight, einige AJAX-Anwendungen)

Ansonsten sämtliche Möglichkeiten gegeben

Presentation DB

Model View

Controller

Event Display

change

read data

change notify

Application

Model Netz

(35)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.37

Thin Client

notify change

Architektur beim Thin Client

Thin Client erfordert universell programmierbare Ablaufumgebung Zugriff auf Anwendungsfunktionalität über Netzkommunikation

Niedrigere Performanz wegen nötiger Netz-Roundtrips

Höhere Sicherheit, da Funktionalität vom Server erbracht wird Keine Offline-Verfügbarkeit, da Funktionalität auf Client fehlt

Presentation Model Controller

Event Display

change

read data

change notify

Application Model Netz

View

(36)

Client Runtime

Ultra-Thin Client

notify change

Architektur beim Ultra-Thin Client

Ultra-Thin Client erfordert nur minimale Ablaufumgebung

Z.B. Web-Browser für Anzeige von Web-Seiten, Terminal Server, X Server

Zugriff auf Präsentationslogik über Netzkommunikation

Noch niedrigere Performanz wegen vieler nötiger Netz-Roundtrips Presentation

Model Server

Controller

Event Display

change

read data

change notify

Application Model Server

View

Client

View

Client Controller

Netz

(37)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.39

Präsentationsschicht bei “traditionellen” Web-GUIs

WEB/Application Server HTTP Request

HTTP Response (HTML Page)

„Ultra thin client“

WWW

(38)

public class SimpleServlet extends HttpServlet { public void doGet (HttpServletRequest request,

HttpServletResponse response) { PrintWriter out;

int i = (Integer) request.getAttribute("zahl");

response.setContentType("text/html");

out = response.getWriter();

out.println("<HTML><HEAD><TITLE>");

out.println("Zahl mal zwei");

out.println("</TITLE></HEAD><BODY><P>");

out.println("<P>Ergebnis = " + i*2);

out.println("</P></BODY></HTML>");

}}

www.tum.de/SimpleServlet?3

Zahl mal zwei Ergebnis = 6

SimpleServlet

Basistechnik: Java Servlets

(39)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.41

<html>

<head>

<title>Hello World</title>

</head>

<body bgcolor=#FFFFFF>

<font face="Helvetica">

<h2>Hello World</h2>

<%out.print("<p><b>Hello World!</b></p>"); %>

<hr/>

</font>

</body>

</html>

www.tum.de/HelloWorld.jsp

Hello World Hello World!

HelloWorld.jsp

Basistechnik: JavaServer Pages

(40)

Basistechnik: Forwarding und Including

Servlet A JSP B

JSP C Request

getValue putValue getSession

Session getValue putValue HTTP

Request

forward(Request)

include(Request)

(41)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.43

MVC bei Ultra-Thin Clients

Direkte Umsetzung von MVC scheitert, weil

HTML/HTTP ist seitenorientiert und zustandslos Kommunikation über HTTP-Requests statt Events Kommunikation wird immer vom Browser initiiert

Mögliche Lösung: MVC-2 Architecture

Model

Controller Event

change get data forward

Display

notify

View

1

3

2 5 4

Servlet(s) JSPs

(42)

Client Runtime

Multi-Channel-Architektur beim Ultra-Thin-Client

Presentation Model

notify view models

M V

C

M V

C

View Components

Presentation Controller

get data

change

Portal JSP1 JSP2

3

Web-spezifisch

4

5 6

7

HTML Page View

HTML Form

Web-unabhängig

8

Netz

(43)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.45

Beispiel für Multi-Channel Framework: wingS

Bietet Swing-Programmiermodell für das Web

Nutzt in einer neuen Version zusätzlich AJAX-Ansätze

Ähnliche Ansätze: Rich AJAX Platform (RAP) im Eclipse Framework, Echo2

(44)

AJAX – Asynchronous JavaScript and XML

Ansatz für besser bedienbare, reaktive Web-Anwendungen Browser als Thin-Client

JavaScript als Verarbeitungs- sprache (muss aktiviert sein!) XHTML + CSS + DOM

als GUI-Framework

Datenrepräsentation und Manipulation mit XML + XSLT Datenaustausch über Format

XMLHttpRequest

Vorteile

JavaScript ist universell Es gibt viele Bibliotheken

Nachteile

JavaScript als Sprache

erschwert Programmierung

(45)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.47

Verarbeitungsmodell bei klassischer Web-Applikation

Synchrone Aufrufe Benutzer muss warten

(46)

Verarbeitungsmodell bei AJAX-Applikation

Asynchrone Aufrufe Benutzer kann weiterarbeiten

COMET- Ansätze schaffen über

Tricks auch echte

(47)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.49

AJAX-Frameworks

AJAX-Programmierung „von Hand“ ist extrem aufwändig

Nutzung von JavaScript als Programmiersprache Entwicklungsumgebungen nicht sehr ausgereift

Viele kleine browserspezfische Fehler und Unterschiede

Erstellung von XMLHttpRequest-Objekten, Reaktion auf Antworten, Manipulation der XML-DOM-Repräsentation im Browser ist umständlich

Es gibt eine große Vielzahl von AJAX-Frameworks

Verstecken die unhandlichen Basis-Mechanismen hinter Schnittstellen:

- Bereitstellung von GUI-Widgets

- Einfachere Kommunikation mit dem Server

Programmierung dann i.W. wie bei „traditionellen“ GUIs (Thin Client oder sogar Fat Client), nur mit Hilfe der Sprache JavaScript.

Beispiele: Prototype, ExtJs, SmartClient und viele mehr.

Google Web Toolkit als Compiler-Ansatz

Entwicklung in (Subset von) Java mit gewohnten Werkzeugen Compiler übersetzt Anwendung in JavaScript

(48)

Inhalt

Rekapitulation Teil 1 und 2 Steuerungsschicht

Aufgaben und Charakteristika Dienste und Middleware

Präsentationsschicht

Aufgaben und Charakteristika

Model-View-Controller-Architekturen

Unterstützungsschicht

Zusammenfassung

Literaturhinweise

(49)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.55

Unterstützungsschicht

Die Unterstützungsschicht bietet Querschnittsmechanismen, die in allen restlichen Schichten relevant sind. Dazu gehören

insbesondere:

Fehlermanagement

Verwaltung von Konfigurationsinformationen Authentifizierung und Autorisierung

Internationalisierung

Die Architektur basiert typischerweise auf

Basiskomponenten für gemeinsame Funktionalität

Standard-Aufrufen im restlichen Code (oft gut über Aspects realisierbar oder vom Container übernommen)

(50)

Beispiel: Basiskomponenten für Fehlermanagement und Logging

(51)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.57

Beispiel: Aufruf von Fehlermanagement und Logging

(52)

Beispiel: Authentifizierung und Autorisierung (JAAS)

Anreicherung von Geschäftsobjekten (PersistentObject) um eine Access Control List (Liste von Permission-Objekten)

Mitführen des Benutzers (Principal) in einem Security Context

(Session-Objekt)

(53)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.59

Inhalt

Rekapitulation Teil 1 und 2 Steuerungsschicht

Aufgaben und Charakteristika Dienste und Middleware

Präsentationsschicht

Aufgaben und Charakteristika

Model-View-Controller-Architekturen

Unterstützungsschicht

Zusammenfassung

Literaturhinweise

(54)

Zusammenfassung

Die Steuerungsschicht verwaltet Abläufe und Zustände sowie Kontext und Ressourcen von Geschäftsprozessen.

Sie setzt typischerweise auf den Services der Anwendungsschicht auf.

Als Middleware kommen Workflow Engines zum Einsatz.

Die Präsentationsschicht steuert die Interaktion mit dem Benutzer und zeigt GUI-Elemente sowie Anwendungsdaten an.

Als Architektur kommt typischerweise eine Variante des Model-View- Controller-Architekturmusters zum Einsatz.

Grundlegend lassen sich Fat- und Thin-Clients (Verarbeitungslogik läuft in Laufzeitumgebung auf dem Client) und Ultra-Thin-Clients

(Verarbeitungslogik läuft auf dem Server) unterscheiden.

Die Unterstützungsschicht bietet querschnittliche Mechanismen, beispielsweise für Fehlermanagement, Logging,

Internationalisierung etc.

(55)

Softwarearchitektur verteilter Systeme – 11. Betriebliche Informationssysteme - Teil 3 11.61

Literaturhinweise

[Bi02] Adam Bien: J2EE Patterns, Addison-Wesley, 2002.

[BMR+] Frank Buschmann, Regine Meunier, Hans Rohnert, Peter

Sommerlad, Michael Stal: Pattern-Oriented Software Architecture, Wiley, 1996.

[EJB3] Sun Microsystems: J2EE Website. http://java.sun.com/j2ee, 2005.

[Fow] http://martinfowler.com/eaaDev/PresentationModel.html

[jBPM] jBPM WfE Homepage, http://www.jboss.com/products/jbpm

[Sie02] J. Siegel, An Overview Of CORBA 3.0, Object Management Group, 2002.

[Spr05] Rob Harrop, Jan Machacek: Pro Spring, apress, 2005.

[Spring] Spring Framework Homepage, http://www.springframe-work.org [WfMC] Workflow Management Coalition Homepage, http://www.wfmc.org

Referenzen

ÄHNLICHE DOKUMENTE

Wichtig scheint nur noch – das Praxis- management – die Digitalisierung – eine Angestellte zu haben, die den Patienten erklären, welche Massnahmen wichtig und darum zu machen

Das bessere Ver- ständnis dieser komplexen Zusammen- hänge, insbesondere das Entstehen einer provisorischen Matrix für den Aufbau neuer Hartgewebe, hat weit reichende

Teil: Die Altertümer. Jahrhunderts beim früheren Hochaltare vom Totengräber aufgedecktes &#34;ordentliches ausgemauertes Orab&#34;l) beweist, daß auch hier Verstorbene

Teil: Die Altertümer. Den mehrlachen Ausbesserungen der Kirche fielen alle alten Stücke ihrer ehemaligen Einrichtung zum Opfer. jahrhundert vorhanden, während nach

Durch die frühe Zerstörung der Kirche und wohl nicht am wenigsten durch das Bestreben der Reformierten, sich ein völlig schmuckloses Gotteshaus zu schaffen, ist

ferner ein in Resten erhaltener zweisitziger Stuhl, auf dessen geschnitzten Seiten- wangen außen in % Lebensgröße zwei figuren unter Baldachinen, innen

Aus Sorge vor einem schlechten Image und wegen der eigenen Verwicklung in die aktuellen Probleme des Kosovos, bemühen sich Regierung und Ministerien durch eine Reihe

Oft sage ich dann nichts, doch das liegt nicht daran, dass ich mich für meine Herkunft schäme.. Aber es ist einfach sehr unangenehm zu sagen, dass man Grönländerin ist, wenn