Spring Dependency Graph mit yEd / Graphml

Wenn man ein fremdes Projekt, was mit Spring gemacht ist, zum ersten Mal anschaut, ist es nicht leicht sich einen Überblick zu verschaffen. Insbesondere die Abhängigkeiten der SpringBeans untereinander sind nicht leicht zu überschauen.

Verschiedene IDE Integrationen versprechen Abhilfe. Die Spring Tool Suite (STS) kann beispielsweise einen Abhängigkeitgraphen anzeigen, allerdings erlebt man eine Enttäuschung wenn man dies mit einem auch nur halbwegs ernsthaften Projekt versucht.Das Ergebnis ist enttäuschend: man sieht schlicht nichts, das Layout der Beans ist starr und die Kanten, die die Abhängigkeiten darstellen, laufen wild durch den Graphen. Man kann nicht mal erkennen, welcher Knoten mit welchem verbunden ist.

Die Möglichkeiten mit einem Graph zu arbeiten und so Übersicht zu erzeugen fehlt komplett. Wenn man hier den Luxus eines Werkzeugs wie yEd gewohnt ist, der vielfältige Möglichkeiten bietet, ist die Lösung schnell gefunden:

Man generiert einen Graphen im graphml Format, um ihn dann mit yEd bearbeiten zu können. Das ist, mit einem Satz gesagt, das was die angehängte Klasse tut.

Der Spring-Context wird mit Spring selbst gelesen und analysiert und dann wird ein graphml File ausgegeben. Dieses muss zu Beginn mindestens einmal durch einen Layout-Algorithmus (am besten Hierachisch), weil sonst alle Knoten übereinander liegen.

Mit einer Property-Datei kann man die Knoten noch automatisch einfärben, um bestimmte Knotentypen zu unterscheiden.

Den Quellcode gibts hier SpringDependencyGraphGenerator.

Mit dem yEd lassen sich mit dem fertigen Graphen auch noch weitere nützliche Dinge anstellen. So kann man z.B. ganz leicht Untergraphen erzeugen, die nur Vorgänger oder nur die Nachfolger eines Knotens zeigen.

Wie schlecht die Bilder mit STS werden können zeigt dieser Ausschnitt:

Einen Graphen der mit yEd layoutet wurde sieht man unten. Mit Hilfe der Vorgänger-Funktion sind in einem zweiten Bild nochmal die Abhängigkeiten einer DataSource herausgestellt.

Dieser Beitrag wurde unter Allgemein abgelegt und mit verschlagwortet. Setze ein Lesezeichen auf den Permalink.

3 Antworten auf Spring Dependency Graph mit yEd / Graphml

  1. Volker sagt:

    Hallo,

    danke für den Artikel und den Link zum Tool !

    Man kann sich schnell vorstellen einen kompletten Klassenbaum grafisch zu Entwerfen. Ist Dir eine solche Möglichkeit bekannt ?

    Es gibt Tools mit denen man Workflows entwerfen kann und dann Java Klassen an die Knoten binden…aber die sind oft nur für ganz bestmmte Bereiche Einsetzbar.Wäre schön soetwas in OpenSource und generisch zu haben…..

    Viele Grüße
    V

  2. Esther sagt:

    Very good article. I absolutely appreciate this
    website. Thanks!

  3. Thanks, this was incredibly helpful in my Application Context analysis! I found the “Successors” feature incredibly useful in yEd. By selecting a node and then clicking “convert to document” in the successors panel, you are able to see all downstream dependencies of a bean. I also used Gephi to make a more visual presentation of our app context that used node size, and edge color to note beans with a high degree. This has helped me convey to business partners why changes to particular parts of the system take longer.

Hinterlasse einen Kommentar zu Volker Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>