Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich hoffe dass ist das richtige Forenbereich für meine Frage. Ich entwickle derzeit mit Spring, Spring-DM und Equinox eine Anwendung. Nun würde ich gerne AspectJ bzw. AOP allgemein einsetzen, um bestimmte technische Anforderungen damit abzuhandeln, bin mir aber nicht sicher, was dort jetzt der beste Ansatz ist. Compile-Time-Weaving scheidet eigentlich aus, da zusätzliche Aspekte sich über die Zeit hin entwickeln werden und ich dann jedes bereits deployte Bundle anfassen müsste, damit neue Aspekte via CTW in diese Bundles einfließen. Daher wäre mein präferierter Ansatz LTW, um so auch nachträglich Aspekte auf Bundles anzuwenden. Kurze Zwischenfrage an die Experten hier: wenn ich LTW richtig verstanden habe, ist das Vorhaben so ja möglich oder? Also speziell auch der beschriebene dynamische Charakter, mit dem aspekte eingesetzt werden sollen (neue Aspekte auf bestehende Bundles anwenden, Aspekte auf neu deployte bundles anwenden etc.)
Ich hab von Equinox Aspects gelesen, welches LTW mit AspectJ innerhalb eines OSGI-Containers ermöglicht. Allerdings ist das letzte Release (ein Milestone) bereits ein paar Monate alt und das ganze Projekt macht nicht gerade einen aktiven Eindruck (das letzte was ich davon gehört habe war Eclipse weaving, das in irgendeiner Weise in Eclipse 3.6 einfließen soll. Auf der anderen Seite habe ich gelesen, dass der Spring DM Server sowas ebenfalls ermöglichen soll (wobei ich gerne so lange wie möglich Unabhängig von einem bestimmten OSGI-Container bleiben möchte, zumal man bei Spring DM Server jetzt auch erstmal abwarten sollte wie sich das mit der Überführung in Eclipse Virgo verhalten wird). Letztlich gibts noch den ganz normalen AOP Support durch das Spring Framework selbst. Ist der in einer OSGI-Umgebung für meine Anforderungen nutzbar?
Wisst ihr einen Weg, wie man Aspekte global auf alle Bundles innerhalb eines OSGI-Containers anwenden kann? Ideal wäre ein dynamischer Ansatz, ohne jedes bereits deployte Bundle nochmal anfassen zu müssen (siehe die Aufzählung bei der Zwischenfrage oben)?
Leider ist mein Wissen an dieser Stelle sehr bescheiden. So nah am Puls der Zeit entwickel ich noch nicht. Das hat zwei Gründe: man kann mit AOP und LTW viele tolle Sachen machen... bis hin zu untestbarem Code, was letztendlich zu schlechter Softwarequalität führt. Deshalt würde ich diese Technik nur sehr sparsam einsetzen. Das zweite ist, dass die Framworks noch nicht wirklich abgehangen sind für den produktiven Einsatz.... aber ein Blick ist es sicher wert.
Zu den Fragen:
Meine (bescheidenen) Kenntnisse zu LTW in obiger Konstellation decken sich mit deinen, d.h. ich denke, dass es möglich sein sollte. Der reine Spring-AOP Support ist mit AspectJ nicht zu vergleichen. Spring bietet hier lediglich den Eingriff über dynamische Proxies an, das ist nur AOP-light. Den Rest kann ich nicht beantworten.
Tipp: fange mal schnell mit einem proof of concept an... das sollte dich auf jeden Fall weiter bringen oder auf konkrete Probleme stoßen lassen, denen man dann nachgehen kann...
Ich versuch halt so gut es geht die Problemstellung zu beschreiben. Ist ja auch in meinem Interesse, wenn die Leute wissen, wo mein Schuh drückt und nicht noch nachfragen müssen
Zum Problem
Ich werde mein Glück mal mit Equinox Aspects versuchen und euch über den Fortschritt auf dem laufenden halten.
Ansonsten wenn jemand weitere Infos oder Tips hat, bin ich natürlich dankbar drum.
Anbei mal ein kleines Zwischenergebnis (für die unter euch, die es interessiert)
Also Equinox Aspects funktioniert soweit mit AspectJ und LTW ziemlich gut (habe hier ein Equinox 3.5.1 SDK laufen, gestartet wird aus STS 2.3.0.RELEASE mit nem Eclipse 3.5.1 darunter, also alles recht aktuell). Zur Stabilität kann ich natürlich noch nichts sagen, da ich derzeit erst noch damit rumspiele (aber anscheinend soll die Allianz das in einem "mission critial" Projekt einsetzen, was mich aber etwas verwundert da es ja nur Milestones und Dev Builds bisher gibt aber nunja). Auch die Möglichkeit, die Aspekte in zwei Richtungen einbinden zu können ist sehr gut:
+ Entweder gibt man im Aspect-Bundle die Bundles an, in die die Aspekte eingewoben werden sollen (das geschieht über den Eintrag Eclipse-SupplementBundle).
Code:
Eclipse-SupplementBundle: org.example.bundles.*
+ Oder aber die Bundles importieren das package mit den Aspekten (lt. Quick guide soll require bundle genutzt werden, aber bei mir funktioniert es auch mit import package)
Code:
Import-Package: org.example.aspects
Unter Equinox Aspects – Quick-start guide gibts den Quick start für diejenigen von euch, die das ganze interessiert. Einzig für den Start und das Deployment bevorzuge ich persönlich einen anderen Weg als in dem Guide angegeben (ich setz mir in den Preferences meine Target platform und konfiguriere das ganze später über Run configurations - OSGI Framework), aber da sind Geschmäcker bekanntlich ja verschieden.
Es gibt lt. Springforum auch noch die Möglichkeit, das ganze mit Spring zu verknüpfen, indem man eine springweaver-Bibliothek nutzt. Das werde ich mir bei nächster Gelegenheit mal anschauen und euch weiter auf dem laufenden halten
man kann mit AOP und LTW viele tolle Sachen machen... bis hin zu untestbarem Code, was letztendlich zu schlechter Softwarequalität führt. Deshalt würde ich diese Technik nur sehr sparsam einsetzen.
Primär untersuche ich das ganze deshalb, weil ich gerne das ganze Logging (speziell auch Exception logging via after throwing) in Aspekte auslagern möchte. Auch Transaktionen und Zugriffsrestriktionen könnte ich mir mit Aspekten gut vorstellen. Ansonsten stimme ich dir aber zu, dass man damit auch viel Schund anstellen kann (wie mit fast allem eigentlich )