[SPRING] App Engine에서 Spring AOP를 사용하면 StackOverflowError가 발생합니다.
SPRINGApp Engine에서 Spring AOP를 사용하면 StackOverflowError가 발생합니다.
App Engine에서 실행 중이며 Spring 프레임 워크를 사용하는 앱이 있습니다. 최근에 우리는 AOP를 기반으로하는 몇 가지 새로운 기능을 추가했습니다. 우리는 @AspectJ 스타일을 사용하기로 결정 했으므로 XML 기반 구성에
생성 할 수없고 오류를 발생시키는 bean은 @Configuration 주석으로 주석 된 구성 클래스입니다. 기본적으로 모든 구성 Bean이 오류를 일으킬 수 있습니다.
아래에서 해당 스택 추적을 볼 수 있습니다.
org.springframework.web.context.ContextLoader initWebApplicationContext: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'objectifyConfig' defined in URL [jar:file:/base/data/home/apps/{app-id}/8.372375422460842231/WEB-INF/lib/{app-name}-1.0-SNAPSHOT.jar!/{path-to-class}/ObjectifyConfig.class]: Initialization of bean failed; nested exception is java.lang.StackOverflowError
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:219)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:194)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:134)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:446)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:435)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:442)
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:186)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:306)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:298)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:439)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.StackOverflowError
at java.util.concurrent.ConcurrentSkipListSet.contains(ConcurrentSkipListSet.java:214)
at sun.misc.URLClassPath$LoaderSearchCursor.nextLoader(URLClassPath.java:598)
at sun.misc.URLClassPath.getLoader(URLClassPath.java:365)
at sun.misc.URLClassPath.findResource(URLClassPath.java:213)
at java.net.URLClassLoader$2.run(URLClassLoader.java:551)
at java.net.URLClassLoader$2.run(URLClassLoader.java:549)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findResource(URLClassLoader.java:548)
at com.google.apphosting.runtime.security.UserClassLoader.findResource(UserClassLoader.java:723)
at java.lang.ClassLoader.getResource(ClassLoader.java:1142)
at com.google.apphosting.runtime.security.UserClassLoader$3.run(UserClassLoader.java:757)
at com.google.apphosting.runtime.security.UserClassLoader$3.run(UserClassLoader.java:751)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.apphosting.runtime.security.UserClassLoader.findResource(UserClassLoader.java:751)
at java.lang.ClassLoader.getResource(ClassLoader.java:1142)
at com.google.apphosting.runtime.security.UserClassLoader$3.run(UserClassLoader.java:757)
at com.google.apphosting.runtime.security.UserClassLoader$3.run(UserClassLoader.java:751)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.apphosting.runtime.security.UserClassLoader.findResource(UserClassLoader.java:751)
at java.lang.ClassLoader.getResource(ClassLoader.java:1142)
at com.google.apphosting.runtime.security.UserClassLoader$3.run(UserClassLoader.java:757)
at com.google.apphosting.runtime.security.UserClassLoader$3.run(UserClassLoader.java:751)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.apphosting.runtime.security.UserClassLoader.findResource(UserClassLoader.java:751)
at java.lang.ClassLoader.getResource(ClassLoader.java:1142)
...
최신 정보: 문제를 보여주는 샘플 앱과 함께 이슈를 App Engine 이슈 추적기에 넣었습니다. 자세한 내용을 보려면 링크를 클릭하십시오.
해결법
-
==============================
1.App Engine 버전 1.9.7에서 문제가 해결 된 것 같습니다. 자세한 내용은 여기를 참조하십시오.
App Engine 버전 1.9.7에서 문제가 해결 된 것 같습니다. 자세한 내용은 여기를 참조하십시오.
-
==============================
2.스택 오버플로는 일반적으로 무한 루프를 나타냅니다. aspectj를 사용하면 다음과 같은 경우에이 작업을 수행 할 수 있습니다.
스택 오버플로는 일반적으로 무한 루프를 나타냅니다. aspectj를 사용하면 다음과 같은 경우에이 작업을 수행 할 수 있습니다.
Class Logger { @Autowired ConfigService conf; //... used for logging intercepted methods } Class ConfigServiceImpl implements ConfigService { //... this is used to retrieve config }
이제 configjvice를 사용할 때 configServiceImpl을 기록하려고합니다. 그러면 무한 루프가 발생합니다.
로컬 엔진이 아닌 앱 엔진에서 작동하는 이유를 설명 할 수 없습니다. 또는 @Configuration을 사용할 때만 왜 그런가?하지만 이런 순환 적 종속성의 방향을 살펴 봐야한다고 생각합니다.
-
==============================
3.이것은 무한 반복 (recursion) 때문이거나 스택이 너무 크기 때문입니다. 스택 크기를 늘려 문제가 해결되는지 확인하십시오 (예 : -Xss1m 사용). 이것이 도움이되지 않으면 무한 재귀가 발생할 수 있습니다. 참조 :
이것은 무한 반복 (recursion) 때문이거나 스택이 너무 크기 때문입니다. 스택 크기를 늘려 문제가 해결되는지 확인하십시오 (예 : -Xss1m 사용). 이것이 도움이되지 않으면 무한 재귀가 발생할 수 있습니다. 참조 :
Java 스택 오버플로 오류 - Eclipse에서 스택 크기를 늘리는 방법?
from https://stackoverflow.com/questions/20615378/using-spring-aop-on-app-engine-causes-stackoverflowerror by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @Valid 유효성 검사에서 일부 필드 제외 (0) | 2019.04.19 |
---|---|
[SPRING] 숫자와 다음, 이전의 Jpa 페이징 (0) | 2019.04.19 |
[SPRING] Maven을 사용한 통합 테스트를 위해 전쟁에서 테스트 클래스와 구성을 포함하려면 어떻게해야합니까? (0) | 2019.04.19 |
[SPRING] ApplicationContext를로드하지 못했습니다 (주석 첨부). (0) | 2019.04.19 |
[SPRING] Spring Security에서 어떤 종류의 소유권을 기반으로 사용자 역할 설정하기 (0) | 2019.04.18 |