Apache Sling Models – Teil 2 – Hands-On

Mit der neuen Erweiterung Apache Sling Models bietet Apache Sling unter anderem die Möglichkeit über Annotations Objekte mit Inhalten des Repositories zu befüllen. In diesem Hands-On wird erklärt, wie Apache Sling Models anhand konkreter Beispiele in der aktuellen Version Adobe AEM 5.6.1 eingesetzt werden kann und was dabei zu beachten ist. Eine Einführung in das Thema gibt es im ersten Teil dieser Blog-Serie.

Apache Sling Models ist neu
Apache Sling Models ist ganz frisch und daher noch nicht praxiserprobt. Dieses Hands-On ist eine Aufforderung diese Erweiterung zu testen. Wie gut sich diese in der Praxis bewährt, wird sich noch zeigen.

Benötigte OSGI-Bundles
AEM 5.6.1 bringt die OSGI-Bundles für Apache Sling Models nicht mit. Die entsprechenden Bundles müssen daher installiert werden. Apache Sling Models selbst besteht aus den folgenden beiden Bundles:

org.apache.sling:org.apache.sling.models.impl:1.0.0
org.apache.sling:org.apache.sling.models.api:1.0.0

Damit die Models direkt in JSPs verwendet werden können, gibt es eine Erweiterung der Sling JSP Scripting Taglib um den Tag sling:adaptTo. Damit dieser Tag verwendet werden kann, muss das entsprechende Bundle in AEM 5.6.1 mit der aktuellsten Version aktualisiert werden:

org.apache.sling:org.apache.sling.scripting.jsp.taglib:2.2.0

Die URI der neuen Version der Taglib unterscheidet sich von der älteren und enthält neu keine Versionsnummer mehr. Die neue Taglib muss wie folgt registriert werden kann (beispielsweise über ein global.jsp).

<%@taglib prefix="sling" uri="http://sling.apache.org/taglibs/sling" %>

Eigenes OSGI Bundle anpassen
Damit die Models durch die neue Erweiterung in einem eigenen OSGI-Bundle verarbeitet werden können, müssen im Manifest des Bundles die Models respektive Packages angegeben werden:

<Sling-Model-Packages>
 com.namics.example.sling.models
</Sling-Model-Packages>

Code-Beispiel
Im OSGI-Bundle kann nun ein POJO erzeugt werden, welches mit den entsprechenden Annotations zum Sling Model wird.

@Model(adaptables = Resource.class)
public class Example {

    @Inject
    private String title;

    public String getTitle() {
        return title;
    }

}

Dieses Beispiel lässt sich nochmals vereinfachen. Es wird keine konkrete Implementierung des Models benötigt, ein Interface genügt:

@Model(adaptables = Resource.class)
public interface Example {

    @Inject
    public String getTitle();

}

In einem entsprechenden JSP kann dann auf dieses Objekt zugegriffen werden:

<%@include file="/apps/sling-models-example/global.jsp" %>
<sling:adaptTo adaptable="${resource}" adaptTo="com.namics.example.sling.models.Example" var="model"/>

<h2>${model.title}</h2>

In einer entsprechenden AEM-Komponente mit einem Dialog, welcher eine Property title schreiben kann, kann Apache Sling Models dann konkret getestet werden. Der Titel wird automatisch anhand des Namens der Methode oder Attributes geladen, soweit dieser über @Inject annotiert ist.

Dokumentation
Der folgende Link zu Apache Sling bietet weitere Details zu Apache Sling Models.

Erstes Fazit
Apache Sling Models ist eine interessante Erweiterung von Apache Sling. Sie bietet gute Möglichkeiten, um Adobe AEM/CQ Code besser zu strukturieren und die Qualität in Projekten zu erhöhen. Zudem lässt sich Apache Sling Models über ein Service Provider Interface (SPI) auch für projektspezifische Belange erweitern.

Apache Sling Models – Teil 1 – Vorstellung

Apache Sling ist ein Web-Framework und Basis von Adobe CQ/AEM. Es bietet eine nahtlose Integration zum JCR-Repository Apache Jackrabbit über die eigene Resource-API. Mit der neuen Erweiterung Apache Sling Models bietet Apache Sling nun die Möglichkeit über Annotations Objekte mit Inhalten eines Repositories zu befüllen oder auch OSGI-Services zu injizieren. Über einen JSP-Tag lässt sich ein solches Objekt erzeugen und in einem JSP-Template darauf zugreifen.

Welche Probleme löst Apache Sling Models?
Apache Sling Models basiert auf dem Adapter-Interface von Sling. Damit lassen sich beliebige Objekte in andere transformieren (adaptTo), soweit die entsprechende Transformation unterstützt wird. Dies wird auch durch Apache Sling Models verwendet. Ein Sling Resource-Objekt, welches beispielsweise Properties eines Blog-Eintrages enthält, kann mit resource.adaptTo(Example.class) über Sling Models direkt in ein entsprechendes POJO transformiert werden. Das POJO selbst hat abgesehen von Annotations keine Abhängigkeiten zum Sling Framework. Es lässt sich so beispielsweise besser mit JUnit testen und wird insgesamt einfacher.

Aktuelle Praxis
In unseren aktuellen Adobe AEM/CQ-Projekten werden ähnliche Ansätze, wie Apache Sling Models bietet, bereits verwendet. So verwendet Namics seit einigen Jahren eine eigene, auf Annotations basierendes Bibliothek. Ein wichtiger Vorteil für uns ist da die Trennung von Code und Templating. Die JSPs können ausschliesslich als Templates verwendet werden und die Logik ist in Java-Code enthalten. Dies erhöht die Code-Qualität einerseits durch das Design, andererseits auch durch bessere Testing-Möglichkeiten.

Beispiel
Das folgende Beispiel zeigt, wie ein einfaches Sling Model aussehen und verwendet werden kann.

@Model(adaptables=Resource.class)
public class Example {

@Inject
private String title;
}

Example example = resource.adaptTo(Example.class);

Im zweiten Teil dieser Blog-Serie wird das Beispiel näher erklärt und gezeigt, wie die ersten Schritte mit Apache Sling Models in AEM 5.6.1 durchgeführt werden können.

Welcome to Sidekick

Adobe Sidekick

Adobe Sidekick

Adobe stellt in seinem aktuellen Partner Newsletter Sidekick vor, das „erste interaktive und digitale Magazin für Adobe Experience Manager Entwickler und Architekten“.

The title of the magazine refers to the toolbox authors use to build rich and engaging content. The same toolbox that developers are building, enhancing and/or modifying components for as part of the overall delivery of an Adobe Experience Manager implementation.
But Sidekick actually refers as well to the more literal meaning of the word, being yet another, community driven, ‚assistant‘ to our developers and architectects on top of the communication and information that Adobe offers around Adobe Experience Manager.

Adobe Sidekick (Ausgabe 0) gibt es als interaktives Magazin für Apple und Android Tablets, sowie als statisches PDF für den Desktop.

Sidekick Apple iTunes
Sidekick Google Play
Sidekick PDF

Schnelles Deployment in CQ mit den Sling IDE Tools

An der AdaptTo() 2013 wurde das erste Mal über die neuen Sling IDE Tools berichtet. Der Vortrag von Robert Munteanu gab einen guten Einblick über den aktuellen Stand und die Vision dahinter. In diesen Blogbeitrag berichte ich von den ersten Erfahrungen bei der CQ Entwicklung mit den Sling IDE Tools.

Die Sling IDE Tools sollen die Entwicklungsprozesse verbessern und im ersten Schritt das inkrementelle Deployment während der Entwicklung beschleunigen. Die Sling IDE Tools sind im Moment nur für Eclipse verfügbar, aber weitere Entwicklungsumgebungen sind später denkbar.

(mehr …)

Varnish Präsentation an adaptTo() 2013

An der adaptTo() 2013 habe ich für Namics einen Vortrag über das Thema Caching mit Varnish im Umfeld von CQ5 gehalten.

Die Inhalte:

  • Einleitung zu Varnish
  • Anwendungsfälle und mögliche Architekturen
  • Einschränkungen und Stolperfallen

Bei den Anwendungsfällen wurden drei Beispiele beschrieben, welche nachfolgend kurz erläutert werden.

(mehr …)

Pathmarks – Kleines Helferlein für AEM/CQ mit Google Chrome

Der Adobe Experience Manager (AEM) respektive CQ ist ein mächtiges System. Entsprechend vielfältig sind die Funktionen und alle sind irgendwie über URL-Pfade erreichbar. Wer mit AEM respektive CQ entwickelt oder mehrere Instanzen und Umgebungen (Produktion, Test, Integration, Entwicklung etc.) betreut, ruft daher auf den jeweiligen Systeme immer mal wieder dieselben Pfade auf. Die Hostnames (und/oder Ports) ändern sich natürlich, die Pfade bleiben aber dieselben. Einige Pfade sind irgendwann im Gedächtnis präsent, von einigen ist bekannt, wo im System ein Link darauf vorhanden ist und bei anderen, wo in der Dokumentation der gewünschte Pfad zu finden sein könnte. Es gibt aber immer auch mal die Situation, wo auf einem System das Ziel bekannt ist, der Weg allerdings neu gesucht werden muss.

Mit der Google Chrome Extension Pathmarks gibt es ein praktisches Helferlein, welches diese Suche nach dem gewünschten Pfad stark erleichtert. Anstelle eines klassischen Bookmarks speichert die Erweiterung nur die Pfade. Egal in welcher AEM oder CQ Umgebung – mit einem Klick auf den gespeicherten Pfad wird die Zielseite in der aktuellen Umgebung geöffnet.

Der aktuelle Pfad einer geöffneten Seite lässt sich mit der Erweiterung direkt speichern und zuvor auch editieren. Die einzelnen Einträge lassen sich per Drag-and-Drop umsortieren. Über die Options-Seite der Erweiterung stehen die gespeicherten Pfade ausserdem im JSON-Format zur Verfügung. Die Einstellungen können so einfach zwischen Entwicklern ausgetauscht werden. Über die Tastatur lässt sich schnell zwischen den Pfaden navigieren und den gewünschten auswählen.

Natürlich eignet sich diese Extension für Google Chrome auch für beliebige andere, web-basierte Systeme.

Pathmarks im Chrome Web Store

Suchtiefe der AEM CQ Volltext-Suche bei Seiten-Inhalten

Die integrierte Volltextsuche von AEM CQ nach Seiten (cq:Page respektive cq:PageContent) besitzt eine wenig bekannte Einschränkung. Die Suche findet nur auf vier Node-Ebenen innerhalb des PageContent-Nodes (jcr:content) statt.

Diese Einschränkung fällt oft nicht auf, da eher selten eine tiefere Node-Struktur anzutreffen ist. Es gibt aber Fälle, wo komplexe Komponenten tiefere Strukturen aufweisen und die Inhalte dann mit der Volltextsuche nicht mehr gefunden werden. Beim Testen ist die Wahrscheinlichkeit eher klein diesen Fall zu erkennen. Daher ist es wichtig diese Einschränkung zu kennen und in der Entwicklung bei der Verwendung tieferer Node-Strukturen zu beachten. (mehr …)

Performance Verbesserung von JCR Queries

Die Optimierung von Suchen gegen das JCR kann erhebliche Geschwindigkeitsvorteile bringen. Ein Hilfsmittel ist hier das QueryStat MBean, welches in der Standard JMX Console zu finden ist.  Dort sind langsame und populäre Queries schnell ersichtlich. Beispiel-Link: http://localhost:8081/system/console/jmx/com.adobe.granite%3Atype%3DQueryStat

(mehr …)

Adobe CQ 5.6 – Social Communities Login

Jeder kennt das leidige Problem: um Site xy.com richtig nutzen zu können muss man sich dort registrieren. Sei es nur um einen Kommentar zu hinterlassen, oder um eine Commerce-Transaktion durchzuführen. Password-Hell vorprogrammiert!

Seit einiger Zeit wird das Problem jedoch durch Facebook, Twitter und Google entschärft. ‘Connect’ heisst das Zauberwort. Die dahinter versteckte Technologie entweder OpenID oder OAuth.

CQ56 Social Login

Adobe CQ 5.6 unterstützt Facebook Connect (Sign in with Facebook) und Twitter Connect (Sign in with Twitter) nun out-of-the-Box. Als Beispiel hat der Geometrixx Outdoors Commerce-Showcase nun diese Möglichkeit zur Authentisierung erhalten. Statt mich mit Benutzername und Passwort zu registrieren, kann man nun eine der beiden oben genannten Möglichkeiten zur Profil-/Account-Erstellung nutzen.

Entsprechend werden anschliessend teilweise Daten aus Facebook oder Twitter an CQ übergeben, und in mein Geometrixx Profil übertragen. Email Adresse, Avatar und mein Name stehen sofort zur Verfügung. Ergebnis ist ein vollwertiger Benutzeraccount innerhalb von CQ der anschliessend durch den Benutzer selbstverständlich erweitert werden kann.

CQ56 User Manager

Aber bei der Account-Erstellung bleibt es nicht. Durch das Social Login steht der CQ-Site nun auch mein Social Graph zur Verfügung, und hier sind der Phantasie keine Grenzen gesetzt. Produktempfehlungen meiner Freunde können so implementiert werden oder die Informationen aus meinem Graph werden für weitere Targeting Funktionen genutzt.

Neben einer eigener Profilverwaltung können zukünftig also Adobe CQ Sites auch auf die Vorteile der grossen Social Networks zurückgreifen und bieten so für den Benutzer durch das Social Communities Login einen grossen Mehrwert, egal ob Community, Corporate Website oder Commerce Site.

Ebenfalls neu in Adobe CQ 5.6:

Seite 2 von 3123