Heute war der dritte Tag der Konferenz. Noch ein paar Stunden und dann ist alles wieder vorbei. Die Müdigkeit macht sich bemerkbar, und wir fangen an, auf Reserve zu laufen. Zu den Themen des heutigen Tages gehörten:
- Mylyn
- Groovy
- Semantisches Web
- SOA
- OSGi
Erik Jan über Mylyn
Es ist nun der dritte Tag der JavaOne und die ersten Anzeichen von Müdigkeit machen sich bemerkbar, so dass ich heute nicht an den nächtlichen Bird of a Feather-Sitzungen teilgenommen habe. Ich habe aber eine Sitzung über Mylyn besucht. Ich habe schon früher darüber gebloggt, aber ich war beeindruckt von dem, was sie daraus gemacht haben. Sie haben eine Vielzahl von Konnektoren für verschiedene Problemverfolgungssysteme hinzugefügt. Eines der Dinge, die ich vermisst habe und die sie jetzt angekündigt haben, ist die Möglichkeit, automatisch die Zeit zu protokollieren, die an einem Problem gearbeitet wurde. Außerdem haben sie eine Perspektive geschaffen, in der Sie mehr Kontext für Ihre Aufgabe behalten können, so dass alle Webseiten, die Sie sich angesehen haben, auch mit Ihrer Aufgabe gespeichert werden.
Mit einer Demo zeigte der Vortragende eine weitere großartige Anwendung für Mylyn. Wenn Sie z.B. zu zweit programmieren und einer der beiden nach Hause geht, können Sie ganz einfach einen Patch der Änderungen erstellen und ihn zusammen mit der Aufgabe speichern, ähnlich wie den Kontext. Ihr Kollege kann die Arbeit dann ganz einfach auf seinem eigenen Computer fortsetzen.
Klasse Hund {}
Dog.metaClass.bark = { -> "Wuff" }
def d = new Hund()
print d.bark()
==> Wuff
Überschreiben Sie die Methode zur Laufzeit (Hinweis: Dies ist keine gute Idee...)
Integer.metaClass.plus = { Integer i -> 1 }
3 + 4
==> 1
Außerdem erklärte er einige nette methodMissing-Tricks. Im nächsten Codebeispiel wird die fehlende Methode zur Klassendefinition hinzugefügt, so dass beim nächsten Mal die Strafe für das Durchlaufen von methodMissing entfällt.
Klasse Hund {}
Dog.metaClass.methodMissing = { String name, args ->
def cached = { Object[] a -> println "Hunde haben keinen $Namen"}
Dog.metaClass."$name" = zwischengespeichert
cached.call(args)
}
new Hund().quaken()
Alles in allem zeigte Guillaume, welche Vorteile Groovy gegenüber Java hat und welchen Beitrag Groovy zur Entwicklung Ihrer aktuellen Unternehmensanwendungen leisten kann.
Nach dem Mittagessen ging ich zur Podiumsdiskussion über Semantic Web. Hier gab es eine Podiumsdiskussion mit 5 Semantic Web-Gurus, die einige coole Anwendungen vorstellten und Fragen aus dem Publikum beantworteten. Es wurde schnell klar, dass der Schwerpunkt derzeit auf dem Semantic Web als soziales Netzwerk liegt. Viele der vorgestellten Anwendungen drehten sich um dieses Thema.
Nach Ansicht dieser Gurus besteht das Problem mit den derzeitigen sozialen Netzwerken darin, dass es zu viele davon gibt und jedes von ihnen zentralisiert ist und auf seiner eigenen Insel lebt. Das Semantic Web kann in dieser Hinsicht helfen. Es gibt keine konkurrierenden Standards, alles ist interoperabel, und es ist dezentralisiert, alles wird durch seine eigene URI identifiziert. In einer Demo wurde ein Adressbuch gezeigt, in das Sie sich selbst eintragen und so leicht Zugang zu Ihren Freunden und den Freunden Ihrer Freunde usw. erhalten können.
Eine weitere große Ankündigung war, dass Yahoo! alle seine Seiten mit RDFa versehen und über seine APIs verbreiten wird. Dies ist ein großer Schritt, der Yahoo! zu einem semantischen Unternehmen macht, das sich anderen Unternehmen wie Reuters und dem W3C als Unterstützer semantischer Standards anschließt. Das Hinzufügen von RDF bedeutet das Hinzufügen von semantischen Tags zu den Seiten. Ein semantisches Tag unterscheidet sich von einem normalen Blog-Tag dadurch, dass es den Daten eine Bedeutung gibt, z.B. ob es sich um einen Ort, eine Organisation, eine Person oder etwas ganz anderes handelt.
- Die Granularität von Klassen und Paketen ist zu klein für reale Anwendungen
- Gefäße dienen der Verpackung, können aber nicht zur Zugangsbeschränkung verwendet werden
- Schwerwiegende Probleme wie geteilte Pakete
- Keine Unterstützung für die Versionierung
- Hat kein geeignetes Modell für die Erweiterung/Kollaboration
Jetzt bietet das OSGi-Framework Folgendes:
- Versand von Klassenladungen basierend auf dem Paketnamen
- Ermöglicht mehrere Versionen der gleichen Klasse in einer VM
- Jars können exportierte Pakete oder private Pakete enthalten
- Bündel == Jar (Manifest enthält Metadaten)
- Dienste bieten ein kollaboratives in-VM SOA-Modell
Sie enthält also alles, was wir brauchen. Wie konvertieren Sie also Ihre Anwendung? Nun, einen Schritt nach dem anderen.
- Analysieren Sie, welche Abhängigkeiten zwischen den Jars bestehen.
- Erstellen Sie ein Projekt mit Ihrer Anwendung und all ihren abhängigen Jars
- Erstellen Sie einen Bundle-Aktivator, der main aufruft (alle Bibliotheken in ein Bundle einbinden).
Ein funktionierendes Bundle (unabhängig von der Größe) ist eine gute Ausgangsbasis und ermöglicht es, die abhängigen Jars nach und nach durch Bundles zu ersetzen. Lassen Sie es funktionieren! Jetzt, da es eine funktionierende Version gibt, beginnen Sie damit, das Bundle in kleinere Bundles aufzuteilen. Derzeit gibt es mehrere Open-Source-Projekte, die OSGi-Metadaten bereitstellen:
- Apache (Derby, Struts, Felix, usw.)
- Sämtlicher Eclipse-Code
- Codehaus Groovy
Um es noch schöner zu machen, gibt es auch eine Reihe von Repositories online, so dass Sie nicht die ganze Arbeit selbst machen müssen. Das SpringSource Enterprise Bundle Repository ist ein Beispiel dafür. Leider gibt es ein paar Fallstricke wie z.B.:
- Zu viel auf einmal (Machen Sie die gesamte Anwendung OSGi-fähig, modularisieren Sie einen Teil, testen Sie, und iterieren Sie in kleinen Schritten)
- Dynamisches Laden von Klassen (Meistens werden benutzerdefinierte Klassenlader in Anwendungen missbraucht, beseitigen Sie sie)
Seien Sie also vorsichtig und fangen Sie klein an. Für diejenigen unter Ihnen, die sich einige OSGi-Anwendungsmodelle ansehen möchten, sehen Sie sich die folgenden Beispiele an:
- Spring-DM (früher Spring-OSGi genannt)
- Apache iPOJO
- Service Anwendungs-Toolkit
- OSGi Deklarative Dienste
Verfasst von
Erik Jan de Wit
Contact



