spring에서 weblogic JNDI 설정 방법
웹로직 JNDI 설정 오류 분석
spring 프로젝트 개발 후 웹로직 서버에 올렸는데, 아래와 같이 JNDI를 못찾는 오류가 발생하였다.
(로컬 개발은 tomcat, 서버는 weblogic으로 구성된 상태)
####<2020. 4. 20 오후 4시 44분 27초 KST> <Warning> <HTTP> <SVR-WEBLOGIC1> <adminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1587368667505> <BEA-101162> <User defined listener org.springframework.web.context.ContextLoaderListener failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authorService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authorMapper' defined in file [D:\oracle\domains\eHDS\applications\HDS\WEB-INF\classes\egovframework\hshi\author\service\impl\AuthorMapper.class]: Cannot resolve reference to bean 'sqlSession' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSession' defined in file [D:\oracle\domains\eHDS\applications\HDS\WEB-INF\classes\egovframework\spring\context-mapper.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\oracle\domains\eHDS\applications\HDS\WEB-INF\classes\egovframework\spring\context-datasource.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: While trying to look up /comp/env/soonDSJNDI in /app/webapp/HDS/1852248608.; remaining name '/comp/env/soonDSJNDI'.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authorService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authorMapper' defined in file [D:\oracle\domains\eHDS\applications\HDS\WEB-INF\classes\egovframework\hshi\author\service\impl\AuthorMapper.class]: Cannot resolve reference to bean 'sqlSession' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSession' defined in file [D:\oracle\domains\eHDS\applications\HDS\WEB-INF\classes\egovframework\spring\context-mapper.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\oracle\domains\eHDS\applications\HDS\WEB-INF\classes\egovframework\spring\context-datasource.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: While trying to look up /comp/env/soonDSJNDI in /app/webapp/HDS/1852248608.; remaining name '/comp/env/soonDSJNDI'
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:307)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1204)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
오류 내용을 살펴보면..
Error creating bean with name 'authorService': Injection of resource dependencies failed ??!!!
authorService에 Injection을 할 수 없다는 것이다. 이것은 DB커넥션이 안되었을때 종종 발생한 에러였다.
에러 내용을 천천히 살펴보니..
creating bean with name 'dataSource' defined in file [D:\oracle\domains\eHDS\applications\HDS\WEB-INF\classes\egovframework\spring\context-datasource.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: While trying to look up /comp/env/eofficeDSJNDI in /app/webapp/HDS/1852248608.; remaining name '/comp/env/eofficeDSJNDI'.
음.. 뭔가 JNDI를 찾을 수 없어서 문제인걸 알 수 있었다.
spring에서 JNDI설정
아래와 같이 resourceRef을 false로 설정하여 해결 하였다.
Weblogic 연동시 Weblogic의 DataSource JNDI를 사용하기 위해 아래와 코드를 spring 설정 파일에 추가해준다.
이때 resourceRef 는 false로 설정해 줘야 한다. (resourceRef는 JNDI lookup시 자동으로 java:comp/env/ 를 추가해주는 property이다.)
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="soonDSJNDI" />
<property name="resourceRef" value="false" />
</bean>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="weblogic에 설정된 JNDI명"/>
<property name="resourceRef" value="false"/>
</bean>
'프로그래밍 > JAVA' 카테고리의 다른 글
eclipse 속도 향상 방법 (eclipse.ini) (0) | 2022.05.30 |
---|---|
전자정부 프레임워크 암호화 모듈 사용 방법 (0) | 2022.05.26 |
javaScript window객체와 opener 사용방법 (0) | 2022.05.16 |
Object형 소수점 2자리까지 표현하기 (0) | 2022.04.25 |
댓글