Die Verwendung von Spring AOP in App Engine verursacht StackOverflowError

8

Wir haben eine App auf App Engine und verwenden das Spring-Framework. Vor kurzem haben wir einige neue Funktionen hinzugefügt, die auf AOP basieren. Wir haben uns dafür entschieden, den @AspectJ-Stil zu verwenden, daher haben wir <aop:aspectj-autoproxy> in unsere XML-basierte Konfiguration eingefügt und entsprechende Aspekte implementiert. Alles funktioniert auf dem Entwicklungsserver OK. Bei der Bereitstellung in der Cloud-Umgebung erhalten wir bei jeder Initialisierung der App java.lang.StackOverflowError .

Die Bean, die nicht erstellt werden kann und den Fehler verursacht, ist die Konfigurationsklasse, die mit @Configuration annotation versehen ist. Es scheint, dass im Grunde jede Konfigurations-Bean den Fehler verursachen kann.

Unten können Sie die entsprechende Stapelverfolgung sehen.

%Vor%

Aktualisierung: Ich habe das Problem zusammen mit der Beispielanwendung, die das Problem veranschaulicht, in den App Engine-Problemverfolger gestellt. Bitte folgen Sie dem Link um Details zu sehen.

    
pgiecek 16.12.2013, 16:09
quelle

3 Antworten

3

Es scheint, dass das Problem in App Engine Version 1.9.7 behoben wurde. Weitere Details finden Sie hier .

    
pgiecek 13.08.2014, 07:35
quelle
1

Ein Stapelüberlauf weist normalerweise auf eine Endlosschleife hin. Mit aspectj können Sie dies im folgenden Fall haben:

%Vor%

Wenn Sie nun aspectj-Ausdrücke verwenden, die sagen: Ich möchte mein configServiceImpl protokollieren, dann haben Sie auch eine Endlosschleife, wenn Sie den configService verwenden:

  • von Logger abgefangen
  • configservice injected in logger versucht Logging config ...
  • abzurufen
  • == & gt; Dieser Konfigurationsdienst wird von Logger- und Story-Repeats
  • abgefangen

Ich kann nicht erklären, warum es in Ihrem lokalen Setup funktioniert und nicht in der App-Engine. Oder warum ist es nur, wenn Sie @Configuration verwenden, aber ich denke, Sie sollten in der Richtung einer "zirkuläre Abhängigkeit" wie folgt aussehen.

    
ruben056 15.03.2014 09:21
quelle
1

Das liegt entweder an einer unendlichen Rekursion oder daran, dass Ihr Stack einfach zu groß ist. Versuchen Sie, Ihre Stack-Größe zu erhöhen, um zu sehen, ob das das Problem löst (z. B. -Xss1m ). Wenn das nicht hilft, können Sie eine unendliche Rekursion haben. Siehe auch:

Java-Stack-Überlauffehler - Wie erhöht man die Stackgröße in Eclipse?

    
Zeki 17.04.2014 00:37
quelle