본문 바로가기

Information Technology/Spring Framework

개발 중 에러메시지(error)와 그 해결책들

 

1. [아파치] "ProtocolDecoderException , Unexpected end of session while waiting for a single byte."endOfSessionError.JPG

 

  • 문제상황
특정 페이지에서 발생한다기 보다, 톰캣을 재시작한 후 아무 페이지나 로딩하면 위와 같은 문제가 발생함. 한번 발생하고 나면 톰캣 재 시작하기 전까지는 발생 안 함.

 

2. [Javascript] "종결되지 않은 문자열 상수입니다"

 

함수로 넘겨받은 값에 개행문자가 있을경우 자바스크립트는 줄바꿈을 해버린다. 이는 "종결되지 않은 문자열 상수"라는 오류메세지를 출력하는데,

이를 해결 해주기 위해서는 넘기는 인자(문자열)의 개행문자( '\n', '\r')를 없애 주어야 한다.

그 해결 방법으로 2가지 정도를 둘 수 있는데, 본인은 2번 째 방법(hidden tag이용)을 사용하였고, 실제 잘 된다.

 

  • 해결책
  1. "replace() 함수 이용 방법 http://blog.naver.com/basketyj?Redirect=Log&logNo=30049484105
  2. "hidden tag이용 방법" http://blog.naver.com/metalbaram?Redirect=Log&logNo=60062426570

 

 

3. [스프링] 트랜잭션 - 정상적인 쿼리를 실행하였음에도 불구하고 DB에 반영(commit)이 안되는 문제

 

 스프링에서 제공하는 트랜잭션기능을 사용하는 시스템에서 insert 쿼리가 반영되지 않는데, Toad등을 이용해서 직접 DB에 insert 쿼리를 날리면

commit이 잘 되는 경우가 있다.

 무엇이 문제일까? ..

이런 경우에는  데이타 소스(dataSource) 빈 설정에 defaultAutoCommit 프러퍼티 값이  false로 설정되어 있는지를 확인해 볼 필요가 있다.(DBCP기준) 만약 이 값이 false로 설정되어 있다면 DB에 쿼리를 날릴 때 transaction으로 묶여서 실행되지 않으면 commit이 실행되지 않는(false) 듯 하다.

 

따라서, insert, delete, update 등의 트랜잭션을 필요로 하는 쿼리들을 실행하는 BO객체 내의 메소들은 트랜잭션 내에서 실행이 되어져야 한다.

이를 위해 다음과 같은 spring 설정 파일(applicatioinContext.xml) 내에 트랜잭션을 적용할 메소드를 지정해 주게 되는데,

만약 insert 쿼리를 실행하는 BO 객체내 메소드의 이름이 addPerson()이었다면.....

아래 설정에 add로 시작하는 메소드는 트랜잭션 설정이 되어 있지 않으므로, 정상적인 쿼리라고 해도 정상 반영(commit) 되지 않게 된다.

  1.  
  2.  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" lazy-init="true">
         <property name="dataSource" ref="mysqlDataSource" />
     </bean>
  3.  
  4.  <tx:advice id="txAdvice">
         <tx:attributes>
             <tx:method name="insert*" propagation="REQUIRED"/>
             <tx:method name="delete*" propagation="REQUIRED"/>
             <tx:method name="update*" propagation="REQUIRED"/>
             <tx:method name="save*" propagation="REQUIRED"/>

         </tx:attributes>
     </tx:advice>
  5.  <aop:config>
          <aop:advisor
          pointcut="execution(public * com.tarrega.note..*.*BO.*(..))"
          advice-ref="txAdvice"/>
     </aop:config>

 

 위에서 말한 addPerson() 메소드가 제대로 실행되기 위해서는 위 설정부분에

         <tx:method name="add*" propagation="REQUIRED"/>    를 추가하거나, 메소드 이름을 insertPerson()으로 변경해야만 한다.

 

4. [Javascript] ie6,7에서의 element의 name과 id 동일 시 문제(ie8과의 크로스 브라우징 문제 야기)

 

아래의 코드에 대해 getElementById("dbAchPath")를 실행할 경우, ie6,7 과 ie8에서는 각각 return 되는 object가 다르다.

 

  1. <camir:commonCode name="dbAchPath" grCd="AAB" type="radio" value="${dbMstr.dbAchPath}"/>
    <input type="hidden" id="dbAchPath" name="dbAchPath" value="${ dbMstr.dbAchPath }">

 

즉 사용자가 id가 "dbAchPath"인 2번 째 hidden 태그의 값을 얻어오기위해, getElementById("dbAchPath")를 사용할 경우 ie8에서는 id 값만을 가지고

검색하기 때문에 정상적인 결과 값을 얻을 수 있지만, ie6나 ie7에서는 1번 째 element에 "dbAchPath" 에 해당하는 id가 아니더라도, name값과 매치가 되면, 해당 object를 리턴해 버린다. 재밌는 것은 위와 같은 ie6,7 엔진의 특성 때문에 개발자의 실수로 element에 id를 부여하지 않아도 정상적으로 작동한다는 것이다.(물론 ie8에서는 id가 없으면, getElementById 사용시 자바스크립트 오류가 발생한다.)

따라서, ie6,7,8 모두에서 잘 작동하는 코드를 만들기 위해서는 id를 꼭 만드는 습관이 필요할 듯 하고, 다른 element의 name과 동일한 id를 사용하지 않도록 해야 할 것이다.

 

 

5. [eclipse] eclipse 개발 중 톰캣에서 class나 library를 읽지 못하는 문제 발생 시

dynamic web project로 서버를 띄우면 코드를 수정할 때마다 별도의 maven 빌드 없이도 자동으로 수정사항이 반영되는 장점이 있다. 하지만 eclipse가 자동으로 변경된 파일들을 반영하다보니 제대로 반영이 안되거나 class 또는 library를 읽지 못하는 문제점이

발생하곤 한다. 이럴 땐 보통 프로젝트 clean, 서버 clean, 서버 clean tomcat working directory 심지도 서버 설정을 지우기등을 하고 이렇게 하면 잘되기도한다.

 

그래도 안되면, eclipse에서 build 결과물들을 제대로 생성되는지 workspace에서 직접 확인해 보자. 그 위치는 대략 다음과 같다.

C:\camir_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\krs\WEB-INF

 

아래 내용은 다시 검증하자

확인 결과, lib 디렉토리 및 library들이 생성되지 않는 문제가 있다면, eclipse에서 생성되는 다음 파일들 " .project, .classpath, .settings "에 변경이 발생되서 생긴 문제라고 생각해 볼 수 있다. 즉 svn으로 소스코드를 공유하는데, 누군가가 위 파일들에 변경을 가하고, 변경된 위 eclipse 설정파일이 현재 내 프로젝트 설정과 맞지 않을 수 있는 것이다. 이럴 땐, pom.xml의 maven-eclipse-plugin설정에 변화를 주고, maven goal로 " eclipse:clean eclipse:eclipse "를 실행해서, " .project, .classpath, .settings "파일들을 새로 갱신해준다.

 

ex) pom.xml 수정(WTP 프로젝트 설정 포함(이 설정이 WTP 프로젝트 설정 파일들을 제대로 생성 못한다는 말도 있음. 검증 필요))

  1.   <build>
  2. <plugins>

  3.           <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-eclipse-plugin</artifactId>
                  <version>2.6</version>
                  <configuration>
                    <downloadSources>false</downloadSources>
                    <downloadJavadocs>false</downloadJavadocs>
                    <wtpContextName>/camir_scheduler</wtpContextName>
                    <wtpversion>1.5</wtpversion>
                </configuration>

              </plugin>
  4. <plugins>

  5. </build>

 

http://maven.apache.org/plugins/maven-eclipse-plugin/wtp.html Eclipse에서 WTP dynamic web project로 변경방법

 

6. [eclipse] eclipse 개발 중 톰캣에서 jsp 로딩 실패하는 문제

 

2009. 9. 30 오전 10:49:02 org.apache.catalina.core.ApplicationDispatcher invoke
심각: Servlet.service() for servlet jsp threw exception
java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.pages.keywordManagement.keywordListForm_jsp

 

해당 jsp 파일을 강제로 수정하고 저장한 후 톰캣을 리스타트하면, 페이지가 정상 작동한다;;;;;;;;

 

 

7. [ORACLE] ORA-01652: 128(으)로 테이블 공간 TEMP에서 임시 세그먼트를 확장할 수 없습니다

 

문제상황

com.nhncorp.lucy.db.dao.SqlExecutionException:  
--- The error occurred in sqlmap/AprvGuide.xml. 
--- The error occurred while applying a parameter map. 
--- Check the aprvGuide.insertAprvGuide-InlineParameterMap. 
--- Check the parameter mapping for the 'aprv_guide_cont' property. 
--- Cause: java.sql.SQLException: ORA-01652: 128(으)로 테이블 공간 TEMP에서 임시 세그먼트를 확장할 수 없습니다

 

원인

 

해결책

 

기타 배경지식

 

 

참고자료

http://blog.naver.com/icarussd?Redirect=Log&logNo=120016223841

 

8. [ibatis] sqlmap 관련해서 오류가 날 때 혹시 중복된 id의 쿼리가 존재하지 않는지 확인하자...

sqlmapid를 찾을 수 없다는 식으로만 오류가 나와서 찾는데 어려움이 있다.

 

 

9. context:annotation-config 추가 후 톰캣 올리면 Invalid property 'order' of bean class 오류 발생

클래스 패스에 스프링2.5와 2.0가 같이 있어서 발생 한 문제.

 

참고 : http://stackoverflow.com/questions/1570367/spring-autowired

My guess is that you have both Spring 2.5 and 2.0 on your classpath. The copy of 2.5 would have allowed you to use <context:annotation-config />, but then it used the 2.0 copy for RequiredAnnotationBeanPostProcessor.

 출처 : http://tarrega.springnote.com/pages/3673371

'Information Technology > Spring Framework' 카테고리의 다른 글

이클립스 플로그인  (1) 2011.07.07
HTTP Status Messages  (0) 2011.06.29
SVN에서 "is not under version control  (0) 2011.06.17
Jakarta Ant 2/2  (0) 2011.06.15
Jakarta Ant 1/2  (0) 2011.06.15