2008년 07월 29일
connection pool
요즘은 처음 부터 기초를 다져야 겠다는 생각에 하나 하나 정리를 하고 있다.
정말 가장 기초적인 것을 모르면서 자바를 한다는게 한심하기 까지 하다.
connection pool을 지금까지 많이 사용해 왔지만 특별히 의식해서 사용한 기억이 없는거 같다.
iBatis를 사용했을 때는 iBatis가 제공 하였으며, 그외에는 다른 사람들이 설정을 했던거 같다.
일본에 와서... 이런 설정이나 서버 관련 부분을 거의 경험하지 못했던거 같다. 의지 부족도...
가장 일반적인걸 찾다 보니 jakart-commons dbcp를 찾게 되었다.
설정 방법을 전부 찾다 보니 두가지 방법이 있는거 같은데.. 맞는지는 모르겠다. 테스트 하기가 싫다.
환경은 Tomcat, Spring 을 이용한 환경이다.
1 Tomcat에 설정 관련을 두고 spring에서는 JNDI로 얻어 오는 방법
- Tomcat디렉토리 밑에 common/lib/ 밑에 commons-dbcp, commons-collections, commons-pool.jar 파일을 놓는다.
(오라클을 이용하는 경우 ojdbc14.jar도 넣어 줬다.)
- Tomcat의 server.xml을 열어서 다음과 같이 수정한다.
<Context path="/springapp" reloadable="true" docBase="D:\eclipse\workspace\springapp\target\springapp">
<Resource name="jdbc/testDB" auth="Container" type="javax.sql.DataSource"
username="test" password="test"
driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@hostname:1521:XE"
maxActive="100" maxIdle="30" maxWait="10000"/>
</Context>
- web.xml을 열어서 다음과 같이 수정한다
<resource-ref>
<description>dbcp test</description>
<res-ref-name>
jdbc/testDB
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
- applicationContext.xml을 다음과 같이 수정한다
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/testDB</value>
</property>
</bean>
<bean id="testDao">
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>
이경우
public class TestDao {
... 생략...
public void insertXXX() {
... 예외처리 생략....
Connection conn = getDataSource().getConnection();
이하 생략
}
}
이런 식으로 매번 Connection 객체를 얻어 와야 하는지?
아니면 iBatis 처름 Connection을 의식하지 않고 코딩하는 것이 가능한지?
좋은 방법이 있으면 좀 가르쳐 주십시요.
2 Tomcat은 전혀 신경 쓰지 않고 spring ApplictionContext.xml 파일 설정만으로 가능해 보이는 방법
-applicationContext.xml 파일을 다음과 같이 수정한다.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@hostname:1521:XE</value>
</property>
<property name="username">
<value>test</value>
</property>
<property name="password">
<value>test</value>
</property>
</bean>
public void saveProduct(Product prod) throws Exception {
.... try, catch 생략....
Connection conn = ds.getConnection();
String sql = "SELECT * from products";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
rs,stmt,conn.close();
}
이런 식으로 해 보니까 디비 접속은 잘 되는거 같은데...아무 문제가 없는지
더 나은 방법이 있으면 힌트 부탁 드립니다.
지금 로컬 환경에서의 pooling 상태 같은걸 모니터링 할수 있는 것은 방법 좀 부탁 드립니다.
SpringJDBC를 사용할 경우 Dao가 많이 달라 지는군
역시나 사람은 공부를 해야 한다.
스프링 2.5에 많은 기능들이 있었다.
테스트 해 보자.
정말 가장 기초적인 것을 모르면서 자바를 한다는게 한심하기 까지 하다.
connection pool을 지금까지 많이 사용해 왔지만 특별히 의식해서 사용한 기억이 없는거 같다.
iBatis를 사용했을 때는 iBatis가 제공 하였으며, 그외에는 다른 사람들이 설정을 했던거 같다.
일본에 와서... 이런 설정이나 서버 관련 부분을 거의 경험하지 못했던거 같다. 의지 부족도...
가장 일반적인걸 찾다 보니 jakart-commons dbcp를 찾게 되었다.
설정 방법을 전부 찾다 보니 두가지 방법이 있는거 같은데.. 맞는지는 모르겠다. 테스트 하기가 싫다.
환경은 Tomcat, Spring 을 이용한 환경이다.
1 Tomcat에 설정 관련을 두고 spring에서는 JNDI로 얻어 오는 방법
- Tomcat디렉토리 밑에 common/lib/ 밑에 commons-dbcp, commons-collections, commons-pool.jar 파일을 놓는다.
(오라클을 이용하는 경우 ojdbc14.jar도 넣어 줬다.)
- Tomcat의 server.xml을 열어서 다음과 같이 수정한다.
<Context path="/springapp" reloadable="true" docBase="D:\eclipse\workspace\springapp\target\springapp">
<Resource name="jdbc/testDB" auth="Container" type="javax.sql.DataSource"
username="test" password="test"
driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@hostname:1521:XE"
maxActive="100" maxIdle="30" maxWait="10000"/>
</Context>
- web.xml을 열어서 다음과 같이 수정한다
<resource-ref>
<description>dbcp test</description>
<res-ref-name>
jdbc/testDB
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
- applicationContext.xml을 다음과 같이 수정한다
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/testDB</value>
</property>
</bean>
<bean id="testDao">
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>
이경우
public class TestDao {
... 생략...
public void insertXXX() {
... 예외처리 생략....
Connection conn = getDataSource().getConnection();
이하 생략
}
}
이런 식으로 매번 Connection 객체를 얻어 와야 하는지?
아니면 iBatis 처름 Connection을 의식하지 않고 코딩하는 것이 가능한지?
좋은 방법이 있으면 좀 가르쳐 주십시요.
2 Tomcat은 전혀 신경 쓰지 않고 spring ApplictionContext.xml 파일 설정만으로 가능해 보이는 방법
-applicationContext.xml 파일을 다음과 같이 수정한다.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@hostname:1521:XE</value>
</property>
<property name="username">
<value>test</value>
</property>
<property name="password">
<value>test</value>
</property>
</bean>
public void saveProduct(Product prod) throws Exception {
.... try, catch 생략....
Connection conn = ds.getConnection();
String sql = "SELECT * from products";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
rs,stmt,conn.close();
}
이런 식으로 해 보니까 디비 접속은 잘 되는거 같은데...아무 문제가 없는지
더 나은 방법이 있으면 힌트 부탁 드립니다.
지금 로컬 환경에서의 pooling 상태 같은걸 모니터링 할수 있는 것은 방법 좀 부탁 드립니다.
SpringJDBC를 사용할 경우 Dao가 많이 달라 지는군
역시나 사람은 공부를 해야 한다.
스프링 2.5에 많은 기능들이 있었다.
테스트 해 보자.
# by | 2008/07/29 01:04 | 오픈소스 | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]