spring context.xml 로딩시 행에 빠지는 문제로 문의드립니다.

360 views
Skip to first unread message

SungMin Oh

unread,
Apr 25, 2013, 4:49:34 AM4/25/13
to ks...@googlegroups.com
안녕하세요

그룹스에 초대해주셔서 너무 감사드리며 앞으로 열심히해서 도움이 되도록 하겠습니다.

가입함과 동시에 질문사항이 있네요.

스프링 프래임웍을 사용하여 cron을 통해 실행되는 배치 프로그램을 만들었습니다.

이 프로그램이 실행시 간헐적으로 행이 걸리는데요.

이번에 thread dump를 떠보니 xml 파일을 읽는 도중 어딘가로 socket을 열고 응답을 기다리는데 응답이 오지 않아 발생한 문제인듯 합니다.

context를 로딩중에 발생한 문제라 제가 구현한 로직까지 진행을 못하고 있구요.

xml  파일도 존재하는데 왜 외부로 socket을 여는지 조차도 모르는 상황입니다.

혹시 위와 같은 문제를 경험해보셨거나 관련하여 조언을 해주실 수 있는지요?

아래 thread dump 와 context.xml 내용 붙여 드립니다.

java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

spring core version : 3.1.1

감사합니다.

-- thread dump

Full thread dump OpenJDK 64-Bit Server VM (20.0-b12 mixed mode):

"Attach Listener" daemon prio=10 tid=0x00007fe034001000 nid=0x3ae9 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Low Memory Detector" daemon prio=10 tid=0x00007fe0840a5000 nid=0x7d9d runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" daemon prio=10 tid=0x00007fe0840a3000 nid=0x7d9c waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" daemon prio=10 tid=0x00007fe0840a0000 nid=0x7d9b waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x00007fe084092000 nid=0x7d9a runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=10 tid=0x00007fe084080000 nid=0x7d99 in Object.wait() [0x00007fe07e133000]
   java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007ac801310> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
- locked <0x00000007ac801310> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177)

"Reference Handler" daemon prio=10 tid=0x00007fe08407e000 nid=0x7d98 in Object.wait() [0x00007fe07e234000]
   java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007ac8011e8> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
- locked <0x00000007ac8011e8> (a java.lang.ref.Reference$Lock)

"main" prio=10 tid=0x00007fe084007800 nid=0x7d8e runnable [0x00007fe08a63f000]
   java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:146)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:273)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
- locked <0x00000007ace21a00> (a java.io.BufferedInputStream)
at sun.net.www.MeteredStream.read(MeteredStream.java:134)
- locked <0x00000007ace248a0> (a sun.net.www.http.KeepAliveStream)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2582)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager$RewindableInputStream.read(XMLEntityManager.java:2938)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:302)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1719)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanData(XMLEntityScanner.java:1219)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanCDATASection(XMLDocumentFragmentScannerImpl.java:1631)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2962)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:625)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:626)
at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:682)
at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.parse(SchemaDOMParser.java:518)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:1814)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:540)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:564)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.findSchemaGrammar(XMLSchemaValidator.java:2441)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1786)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:709)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:376)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:602)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3080)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:899)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:625)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:819)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:748)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:288)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
- locked <0x00000007acab92c8> (a java.lang.Object)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.kiwiple.astaroth.AstarothIndexMain.main(AstarothIndexMain.java:39)

"VM Thread" prio=10 tid=0x00007fe084077000 nid=0x7d97 runnable 

"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007fe084012800 nid=0x7d8f runnable 

"GC task thread#1 (ParallelGC)" prio=10 tid=0x00007fe084014800 nid=0x7d90 runnable 

"GC task thread#2 (ParallelGC)" prio=10 tid=0x00007fe084016800 nid=0x7d91 runnable 

"GC task thread#3 (ParallelGC)" prio=10 tid=0x00007fe084018000 nid=0x7d92 runnable 

"GC task thread#4 (ParallelGC)" prio=10 tid=0x00007fe08401a000 nid=0x7d93 runnable 

"GC task thread#5 (ParallelGC)" prio=10 tid=0x00007fe08401c000 nid=0x7d94 runnable 

"GC task thread#6 (ParallelGC)" prio=10 tid=0x00007fe08401d800 nid=0x7d95 runnable 

"GC task thread#7 (ParallelGC)" prio=10 tid=0x00007fe08401f800 nid=0x7d96 runnable 

"VM Periodic Task Thread" prio=10 tid=0x00007fe0840b0000 nid=0x7d9e waiting on condition 

JNI global references: 894


-- context.xml 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<description>Example configuration to get you started.</description>

<context:component-scan base-package="com.kiwiple.astaroth" />

<context:component-scan base-package="com.kiwiple.astaroth.processor" />

<context:component-scan base-package="com.kiwiple.astaroth.mapper" />

<context:component-scan base-package="com.kiwiple.astaroth.dao" />

<context:component-scan base-package="com.kiwiple.astaroth.utils" />

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="locations">

    <list>

    <!-- <value>classpath:database_info.properties</value>

    <value>classpath:index.properties</value> -->

<value>file:./properties/database_info.properties</value>

    <value>file:./properties/index.properties</value>

    <value>classpath:sql.properties</value>

    </list>

    </property>

    <property name="fileEncoding" value="UTF-8"/>

</bean>

  <bean id="DBCPDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

    <property name="driverClassName" value="${datasource.driverClassName}"/>

    <property name="url" value="${datasource.url}"/>

    <property name="username" value="${datasource.username}"/>

    <property name="password" value="${datasource.password}"/>

    <property name="initialSize" value="${connection.initSize}"/>

    <property name="maxActive" value="${connection.maxAction}"/>

    <property name="maxIdle" value="${connection.maxIdle}"/>

    <property name="maxWait" value="${connection.maxWait}"/>

</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="DBCPDataSource" />

</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

<property name="dataSource" ref="DBCPDataSource" />

</bean>

<import resource="classpath:/META-INF/lucene/lucene-context.xml" />

</beans>

 
-- import 한 lucene-context.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">


<description>lucene 관련 빈 정의</description>

<!-- index dir -->

<bean id="luceneDirectory" class="org.apache.lucene.store.FSDirectory" factory-method="open">

<constructor-arg>

<bean class="java.io.File">

<constructor-arg value="${config.indexDir}" />

</bean>

</constructor-arg>

<constructor-arg>

<bean class="org.apache.lucene.store.SimpleFSLockFactory" />

</constructor-arg>

</bean>

</beans>

Sanghyuk Jung

unread,
Apr 25, 2013, 5:16:22 AM4/25/13
to ks...@googlegroups.com
안녕하세요, 아무래도 http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd 파일을 local 에 있는 jar에서 찾지 못해서 인터넷 연결이 되는데, network 상황에따라서 실패하기도 하는듯합니다..

xsd파일의 버전이 원하시는 것고 일치하시는지, 혹시 전체 XML에서 다른 버전의 xsd를 선언한것은 없는지 확인해보시는것이 좋을듯합니다.. 


2013년 4월 25일 오후 5:49, SungMin Oh <sprin...@gmail.com>님의 말:

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
http://groups.google.com/group/ksug?hl=ko-KR에서 그룹을 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/groups/opt_out을(를) 방문하세요.
 
 

SungMin Oh

unread,
Apr 25, 2013, 7:04:55 AM4/25/13
to ks...@googlegroups.com
답변감사드립니다.

관련 xsd 를 찾아보았습니다.

정의한 스키마 로케이션과 이름이 비슷한 jar  파일들을 열어서 확인해보니 META-INF 에 xsd 파일들이 존재 하더군요.

하지만 http://www.springframework.org/schema/util/spring-util-3.0.xsd 관련된 것은 찾지 못했네요.

정상혁님 께서 말씀해주신 대로 spring-util-3.0.xsd 파일이 없어 그럴수도 있겠다는 생각이 들었습니다.

하나만 추가 질문 드리겠습니다.

그럼 context.xml 파서가 xml 파싱을 위해 xsd 를 참조하고, 

해당 xsd  가 존재 하는지 META-INF 안의 spring.schemas 파일에서(classpath를 통하여) 확인한 다음 

존재 하지 않는 경우 URL path로 요청 하여 받은 뒤 파싱한다 라고 생각하면 될까요?

제가 너무 어설프게 공부한 상태로 사용하고 있었다는 생각이 드네요..

많이 배우게 됐습니다.

감사합니다.

SungMin Oh

unread,
Apr 25, 2013, 7:55:54 AM4/25/13
to ks...@googlegroups.com
죄송합니다만, spring.schemas  를 불러 들이는 방식에 대해서 설명 해주실수 있으신가요?

OFF LINE으로 실행할 경우 말씀하신 것 처럼 beans.xsd 를 찾을 수 없다고 나옵니다.

beans.xsd는 spring-beans-3.x.jar 에 포함 되어 있고 해당 jar는 클래스 패스로 등록이 되어 있거든요.

디버그 모드로 로그를 찍어 보니 spring-context 쪽의 xsd는 로딩을 합니다만, beans 쪽은 못하네요..

spring.schemas파일을 불러 들이는 기준이 있을까요?

Kwangsu Kim

unread,
Apr 25, 2013, 7:59:35 AM4/25/13
to ks...@googlegroups.com

Schema 관련 답변은 아니구요, 스텍을 보니까 openjdk 를 사용하시는군요. Oracle jdk를 사용하지 않는 이유가 있으신가요?

2013. 4. 25. 오후 8:56에 "SungMin Oh" <sprin...@gmail.com>님이 작성:

SungMin Oh

unread,
Apr 25, 2013, 8:06:39 AM4/25/13
to ks...@googlegroups.com
아 특별한 이유는 없습니다.

인프라 쪽에서 리눅스에 설치된 기본 jvm 을 그대로 둔것 같네요.

jvm 별로 문제가 발생할 가능성이 또 있는건가요???

2013년 4월 25일 목요일 오후 8시 59분 35초 UTC+9, Kwangsu Kim 님의 말:

Kwangsu Kim

unread,
Apr 25, 2013, 8:21:44 AM4/25/13
to ks...@googlegroups.com

Vm은 그냥 궁금해서 물어본 것이구요.. 스택오버플로우에 비슷한 질문이 있네요.
http://stackoverflow.com/questions/1729307/spring-schemalocation-fails-when-there-is-no-internet-connection
문제 해결에 도움이 되었으면 좋겠습니다.

2013. 4. 25. 오후 9:06에 "SungMin Oh" <sprin...@gmail.com>님이 작성:
Reply all
Reply to author
Forward
0 new messages