블로그 이미지
숏퐁숑

카테고리

분류 전체보기 (70)
게임기획자 준비 (18)
게임기획 참고자료 (7)
프로그램 (33)
숨쉬기 활동 (10)
Total
Today
Yesterday

달력

« » 2024.10
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

공지사항

태그목록

최근에 올라온 글

프로젝트를 진행하다보니 솔루션으로 개발되어진 시스템 개발환경을 수정해야할 일이 생겼다.  JAVA PROJECT로 만들어진

어플리케이션을 Web Dynamic Project로 변경해서 이클립스 상에서 톰캣에 올려놓고 운영을 하고 싶은데... 변환하는 과정에서

여러 문제가 발생해서 해결한 부분들을 기록해 보았다.


우선 웹 다이나믹 프로젝트로 변환하기 위해 Project Facets 부분 설정을 아래와 같이 변경해 주었고,

변경되어진 프로젝트를 톰캣에 올리려고 하니

톰캣 7.0버전 이상부터 지원이 가능해서 Tomcat 6.0으로 되어있는 설정 부분을 다 변경하고 Tomcat 7.0을 설치하였다.

 

여기까지는 순조로웠다. 쉽게 Web Dynamic Module로 변경은 해서 이제 톰캣에 add는 되었는데....톰캣을 구동하니 아래와 같은 에러가 발생하였다. 톰캣을 구동하는데 다음 처럼 컴포넌트를 시작하는데 실패하였다는 메시지였다.

왜 발생을 했을까? 우선 톰캣을 구동하면 빌드해 놓은 클래스파일들을 올리고나서 jar파일들을 읽어 드린다. 여기서 애기하는 conponent라는 것은 이 class파일을 묶어놓은 jar파일을 애기하는 것 같다. 톰캣 6.0에서 7.0으로 변경하면서 commons.dbcp 파일을 못찾고 있어 에러가 떨어졌다.

 

javax.naming.NamingException: Could not load resource factory class [Root exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSourceFactory]
 at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:82)
 at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:842)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:153)


처음에는 기존 6.0톰캣 lib폴더 안에 있는 jar파일을 넣었더니 클래스파일을 찾기는 하는데 또 이번에는 읽을수가 없다고 나와서...


아래 경로해서 해당하는 버전의 commons.dbcp를 다운받아서 톰캣 lib 폴더에 넣어주었다.

http://commons.apache.org/proper/commons-dbcp/
http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

 

그랬더니 아래와 같은 에러가 여전히 발생하고 있었다... 왜 이런 에러가 계속 발생하는 걸까? 결론부터 애기하면

아래와 같은 에러는 해당 라이브러리가 버전이 달라 톰캣에서 지원을 안한다는 메시지로 보면 된다. 예를 들어

예를 들어 commons-dbcp.jar 파일은 톰캣6에서 사용했던 라이브러리였지만 tomcat7에서는 tomcat-dbcp.jar파일로

바뀌어져 제공을 하는데 잘 몰라서 commons-dbcp.jar파일을 넣는다던지 기존 버전에 쓰던 라이브러리를 넣었을때

아래와 같은 에러문구를 만날 수 있게 된다. 해결방법은 간단하다. 그냥 옛 버전 라이브러리를 삭제해주면 된다.

그리고 servlet.jar파일을 jdk 폴더 아래 jre/lib 폴더에 넣어주면 아래 에러는 해결할수 있다.


org.apache.catalina.LifecycleException: Failed to start component [StandardServer[10005]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:693)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
 at org.apache.commons.dbcp.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:152)
 at org.apache.commons.dbcp.BasicDataSourceFactory.getObjectInstance(BasicDataSourceFactory.java:144)
 at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:141)
 at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:842)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
 at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1103)
 at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:682)
 at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:271)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
 at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
 at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:731)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
 ... 7 more


하지만 문제를 다 해결하진 못했다. 모든 개발의 시작은 개발 환경설정에서 시작을 하는데 개발 환경을 잡는 것은 산 넘어 산이다.구글링을 통해서 다양한 문서들을 정독하다보니 먼저 발견한 것은 Tomcat6버전에서 Tomcat7버전으로 넘어오면서

Commons-dbcp.jar에서 제공하던 class 오브젝트들을 Tomcat-dbcp.jar파일에서 통합적으로 제공한다고 한다.

많은 사람들이 저 위의 방식대로 Tomcat-dbcp.jar파일을 Tomcat 폴더의 lib폴더에 넣고 아래처럼 JNDI 설정을 하라고 한다.

(아래 설정하는 것은 http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html 참고 바람)

 

<Resource name="jdbc/voc"
     auth="Container"
     type="javax.sql.DataSource"
     driverClassName="oracle.jdbc.driver.OracleDriver"
     factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
     url="jdbc:oracle:thin:@1xx.xx.x.xxx:xxxx:SID name"
     username="tiger"
     password="tiger"
     maxActive="3"
     maxIdle="3"
     maxWait="-1" 
     removeAbandoned="true"
     removeAbandonedTimeout="60"
     logAbandoned="true"
     validationQuery="select 1 from dual"
     validationInterval="30000"
     testOnBorrow="true"
     tetWhileIdle="true"
     timeBetweenEvictionRunsMillis="600000"
     minEvictableIdleTimeMillis="3600000"
     />

 

  server.xml파일에 JNDI 설정해 주고, context.xml에

<ResourceLink global="jdbc/voc"  name="jdbc/voc"  type="javax.sql.DataSource"/> 
<ResourceLink global="jdbc/sms"  name="jdbc/sms"  type="javax.sql.DataSource"/> 

추가해주고 마지막으로 web.xml에

 <resource-ref>
  <description>
  </description>
  <res-ref-name>jdbc/sms</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  <res-sharing-scope>Shareable</res-sharing-scope>
 </resource-ref>


추가해주면 끝난다. 사실 위의 방식은 좀 Old한 방식이다 JNDI로 안붙고 SPRING  설정 파일에 다 설정해서 간단히 사용하는 경우가 많다.  위에 처럼 열심히 설정하면 끝나는것 처럼 보이지만 tomcat-dbcp.jar에서 server.xml에 설정 되어진 팩토리의 클래스들을 읽어오지를 못한다. 결국 통합적으로 제공해준다는  jar파일에서 읽어오지 못해서 에러가 발생할 것이다.

(구글링하다 보면 7.0에서 tomcat-dbcp.jar파일만 넣으면 된다고 써있다;;; 하지만 안되는 분들도 있을 것이다) 


해결방법은 기존에 ojdbc14.jar파일을 comcat의 lib 폴더에 넣어줘야 해결된다. 위에 오라클 드라이브나 DB 컨넥션 하기위한 클래스파일들을 정상적으로 읽어드리기 시작한다.

이야기가 길어졌는데...개발하기 전에 환경을 잡는 과정에서도 많은 문제점들을 접하게 된다. 이런 문제를 해결하기 위해 가능한

비슷한 환경에서 개발중인 분들의 글들을 참고하면서 해결해 나가는데 정답은 없는것 같다.  원인을 잘 모르면 똑같이 해보아도 잘 해결이 안된다. 나중에 이런문제가 발생했을 때 기억을 더듬기 위해 두서없이 적어보았는데 혹시 같은 문제로 고생분이신 부들에게 도움이 되었으면 좋겠다. 그럼 오늘도 열심히 개발 삼매경으로 ㄱㄱㄱ 

Posted by 숏퐁숑
, |

최근에 달린 댓글

글 보관함