Modulare Anwendungen und die Lookup API Geertjan Wielenga NetBeans Team Deutschsprachige Überarbeitung, Aljoscha Rittner NetBeans Dream Team.

Slides:



Advertisements
Ähnliche Präsentationen
Objektrelationales Mapping mit JPA
Advertisements

Objektrelationales Mapping mit JPA Advanced Topics Jonas Bandi Simon Martinelli.
Cloud42 Dominik Muhler Seminar StuPro cims cims.
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Ein Beispiel in Java.
DI Christian Donner cd (at) donners.com
Java Beans von Raoul Schneider.
Seminar Internetdienste Web 2.0 und Rich Internet Applications (RIA) JavaFX Rainer Scholz.
Imperative Programmierung -Entwicklungswerkzeuge
Objektrelationales Mapping mit JPA Getting Started Jonas Bandi Simon Martinelli.
Threads Richard Göbel.
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Ein Beispiel in Java.
XINDICE The Apache XML Project Name: Jacqueline Langhorst
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Christian Kästner Modellgetriebene Softwareentwicklung Eclipse Modelling Framework.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
JAVA RMI.
Introducing the .NET Framework
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmierung Datensammlung
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
SOMA Service-Oriented Mobile learning Architecture.
Einfach verkettete Listen (OOP)
Coccon das Web-XML-Publishing System Thomas Haller.
Die Persistenzschicht
Erste Schritte mit Eclipse Neues Projekt erstellen (1)
Steuerung externer Komponenten über ein USB-Interface.
Aurich – Jonas Jacobi OSGi Tutorial Aurich – Jonas Jacobi Das OSGi Service Framework Dynamisches Modulsystem für Java Dynamische.
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
Aichinger Christian, Strasser Jürgen. Inhalt JSF EJB Praxis - Integration.
Reiner Ganser Solution Architect 1stQuad Solutions GmbH Presentation Subtitle.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Getting Started Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
JavaServer Faces Urs Frei. Inhalt JSF Funktionsweise Rückblick JSP Bestandteile von JSF So einfach ist die Anwendung (Beispiel) Eclipse im Einsatz (Entwicklungsumgebung)
EPROG Tutorium #4 Philipp Effenberger
Torque in Turbine Team 4 Josef Bohninger Thomas Lindenhofer
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Voyager Eigenschaften/Vorzüge Universalität: –ROI-Modelle: CORBA, RMI, DCOM –verschiedene Namens-, Verzeichnisdienste Nachrichtentypen: synchron, oneway,
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Reflection API1 Motivation Reflection API Core Reflection API: java.lang.reflect Seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek Ermöglicht:
Theorie. Was ist Drupal? Content-Management-System, Open Source Software Hauptanwendung in der Organisation von Websites In PHP geschrieben und wird als.
Import java.util.*; Hilfsklassen, die man eigentlich immer braucht.
Die Visual Library API Anton Epple
Source Talk Tage 2008 NetBeans Rich Client Platform NetBeans RCP NetBeans Rich Client Platform Anton Epple Göttingen, Source Talk Tage.
Maven NetBeans Platform RCP Development Aljoscha Rittner Sepix GmbH, NetBeans Dreamteam Member
Verteilte Anwendungen: J2EE
CMIP6-DICAD – FU Berlin Thomas Schartner
WS2016: Container von A bis Z
OpenLayers FEATURES DATENQUELLEN
Google App Engine - Technische Stärken und Schwächen
Web-Interface for Multi-FPGA Board Pamette
Das IT - Informationssystem
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Universität zu Köln | Hauptseminar Annotationssysteme
Dynamisches Laden von Klassen
Tobias Fritz Eine Einführung in die 2D Spieleprogrammierung mit Java und Slick. Unterlagen:
Gewachsene Architektur Das kann nicht funktionieren!
1.
Programmierung und Vererbung in Java
9. Vererbung und Polymorphie
 Präsentation transkript:

Modulare Anwendungen und die Lookup API Geertjan Wielenga NetBeans Team Deutschsprachige Überarbeitung, Aljoscha Rittner NetBeans Dream Team

Certified Engineer Course Die Notwendigkeit modularer Anwendungen

Certified Engineer Course Die Notwendigkeit modularer Anwendungen

Certified Engineer Course Die Notwendigkeit modularer Anwendungen

Certified Engineer Course Die Notwendigkeit modularer Anwendungen Anwendungen werden immer komplexer Sie werden aus Einzelstücken zusammen gesetzt > Frameworks, 3 rd Party Bibliotheken, Legacy Bibliotheken Entwicklung durch verteilte Teams Komponenten mit umfangreichen Abhängigkeiten “Gesunde” Architektur erwartet: > Wissen über Abhängigkeiten und > Die Verwaltung der Abhängigkeiten

Certified Engineer Course Die Entropie von Software Version 1.0 ist sauber entwickelt...

Certified Engineer Course Die Entropie von Software Version einige zweckmäßige Erweiterungen und Hacks......wir werden das in 2.0 schon wieder richten.

Certified Engineer Course Die Entropie von Software Version nun ja...aber...es läuft!

Certified Engineer Course Die Entropie von Software Version Hilfe! Jeder reparierte Fehler erzeugt zwei weitere!

Certified Engineer Course Die Entropie von Software Version 4.0 ist sauber designed. Eine komplette Neuentwicklung. Zwar ein Jahr zu spät, aber es läuft...

Certified Engineer Course Die Entropie von Software Version Das erinnert mich doch an etwas?....

Certified Engineer Course Die Entropie von Software Fortsetzung folgt....

Certified Engineer Course Modulare Anwendungen Wissen um ihre Komponenten zur Laufzeit Dürfen Komponenten während der Laufzeit hinzufügen, entfernen und neu laden Müssen Abhängigkeiten zwischen Komponenten erkennen Bieten API Vereinbarungen zwischen Komponenten Laufen in einem Runtime Container

Certified Engineer Course Was macht ein Runtime Container? Lebenszyklus der Anwendung > Startet und beendet die Anwendung > (De)installiert Module Modul Verwaltung Classloading und Modulisolation Service Registry & Zugriffs API

Certified Engineer Course Was ist der NetBeans Runtime Container?

Certified Engineer Course Demo 1: NetBeans Runtime Container

Certified Engineer Course Der NetBeans Runtime Container Fünf NetBeans Platform Module Nur diese 5 zusammen: compile & run, mehr wird nicht benötigt. Ausschließlich diese Module werden von allen NetBeans Platform Anwendungen benötigt. NetBeans Platform Anwendungen müssen nicht (Rich) Client Applikationen sein Es sind auch modulare Server Anwendungen denkbar > z.B. mit dem CronJob Plugin zeitgesteuerte Dienste ansteuern

Certified Engineer Course Was ist ein NetBeans Module? Nur ein JAR File – keine Magie > Es besitzt spezielle Manifest-Einträge für das NetBeans Modul- System, die in den > Project Properties für Module Projekte bearbeitet werden können. Verteilt in einem NBM File > Grundsätzlich ein signiertes JAR File > Enthält Metadaten über das Modul > Darf 3 rd Party JARs enthalten, oder alles andere Notwendige für das Modul zur Installation

Certified Engineer Course Demo 2: Ein NetBeans Modul erstellen

Certified Engineer Course Demo 3: Verteilen eines NetBeans Moduls

Certified Engineer Course NetBeans Modul Manifest Manifest-Version: 1.0 Ant-Version: Apache Ant Created-By: 1.5.0_14-b03 (Sun Microsystems Inc.) OpenIDE-Module-Public-Packages: - OpenIDE-Module-Module-Dependencies: org.jdesktop.layout/1 > 1.7, org.n etbeans.api.java/1 > 1.18, org.netbeans.api.java.classpath/1 > 1.0 OpenIDE-Module-Java-Dependencies: Java > 1.5 OpenIDE-Module-Build-Version: OpenIDE-Module-Specification-Version: OpenIDE-Module: org.netbeans.modules.java.editor/1 OpenIDE-Module-Implementation-Version: 5 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/java/editor/Bundle.properties

Certified Engineer Course NetBeans Module Manifest OpenIDE-Module-Layer: org/netbeans/modules/java/editor/resources/layer.xml OpenIDE-Module-Requires: org.openide.modules.ModuleFormat1 OpenIDE-Module-Install: org/netbeans/modules/java/editor/JavaEditorModule.class AutoUpdate-Show-In-Client: false

Certified Engineer Course Runtime Container Aufgaben Sicherstellen, dass Abhängigkeiten aufgelöst sind > Auch mit der Notwendigkeit von vorgegebenen Versionen Verhindern von ungültigen Abhängigkeiten > Falsche Version, falsches Betriebsystem (→ Token) Erlauben von gültigen Abhängigkeiten “Booten” von Komponenten während der Laufzeit

Certified Engineer Course Modul Abhängigkeiten erzwingen

Certified Engineer Course Demo 4: Abhängigkeits Verwaltung

Certified Engineer Course Verwende vorhandene Runtime Container Ruhe in Frieden, Home-made Frameworks Home-made Framework

Certified Engineer Course Modul Abhängigkeiten

Certified Engineer Course Trennung der Implementation von der API Die API kann in einem Modul deklariert werden, die Implementation in einem anderen Modul Module verwenden die API nur, wenn die Abhängigkeit dazu deklariert wurde

Certified Engineer Course Modulare Bibliotheken

Certified Engineer Course Abhängigkeiten ermitteln ? ● Wie findet die SpellChecker API sein Implementation?

Certified Engineer Course Abhängigkeiten ermitteln ? Wie findet die SpellChecker API sein Implementation? ● Oder generell, wie ermöglicht es NetBeans den Modulen sich in der Applikation zu finden?

Certified Engineer Course Der Java Extension Mechanismus (nahezu) Im JDK seit 1.3 Einfach mit JDK 6's ServiceLoader.load() Deklarative Registrierung Text Datei(en) in META- INF/services > Name ist Interface > Inhalt ist FQN der Implementation

Certified Engineer Course Demo 5: ServiceLoader, die Java-Lösung Das Interface public interface TextFilter { String process(String s); } Die Implementation public class UpperCaseFilter implements TextFilter{ public String process(String s) { return s.toUpperCase(); } }

Certified Engineer Course Demo 5: ServiceLoader, die Java-Lösung Registrierung der Implementation > Textdatei in METAINF/services Load the Interface String s = textArea.getText(); ServiceLoader filters = ServiceLoader.load(TextFilter.class); for (TextFilter textFilter : filters) { if (filters != null) { s = textFilter.process(s); } } textArea.setText(s);

Certified Engineer Course Demo 6: Lookup/Dependency Verwaltung String s = textArea.getText(); Collection filters = Lookup.getDefault().lookupAll(TextFilter.class); for (TextFilter textFilter : filters) { if (!filters.isEmpty()) { s = textFilter.process(s); } textArea.setText(s);

Certified Engineer Course Die NetBeans Registrierung Vereinfachte Registrierung durch Annotationen > Keine selbstgeschriebene Plain-Text-Dateien mit Tippfehlern > Registrierungsinformation direkt an der annotierten Klasse > Refactoring funktioniert > Trotzdem Deklarativ, weil zur Compilezeit die Annotationen ausgewertet werden.

Certified Engineer Course Die NetBeans Registrierung Registrierung und Implementation in einer Klasse import org.netbeans.spi.TextFilter; import (service=TextFilter.class) public class UpperCaseFilter implements TextFilter{ public String process(String s) { return s.toUpperCase(); } }

Certified Engineer Course Lookup – Die NetBeans Lösung Eine kleine von NetBeans unabhängige Bibliothek > Teil des NetBeans org-openide-util.jar > org.openide.util.Lookup Arbeitet mit jeder Java Version (im Gegensatz zum ServiceLoader) Ein Lookup ist dynamisch > Listener für Änderungen Lookups können beliebig instantiiert werden > Erzeuge eines und nutze es Lookups können kombiniert werden > ProxyLookup vereinigt Lookups und reicht Event-Nachrichten durch.

Certified Engineer Course Ein Lookup ist ein „Aquarium“ für Objekte Ein „Biotop“ in dem Objekte rein und raus „schwimmen“ Man erkennt, welche „Arten“ von Objekte hinzukommen oder verschwinden Mit einem Befehl bekommt man alle Objekte einer „Art“ als Collection Bazz.classBazz.class Foo.classFoo.class Bar.classBar.class Lookup

Certified Engineer Course Nun... Was ist so besonderes daran? ? Was wäre, wenn Objekte Lookups besäßen? Was wäre, wenn Lookups verkettet werden könnten?

Certified Engineer Course Objekte, die selbst Lookups besitzen! TopComponent Node DataObject

Certified Engineer Course Demo 7: TopComponent Lookup

Certified Engineer Course Demo: TopComponent Lookup SaveActionEditor Gib mir ein SaveCookie s s == null ? Ja Deaktiviere die Action Nein Aktiviere die Action Bei Aufruf: s.save() interface SaveCookie { void save(); }

Certified Engineer Course Demo 8: TopComponent Lookup private InstanceContent content;... content = new InstanceContent(); associateLookup(new AbstractLookup(content));... content.add(s);

Certified Engineer Course Demo 8: TopComponent Lookup private Lookup.Result result;... result = Utilities.actionsGlobalContext().lookupResult(String.class); result.addLookupListener(new LookupListener() public void resultChanged(LookupEvent e) { textArea2.setText(result.allInstances().toString()); } });

Certified Engineer Course Zusammenfassung Das Lookup wird an jeder Ecke der NetBeans APIs genutzt Es wird verwendet für > Die deklarative Registrierung von Global Services > „Instantiation on Demand“ – Reduziert Startzeit > Trennung von API und Implementation  Ein Modul bietet eine API  Ein anderes Modul stellt die Implementation > Kontextsensitivität, z.B., Action-Aktivierung Es ist nahezu die wichtigste API auf der NetBeans Platform

Certified Engineer Course Die Notwendigkeit modularer Anwendungen

Certified Engineer Course Die Konzepte im Überblick Anwendungsentropie Modularität Abhängigkeits Verwaltung Runtime Container NetBeans Modul NBM Datei API vs. Implementation META-INF/services ServiceLoader vs. Lookup Listener für Lookups Kontextsensitivität mit Lookups

Certified Engineer Course Fragen & Antworten