Startseite > Techblog > Artikel mit dem Tag: frameworks
are

In meisten Fällen beim Entwickeln von Confluence Plugins ist es nicht notwendig die von Confluence zur Verfügung gestellten Core-Klassen (z.B. diverse Manager: ContentEntityManager, SmartListManager oder Daos: LabelDao, PageDao) zu überschreiben. Zwei Paradebeispiele, bei denen es allerdings unumgänglich wäre, sind die Änderung des Datenbankschemas oder die Erweiterung der Managerfunktionalität.

Atlassian Confluence selbst bietet neben dem Erweitern von Actions mittels atlassian-plugin.xml (siehe Erweitern von Actions in Confluence) keinerlei Möglichkeiten direkt die Core-Klassen zu überschreiben. Aus diesem Grund ist es notwendig in die Spring Context-Dateien, die für die Registrierung der einzelnen Klassen verwendet werden, einzugreifen. Dies kann auf zwei Wegen bewerkstelligt werden:

  • Man entpackt das Confluence JAR, nimmt die Änderungen vor und erzeugt ein neues Archiv.
  • Man überschreibt die web.xml und verweist auf die eigenen Context-Dateien.

Die erste Variante erweist sich als deutlich unpraktikabel, da dadurch offensichtlich das Testen, die Wartbarkeit sowie die Updatefähigkeit leiden würden.

Bei der zweiten Möglichkeit hingegen verhält es sich etwas anders, da das JAR-Archiv zu keiner Zeit direkt manipuliert wird. Wie das funktioniert, wird in den nachfolgenden zwei Schritten demonstriert.

1. Anpassung der web.xml

In der confluence/WEB-INF/web.xml befindet sich folgender Abschnitt (hier verkürzt dargestellt):

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:/databaseSubsystemContext.xml,
			...
			classpath:/applicationContext.xml,
			...
			classpath:/jmxContext.xml
		</param-value>
	</context-param>

Hevorzuheben wären die Dateien databaseSubsystemContext.xml, die für die Entity-Mappings zuständig ist, sowie die applicationContext.xml, die die Registrierung sämtlicher Manager- und Dao-Klassen vornimmt.

Nun muss lediglich der Pfad bzw. der Name der zu bearbeitenden Datei geändert werden. Prinzipiell ist es im übrigen auch möglich eine neue Context-Datei einzutragen, in der zusätzliche Beans registriert werden können.

2. Context-Dateien erstellen und in den Classpath einbetten

Als Ausgangspunkt beim Erstellen einer neuen Context-Datei bietet sich an den Inhalt der anzupassenden Datei zu kopieren, um darin die gewünschten Änderungen vorzunehmen. Wie die einzelnen Anpassungen bzw. Erweiterungen einer Spring-Bean vorzunehmen sind, ist aus der sehr guten, einschlägigen Dokumentation von Spring zu entnehmen. (siehe Spring Dokumentation)

Abschließend verbleibt noch das Erzeugen eines JAR-Archivs und das Kopieren jenes in das confluence/WEB-INF/lib Verzeichnis des Apache Tomcats.

Kommentar Feed Trackback URL
mro

Mit dem Siegeszug von AJAX ist zugleich auch die Anzahl verfügbarer
Javascript-Frameworks explodiert.
Die Entwicklung der diversen Frameworks ist mittlerweile so weit fortgeschritten, daß es ein “bestes” Framework nicht mehr gibt.

Vielmehr setzen die “großen” unter den zahllosen Frameworks unterschiedliche Schwerpunkte und sind für verschiedene Anwendungsszenarien konzipiert. Dabei ist nicht jedes Framework für jeden Einsatzzweck gleichermaßen geeignet.

jQuery

Das zuletzt am schnellsten gewachsene Framework was die Anzahl der Nutzer angeht, ist jQuery. Mittlerweile ist es das meistverwendete Framework überhaupt. jQuery verfolgt dabei neben dem “schneller, einfacher” Grundkonzept aller Frameworks den Ansatz, auch Anwendern ohne tiefgehende Javascript-Kenntnisse die Entwicklung relativ komplexer JS-Applikationen zu ermöglichen.

Der Fokus von jQuery liegt auf DOM-Manipulationen, die mit jQuery so einfach zu realisieren sind wie mit kaum
eimem anderen Framework. Da alle jQuery-Funktionen das jQuery-Objekt zurückgeben, können die
Funktionen miteinander verkettet werden, wodurch die Lesbarkeit und Verständlichkeit des Codes
stark erhöht wird.

$("div.test").add("p.quote").addClass("blue").slideDown("slow");

jQuery zielt hauptsächlich auf die Standard-Anwendungsfälle, die in aktuellen Web-Frontends auftauchen:
Ausklappmenüs, Accordeonfunktionen, Tabs, Tooltips, Formularvalidierung, Drag&Drop, AJAX etc.

Diese Standard-Anwendungen sind in der Umsetzung so einfach wie möglich gehalten, die Lernkurve bei jQuery ist daher recht flach und es stellen sich schnell erste Erfolge ein. Die 2000 frei verfügbaren Plugins bieten vorgefertigte Lösungen für nahezu alle denkbaren Anwendungsfälle allerdings in unterschiedlicher Qualität.

Aufgrund des eigenen Namensraums kann jQuery parallel zu allen anderen Frameworks betrieben werden.
Was die Performance angeht ist jQuery spätestens seit Version 1.3, mit der die Sizzle Selektor-Engine eingeführt wurde, führend unter den JS-Frameworks.

Prototype

Prototype ist eines der ältesten Frameworks (seit 2005) und hat dementsprechend großen Einfluss
auf die nachfolgenden Generationen gehabt. (z.B. MooTools)
Die Popularität von Prototpe ist nach wie vor ungebrochen, u.a. wird es zusammen mit Ruby on Rails ausgeliefert.
Prototype erweitert Javascript um zahlreiche Funktionen und verfolgt einen objektorientierten Ansatz, der die Nachbildung von eigenen, instanziierbaren Klassen sowie Vererbung erlaubt. Ein eigenes AJAX-Objekt steht zur Verfügung, ebenso wie JSON-Unterstützung.

Die umfangreiche Bibliothek eignet sich mit ihrer breiten inhaltlichen Ausrichtung zeichnet sich durch eine qualitativ hochwertige Codebasis und eine hohe Flexibilität aus. Allerdings erkauft man sich diese Flexibilität auch mit einem relativ hohen Einarbeitungsaufwand, Frameworks wie JQuery machen es dem Einsteiger in diesem Punkt leichter. Die gute Dokumentation hilft allerdings in den meisten Fällen über die auftauchenden Hürden hinweg.

Prototype bringt von Hause aus keine Widgets und Funktionen für visuelle Effekte mit, diese können jedoch über die Erweiterung scriptaculous zusätzlich eingebunden werden. Zudem stehen in der Prototype Extension Library knapp 150 Erweiterungen und Widgets zur Verfügung.
Nachteile von Prototype sind die mäßige Performance insb. in den verschiedenen Versionen des IE, teilweise ist Prototype um den Faktor 6 langsamer als die Konkurrenz (JQuery).

Google Web Toolkit (GWT)

Das Google Web Toolkit (GWT) verfolgt einen gänzlich anderen Ansatz als die anderen Javascript-Frameworks.
Das GWT bietet eine Java-Bibliothek, die es ermöglicht, AJAX-Anwendungen in Java zu schreiben und
den Bytecode dann in Java-Script kompilieren zu lassen. Dadurch kann die komplette Client/Server-Entwicklung auf Java-Basis erfolgen. Die Web-Applikation (gleich ob mit oder ohne AJAX) wie eine Desktop-Applikation im Java-Umfeld erstellt, die Oberflächenprogrammierung ähnelt dabei Swing. Seit Version 1.5 wird auch Java 5 voll unterstützt.

Dieses Java-basierende Konzept unterscheidet das GWT fundamental von allen anderen Frameworks aus dem Bereich
und bietet eine Reihe von Vorteilen:

  • es können alle bekannten Entwicklertools aus dem Java-Umfeld eingesetzt werden, incl. JUnit Tests und Debugger
  • Fehlermeldungen zur Compilezeit
  • es sind im Prinzip keine Javascript-Kenntnisse erforderlich
  • Aktualisierung des GWT genügt, um sich aktuellen (Browser)-Entwicklungen anzupassen

Auch an weitere Merkmale aus dem Enterprise-Segment wurde gedacht: So ist eine einfache Internationalisierung über Property-Dateien möglich und zahlreiche vorgefertigte Widgets stehen einsatzbereit zur Verfügung.
Die asynchrone Kommunikation mit dem Server verläuft über Remote Procedure Calls und XML oder JSON.

Zum Testen steht ein Hosted Mode zur Verfügung, dieser führt den Java-Bytecode direkt aus und ermöglicht unmittelbares Testen, ohne den “Umweg” über Javascript. Der Web Mode ist dagegen für die Produktivumgebung gedacht und arbeitet mit dem generierten Javascript.

Auch Ansätze zur Barrierefreiheit sind vorhanden. So wird über History-API die volle Funktionsfähigkeit des zurück-Buttons des Browsers auch bei AJAX-Aufrufen sichergestellt, zudem wird eine reine Tastaturbenutzung und Schriftgrößeneinstellung ermöglicht.

Im die Performance zu steigern, erzeugt der Javascript-Compiler pro Browser und Sprache eine eigene Javascript-Datei. Dadurch werden geringe Dateigrößen ermöglicht. Außerdem werden Icons automatisch zu einem Einzelimage (ImageBundle) zusammengefasst, wodurch die Zahl der HTTP-Requests und damit die Ladezeit drastisch reduziert werden kann.

Für das GWT stehen zahlreiche Widgets und Extensions auch von Fremdanbietern zur Verfügung.

Google Dienste wie Google Maps werden können über die API nahtlos integriert werden, auch Google Gears wird unterstützt.
Die Klassen des GWT können bei Bedarf auch mit handgeschriebenen JavaScript innerhalb des Java-Quellcodes gemischt werden (JavaScript Native Interface (JSNI))

Aufgrund seiner Konzeption als Java-Bibliothek ist das GWT in erster Linie für umfangreiche Javascript-basierende Applikationen wie bspw. GMail gedacht. Als bloßes Hilfsmittel für DOM-Manipulationen ist es überdimensioniert und der Einarbeitungsaufwand ist zu hoch. Für Entwickler aus dem JAVA-Umfeld aber durchaus interessant, sofern die Projekte massiven Javascript-Einsatz erfordern und Java-Entwicklungswerkzeuge genutzt werden sollen.

Kommentar Feed Trackback URL

Tag Cloud

Unsere Themen

Kommentare

  • SharePoint_Team: Rückblick zum Treffen der .NET Usergroup Dresden am 24.02.2010: im #Communardo #Techblog...
  • TorstenHu: Rückblick zum Treffen der .NET Usergroup Dresden am 24.02.2010: im #Communardo #Techblog...
  • SharePoint_Team: Neuer Blogpost zur #BastaCon im #Communardo #TechBlog: http://tinyurl.com/yjqyqpb This comment was...
  • SharePoint_Team: Nur noch etwa 1 Stunde, dann beginnt die .NET Usergroup… http://bit.ly/dxDoKg This comment was...
  • SharePoint_Team: RT @TorstenHu: ViS is waiting for an operation oder Warum Copy & Paste schlecht ist: #Communardo...

Twitter