"Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.2"

 

오라클 jdbc driver를 Maven으로 등록해서 사용하려고 하는데, 오류가 발생하고 등록이 되지 않는 문제가 발생합니다.

 

설마 천하의 오라클 ojdbc14.jar 가 maven으로 저장소를 제공하지 않는것은 아닐텐데...

 

 

 

안되나? 해서 jar를 직접받아서 WEB-INF/lib에 연결시키려고 하다가 검색을 해보니 간단히 해결할수 있는 해결책이 있네요.

 

ojdbc14.jar 오류가 발생한 상태에서 pom.xml을 열고 다음과 같이 repositories를 추가 등록하면 됩니다.

 

... 중략

<properties>
  <java-version>1.6</java-version>
  <org.springframework-version>3.1.1.RELEASE</org.springframework-version>
  <org.aspectj-version>1.6.10</org.aspectj-version>
  <org.slf4j-version>1.6.6</org.slf4j-version>
 </properties>

<!-- add new repositories for oracle -->
 <repositories>
  <repository>
      <id>mesir-repo</id>
      <url>http://mesir.googlecode.com/svn/trunk/mavenrepo</url>
   </repository>
 </repositories>

 

... 중략

 

정상적으로 사용이 가능하지만 좀 불편한 방법인건 맞습니다.

 

 

 

 

 



SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
 at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
 at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
 at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:133)
 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727)
 at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
 at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)

 

 

eclipse에서 Tomcat 연동해서 실행을 시키는데, 멀쩡하던 프로젝트가 위와 같은 오류를 뱉어버리고는 구동되지 않는 현상이 발생합니다. 특히 maven plugin을 사용하는 프로젝트는 이런상황이 되면 더이상 진행 불가합니다.

 

천천히 오류메시지를 읽어내려가다 보면 기본 Spring 관련 ContextLoaderListener가 없다고 나옵니다. 뭔가 관련 클래스가 없는것이 확실합니다. 아니면 톰캣이 인식하지 못하고 있던가...

 

다음의 항목을 일단 체크해봅니다.

 

Project Explorer ==> 마우스 오른쪽 클릭 ==> Properties or Alt + Enter ==> Deployment Assembly

 

 

 

뭔가 있어야 할 위치에 있어야 할것이 없는것 같습니다. 뭐지? 잘 기억이 나지 않는다면 정상적으로 로딩되는 다른 유사한 프로젝트를 열어보십시오.

 

Maven Dependency 가 존재하지 않는다는 차이점을 발견할 것입니다. 왜 없어졌는지는 나중에 살펴보기로 하겠습니다.

 

 

 

Java Build Path Entiries 를 선택하고 NEXT 를 클릭합니다.

 

 

 

Maven Dependencies를 선택하고 Finish 를 클릭하면 완료가 됩니다.

 

 

 

이전에 없던 부분이 추가되었습니다.

 

이제 확인을 하고 다시 톰캣을 구동시켜보면 오류가 없어지고 정상적으로 로딩이 됨을 볼수 있습니다.

 

마찬가지로 다른 jar 관련 부분도 이런방식으로 추가합니다.

프로젝트별로 svn 구성을 다르게 하기도 하고 또 maven을 사용하지 않고 jar파일을 별도의 디렉토리에 넣어서 관리하곤 합니다. 이런경우에도 해당 디렉토리를  WEB-INF/lib 로 연결시켜주면 통캣이 로딩하면서 해당 jar를 인식하게 됩니다.

 

 

 

 



mssql + iBatis 를 사용하는 프로젝트에서 이유도 없이 쿼리 실행결과가 느려지는 현상이 발생했습니다. 그것도 1,2 초가 아닌 10초 이상이나 걸립니다. 데이터가 많아서도 아닙니다. 1만건도 안됩니다. 게다가 쿼리문을 Tool을 이용해서 직접 실행시켜보거나 테스트 페이지 만들어서 실행시켜보면 1초 미만으로 결과값을 반환합니다.

iBatis를 사용하는 환경에서만 유독 발생하는 아주 고약한 원인을 알수 없는 문제입니다.


일단 구글링 결과를 토대로 한 현재까지의 원인 분석 및 해결방법은 다음과 같습니다.

원인 : JDBC PreparedStatement, MSSQL 과의 궁합문제. 또는 MSSQL 내부의 형변환 문제.
해결방법 : 문제가 되는 쿼리를 찾아서 PreparedStatement 를 statement로 변경해 줍니다. (완전 간단하죠? ㅠ.ㅠ;;;) 
#member_key# ==> '$member_key$' (문자열이기에 '' 으로 했습니다.)

 

하지만 완전한 해결책은 아니기에 뒷끝이 좀 찝찝합니다. 


검색을 좀더 다양하게 시도 해 보니 ( meta developer story 라는 블로그 참고) 다음과 같은 내용이 있네요.

 

" JDBC 의 PreparedStatement 를 사용한 경우 MS-SQL 성능과 관련된 문제입니다.

MS-SQL JDBC 의 대부분은 PreparedStatement 를 처리할 때, 스토어드 프로시져 형태로 처리를 합니다. 이 경우, 입력받는 파라메터 중 String 때문에 문제가 발생하는데...

Java 의 String 은 16-bit 캐릭터이며, 이는 MS-SQL 의 nvarchar 유형과 일치하므로, 내부적으로 String 파라메터를 nvarchar 유형으로 처리하고자 합니다.

다행히 DB Table 이 nvarchar 유형이라면, 문제가 발생하지 않지만 varchar 라면 해당 테이블의 해당컬럼이 인덱스가 생성되어 있더라도 테이블의 해당컬럼이 nvarchar 로 변환됨으로 인해서 인덱스를 사용하지 못하게 되어(컬럼의 형변환 되면 인덱스를 사용할 수 없음) "

그래서 성능문제가 발생하게 된다고 합니다.

 

2013. 06. 17. 추가.

추가로 몇가지의 테스트를 시도 해 보았습니다.


1. JDBC Driver 변경

MS-SQL에서 제공한 JDBC Driver가 문제인가 싶어서 jtds1.2.7 로 동일한 테스트를 해보았습니다.

(제 개발환경이 jdk1.6까지라서 최신 드라이버인 jtds 1.3.1은 사용할수 없었습니다.)

 ==> 결과는 동일하게 나타났습니다.

 

2. DB Table Column Type 변경

위의 내용대로라면 DB Table column 을 nvarchar type으로 변경할 경우 속도문제가 해결되어야 하는게 맞습니다.

하지만  column type을 변경해도 속도문제는 여전히 개선되지 않아보입니다.

 

점점 미궁으로 빠져드는 그런 상황이네요...




« PREV : 1 : ··· : 21 : 22 : 23 : 24 : 25 : 26 : 27 : ··· : 61 : NEXT »