{"id":10083,"date":"2012-03-05T09:54:05","date_gmt":"2012-03-05T08:54:05","guid":{"rendered":"http:\/\/cogito-ergo-blog.de\/blog\/?p=10083"},"modified":"2012-03-09T13:20:13","modified_gmt":"2012-03-09T12:20:13","slug":"spring-dependency-graph-mit-yed-graphml","status":"publish","type":"post","link":"https:\/\/cogito-ergo-blog.de\/blog\/2012\/03\/05\/spring-dependency-graph-mit-yed-graphml\/","title":{"rendered":"Spring Dependency Graph mit yEd \/ Graphml"},"content":{"rendered":"<p>Wenn man ein fremdes Projekt, was mit Spring gemacht ist, zum ersten Mal anschaut, ist es nicht leicht sich einen \u00dcberblick zu verschaffen. Insbesondere die Abh\u00e4ngigkeiten der SpringBeans untereinander sind nicht leicht zu \u00fcberschauen.<\/p>\n<p>Verschiedene IDE Integrationen versprechen Abhilfe. Die Spring Tool Suite (STS) kann beispielsweise einen Abh\u00e4ngigkeitgraphen anzeigen, allerdings erlebt man eine Entt\u00e4uschung wenn man dies mit einem auch nur halbwegs ernsthaften Projekt versucht.<!--more-->Das Ergebnis ist entt\u00e4uschend: man sieht schlicht nichts, das Layout der Beans ist starr und die Kanten, die die Abh\u00e4ngigkeiten darstellen, laufen wild durch den Graphen. Man kann nicht mal erkennen, welcher Knoten mit welchem verbunden ist.<\/p>\n<p>Die M\u00f6glichkeiten mit einem Graph zu arbeiten und so \u00dcbersicht zu erzeugen fehlt komplett. Wenn man hier den Luxus eines Werkzeugs wie yEd gewohnt ist, der vielf\u00e4ltige M\u00f6glichkeiten bietet, ist die L\u00f6sung schnell gefunden:<\/p>\n<p>Man generiert einen Graphen im graphml Format, um ihn dann mit yEd bearbeiten zu k\u00f6nnen. Das ist, mit einem Satz gesagt, das was die angeh\u00e4ngte Klasse tut.<\/p>\n<p>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 \u00fcbereinander liegen.<\/p>\n<p>Mit einer Property-Datei kann man die Knoten noch automatisch einf\u00e4rben, um bestimmte Knotentypen zu unterscheiden.<\/p>\n<p>Den Quellcode gibts hier <a href=\"https:\/\/github.com\/sker65\/Spring-Dependency-Graph\">SpringDependencyGraphGenerator<\/a>.<\/p>\n<p>Mit dem yEd lassen sich mit dem fertigen Graphen auch noch weitere n\u00fctzliche Dinge anstellen. So kann man z.B. ganz leicht Untergraphen erzeugen, die nur Vorg\u00e4nger oder nur die Nachfolger eines Knotens zeigen.<a href=\"http:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/graph-all-ausschnitt.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-10106\" title=\"graph-all-ausschnitt\" src=\"http:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/graph-all-ausschnitt-300x159.jpg\" alt=\"\" width=\"300\" height=\"159\" srcset=\"https:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/graph-all-ausschnitt-300x159.jpg 300w, https:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/graph-all-ausschnitt.jpg 731w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Wie schlecht die Bilder mit STS werden k\u00f6nnen zeigt dieser Ausschnitt:<\/p>\n<p>Einen Graphen der mit yEd layoutet wurde sieht man unten. Mit Hilfe der Vorg\u00e4nger-Funktion sind in einem zweiten Bild nochmal die Abh\u00e4ngigkeiten einer DataSource herausgestellt.<a href=\"http:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/graph-komplett.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-10107\" title=\"graph-komplett\" src=\"http:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/graph-komplett-300x168.jpg\" alt=\"\" width=\"300\" height=\"168\" srcset=\"https:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/graph-komplett-300x168.jpg 300w, https:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/graph-komplett.jpg 800w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><a href=\"http:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/neu2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-10108\" title=\"neu2\" src=\"http:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/neu2-160x300.jpg\" alt=\"\" width=\"160\" height=\"300\" srcset=\"https:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/neu2-160x300.jpg 160w, https:\/\/cogito-ergo-blog.de\/blog\/wp-content\/uploads\/neu2.jpg 400w\" sizes=\"(max-width: 160px) 100vw, 160px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn man ein fremdes Projekt, was mit Spring gemacht ist, zum ersten Mal anschaut, ist es nicht leicht sich einen \u00dcberblick zu verschaffen. Insbesondere die Abh\u00e4ngigkeiten der SpringBeans untereinander sind nicht leicht zu \u00fcberschauen. Verschiedene IDE Integrationen versprechen Abhilfe. Die &hellip; <a href=\"https:\/\/cogito-ergo-blog.de\/blog\/2012\/03\/05\/spring-dependency-graph-mit-yed-graphml\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[14],"_links":{"self":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/10083"}],"collection":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/comments?post=10083"}],"version-history":[{"count":5,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/10083\/revisions"}],"predecessor-version":[{"id":10110,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/10083\/revisions\/10110"}],"wp:attachment":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/media?parent=10083"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/categories?post=10083"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/tags?post=10083"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}