diff --git a/src/main/java/com/nexacro/spring/context/ApplicationContextProvider.java b/src/main/java/com/nexacro/spring/context/ApplicationContextProvider.java new file mode 100644 index 0000000..9bacf44 --- /dev/null +++ b/src/main/java/com/nexacro/spring/context/ApplicationContextProvider.java @@ -0,0 +1,24 @@ +package com.nexacro.spring.context; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +/** + * Spring의 Bean을 획득하기 위한 ApplicationContext를 제공한다. + * @author Park SeongMin + * + */ +public class ApplicationContextProvider implements ApplicationContextAware { + + // 참고 URL + // http://blog.jdevelop.eu/?p=154 + + @Override + public void setApplicationContext(ApplicationContext applicationContext) + throws BeansException { + // ApplicationContext가 초기화 된 후 호출 된다. + SpringAppContext.getInstance().setApplicationContext(applicationContext); + } + +} diff --git a/src/main/java/com/nexacro/spring/servlet/NexacroContext.java b/src/main/java/com/nexacro/spring/context/NexacroContext.java similarity index 96% rename from src/main/java/com/nexacro/spring/servlet/NexacroContext.java rename to src/main/java/com/nexacro/spring/context/NexacroContext.java index 3612671..038b7d6 100644 --- a/src/main/java/com/nexacro/spring/servlet/NexacroContext.java +++ b/src/main/java/com/nexacro/spring/context/NexacroContext.java @@ -1,4 +1,4 @@ -package com.nexacro.spring.servlet; +package com.nexacro.spring.context; import java.io.IOException; import java.io.InputStream; diff --git a/src/main/java/com/nexacro/spring/servlet/NexacroContextHolder.java b/src/main/java/com/nexacro/spring/context/NexacroContextHolder.java similarity index 95% rename from src/main/java/com/nexacro/spring/servlet/NexacroContextHolder.java rename to src/main/java/com/nexacro/spring/context/NexacroContextHolder.java index 7a185e8..c7ed1ba 100644 --- a/src/main/java/com/nexacro/spring/servlet/NexacroContextHolder.java +++ b/src/main/java/com/nexacro/spring/context/NexacroContextHolder.java @@ -1,4 +1,4 @@ -package com.nexacro.spring.servlet; +package com.nexacro.spring.context; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; diff --git a/src/main/java/com/nexacro/spring/context/SpringAppContext.java b/src/main/java/com/nexacro/spring/context/SpringAppContext.java new file mode 100644 index 0000000..fbeb1b9 --- /dev/null +++ b/src/main/java/com/nexacro/spring/context/SpringAppContext.java @@ -0,0 +1,60 @@ +package com.nexacro.spring.context; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import org.springframework.context.ApplicationContext; + +public class SpringAppContext { + + /* + * @autowired 자동처리 시에는 아래와 같이 처리 하면 된다. + * + * ApplicationContext ctx = AppContext.getApplicationContext(); + * Honeypotbean honey = ctx.getBean(HoneyPotBean.class); + * + */ + public final static SpringAppContext INSTANCE = new SpringAppContext(); + private final ReadWriteLock lock = new ReentrantReadWriteLock(); + private final Lock readLock = lock.readLock(); + private final Lock writeLock = lock.writeLock(); + + private ApplicationContext ctx; + + private SpringAppContext() { + } + + public static SpringAppContext getInstance() { + return INSTANCE; + } + + /** + * Injected from the class “ApplicationContextProvider” which is + * automatically loaded during Spring-Initialization. + */ + public void setApplicationContext(ApplicationContext applicationContext) { + writeLock.lock(); + try { + this.ctx = applicationContext; + } finally { + writeLock.unlock(); + } + } + + /** + * Get access to the Spring ApplicationContext from everywhere in your + * Application. + * + * @return + */ + public ApplicationContext getApplicationContext() { + readLock.lock(); + try { + return this.ctx; + } finally { + readLock.unlock(); + } + } + +} diff --git a/src/main/java/com/nexacro/spring/interceptor/ExceptionTracer.java b/src/main/java/com/nexacro/spring/interceptor/ExceptionTracer.java index 76d0c51..228ca31 100644 --- a/src/main/java/com/nexacro/spring/interceptor/ExceptionTracer.java +++ b/src/main/java/com/nexacro/spring/interceptor/ExceptionTracer.java @@ -8,7 +8,7 @@ public class ExceptionTracer { private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionTracer.class); public void trace(Exception exception) throws Exception { - LOGGER.error(exception.getMessage()); + LOGGER.error(exception.getMessage(), exception); } } diff --git a/src/main/java/com/nexacro/spring/resolve/NexacroMethodArgumentResolver.java b/src/main/java/com/nexacro/spring/resolve/NexacroMethodArgumentResolver.java index 2b7fc7a..cb9db55 100644 --- a/src/main/java/com/nexacro/spring/resolve/NexacroMethodArgumentResolver.java +++ b/src/main/java/com/nexacro/spring/resolve/NexacroMethodArgumentResolver.java @@ -22,14 +22,14 @@ import org.springframework.web.method.support.ModelAndViewContainer; import com.nexacro.spring.NexacroConstants; import com.nexacro.spring.annotation.ParamDataSet; import com.nexacro.spring.annotation.ParamVariable; +import com.nexacro.spring.context.NexacroContext; +import com.nexacro.spring.context.NexacroContextHolder; import com.nexacro.spring.data.NexacroFirstRowHandler; import com.nexacro.spring.data.convert.ConvertDefinition; import com.nexacro.spring.data.convert.NexacroConvertException; import com.nexacro.spring.data.convert.NexacroConvertListener; import com.nexacro.spring.data.convert.NexacroConverter; import com.nexacro.spring.data.convert.NexacroConverterFactory; -import com.nexacro.spring.servlet.NexacroContext; -import com.nexacro.spring.servlet.NexacroContextHolder; import com.nexacro.xapi.data.DataSet; import com.nexacro.xapi.data.DataSetList; import com.nexacro.xapi.data.PlatformData; diff --git a/src/main/java/com/nexacro/spring/security/NexacroWebSecurityListener.java b/src/main/java/com/nexacro/spring/security/NexacroWebSecurityListener.java index 9f353c8..6667e25 100644 --- a/src/main/java/com/nexacro/spring/security/NexacroWebSecurityListener.java +++ b/src/main/java/com/nexacro/spring/security/NexacroWebSecurityListener.java @@ -21,7 +21,7 @@ import com.nexacro.spring.data.convert.NexacroConvertListener; * 2015. 8. 9. Park SeongMin 최초 생성 * */ - +@Deprecated public class NexacroWebSecurityListener implements NexacroConvertListener { @Override diff --git a/src/main/java/com/nexacro/spring/security/SecurityUtil.java b/src/main/java/com/nexacro/spring/security/SecurityUtil.java index 73c8c04..3d0660c 100644 --- a/src/main/java/com/nexacro/spring/security/SecurityUtil.java +++ b/src/main/java/com/nexacro/spring/security/SecurityUtil.java @@ -28,7 +28,7 @@ import com.nexacro.xapi.data.VariableList; * 2015. 8. 11. Park SeongMin 최초 생성 * */ - +@Deprecated public abstract class SecurityUtil { public static void checkSecurity(PlatformData platformData) throws SecurityException { diff --git a/src/main/java/com/nexacro/spring/servlet/NexacroInterceptor.java b/src/main/java/com/nexacro/spring/servlet/NexacroInterceptor.java index 21f5c31..73e32c9 100644 --- a/src/main/java/com/nexacro/spring/servlet/NexacroInterceptor.java +++ b/src/main/java/com/nexacro/spring/servlet/NexacroInterceptor.java @@ -10,6 +10,8 @@ import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.nexacro.spring.NexacroConstants; +import com.nexacro.spring.context.NexacroContext; +import com.nexacro.spring.context.NexacroContextHolder; import com.nexacro.xapi.data.Debugger; import com.nexacro.xapi.data.PlatformData; import com.nexacro.xapi.tx.HttpPlatformRequest; diff --git a/src/main/java/com/nexacro/spring/view/NexacroView.java b/src/main/java/com/nexacro/spring/view/NexacroView.java index 6e62423..d6f8046 100644 --- a/src/main/java/com/nexacro/spring/view/NexacroView.java +++ b/src/main/java/com/nexacro/spring/view/NexacroView.java @@ -11,10 +11,10 @@ import org.springframework.util.StopWatch; import org.springframework.web.servlet.view.AbstractView; import com.nexacro.spring.NexacroConstants; +import com.nexacro.spring.context.NexacroContext; +import com.nexacro.spring.context.NexacroContextHolder; import com.nexacro.spring.data.NexacroFirstRowAccessor; import com.nexacro.spring.data.NexacroFirstRowHandler; -import com.nexacro.spring.servlet.NexacroContext; -import com.nexacro.spring.servlet.NexacroContextHolder; import com.nexacro.spring.util.NexacroUtil; import com.nexacro.xapi.data.DataSet; import com.nexacro.xapi.data.DataSetList;