IOException while loading persisted sessions: java.io.WriteAbortedException:

...

==> 리눅스 서버의 톰캣에서 뱉어냈던 에러.

알고보니 톰캣을 내리면 context 정보를 저장하고 올리면 저장되었던 정보에서 다시 읽어들이는 이상한(?) 내용 때문인데...

톰캣의 conf 안에 있는 server.xml  <Context> 태그 사이에 아래 설정을 추가하여 해결.
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false"/> 



Connection reset은 DB 서버측에서 커넥션이 종료되었으나 WAS는 그것을 알아차리지 못할때 발생합니다. TOMCAT의 경우 , evicator라는 것이 있어 정기적으로 비정상종료된 커넥션을 없애주는 옵션이 있습니다. 아래 스크립트를 참고하세요

 

- validationQuery="SELECT 1 FROM DUAL"

- testWhileIdle="true"

- timeBetweenEvictionRunsMillis="3000"

 

<Resource name="WmsPool" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" url="jdbc:oracle:thin:@<ip>:<port>:<sid>" username="<유저>" password="<패스워드>" initialSize="5" validationQuery="SELECT 1 FROM DUAL" testOnReturn="true" testWhileIdle="true" timeBetweenEvictionRunsMillis="3000" maxActive="5" maxIdle="2" maxWait="10000" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" />


출처 : http://www.javaservice.net/~java/bbs/read.cgi?b=qna2&c=r_p&n=1235977153

한 IP에 도메인을 두개 이상 받았을 경우를 이야기 한다.
Apache conf에서 httpd.conf 수정한다.
=============== 이하 수정부분 ===============
#현재 서버의 IP 지정
ServerName 203.000.000.000:80

#=== 톰캣연동과 관련한 JkWorker 설정 공통부분 : 각자 맞춰서 알아서 작성===
#workers 위치 지정
JkWorkersFile /usr/local/apache2/conf/workers.properties

#jk 로그 파일 위치 지정
JkLogFile /usr/local/apache2/logs/mod_jk.log
JkShmFile /usr/local/apache2/logs/mod_jk.shm

#로그 레벨 지정
JkLogLevel debug

#로그 시간 포맷 지정
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

#로그 내용 포맷 지정
JkRequestLogFormat "%w %V %T"
#=================================================
# 가상 호스트 지정할 IP 지정
NameVirtualHost 203.000.000.000:80
# 첫번째 가상 호스트
<VirtualHost 203.000.000.000:80>
 ServerAdmin xxxxx@xxxx.co.kr
 DocumentRoot /var/www/html/xxxx/
 ServerName xxxx.co.kr
 CustomLog logs/xxxx.co.kr-access_log common
 JkMount /*.jsp worker1
</VirtualHost>
# 두번째 가상 호스트
<VirtualHost 203.000.000.000:80>
 ServerAdmin oooo
@oooo.co.kr
 DocumentRoot /var/www/html/oooo/
 ServerName oooo.co.kr
 CustomLog logs/oooo.co.kr-access_log common
 JkMount /*.jsp worker1
</VirtualHost>

Tomcat의 경우 Apache에서 가상호스트를 설정하였다면,
Tomcat 폴더의 Conf 디렉토리에 위치한 server.xml을 수정한다.
아래와 같이 두개의 URL 별로 HOST를 설정한다.
<Host name="xxxx.co.kr"  appBase="/var/www/html/xxxx/"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<Context path="/" docBase="" reloadable="true" />

<Host name="oooo.co.kr"  appBase="/var/www/html/oooo"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<Context path="/" docBase="" reloadable="true" />

만약 OZ를 특정위치에서 서비스 한다면
OZ의 폴더를 해당 URL 아래로 이동시킨 후
oz/conf/db.properties에서 URL을 변경해준다.
또한 oz/WEB-INF/classess에 있는 ozserver.properties의
oz server의 home 위치를 해당 URL로 변경시켜준다.

시스템 환경변수 살펴보시길..
변수 추가해주세욤~

기존에는

commons-dbcp-1.2.1.jar

commons-pool-1.2.jar

commons-collections-3.1.jar

등 여러 라이브러리 파일을 톰캣 lib에 추가하여 설정하여야 했지만

요즘 톰캣(내 기준 6.0)에는 위 라이브러리가 tomcat-dbcp.jar 라는 이름으로 통합되어 포함되어 있다.

기타 설정 방법은 예전 DBCP 방식과 동일

1) server.xml 설정

 - <GlobalNamingResources></GlobalNamingResources>부분에 아래 내용 추가
   
<Resource name="jdbc/자기가설정하고 싶은 이름" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
     url="jdbc:oracle:thin:@DB URL:1521:orcl" username="DB login ID" password="DB login PASS"
     loginTimeout="10" maxActive="100" maxIdle="30" maxWait="10"/>

..

<Context> </Context> 부분에 다음 처럼 수정

 <Context docBase="XXXX" path="/XXXXX" reloadable="false" source="org.eclipse.jst.jee.server:XXXX">
       <Resource name="jdbc/자기가설정하고 싶은 이름" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
     url="jdbc:oracle:thin:@DB URL:1521:orcl" username="DB login ID" password="DB login PASS"
     loginTimeout="10" maxActive="100" maxIdle="30" maxWait="10"/>

 </Context>

 

 

2) web.xml

<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/자기가설정하고 싶은 이름</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

 

3) tomcat 재시작


+ Recent posts