본문 바로가기
프로그래밍/JAVA

spring에서 weblogic JNDI 설정 방법

by 쑨s 2022. 5. 26.
728x90
반응형

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>

 

 

728x90
반응형

댓글