DBCP 관련

2013. 9. 3. 15:21SAP/BO

DBCP

동적쿼리 : 하나의 쿼리구문이 상황에 따라 다른 결과를 가져오는 쿼리구문.
          
          

WAS : Web Application Server. 대표적인 오픈소르로는 Tomcat이 있으며
      상용 WAS로 TMAX의 jeus등이 있다. 톰캣의 경우 자바기반으로 구성되어 있다.

 

VPN : Virtual Private Netwrok. 공중 네트워크

===========================================================================================

tomcat 을 사용하여 JDBC 를 이용한 연결을 한다고 가정할때 입니다.

 


tomcat - server.xml파일에 DB Connection생성을 위한 설정(<Host>태그 내부에 추가함)

 

<Host name="localhost"  appBase="D:/jspHome"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

 

<Context Path="/myApp" docBase="myApp" debug="5" reloadable="true" crossContext="true">

               <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"

                maxActive="100" maxIdle="30" maxWait="10000"

                username="sys" password="password" driverClassName="com.mysql.jdbc.Driver"

                url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/>

</Context>

</Host>

 

Resource

- name : Resource명칭(JNDI Lookup 시 사용할 명칭)

- auth : Resource 관리자를 지정. 여기서는 톰캣컨테이너가 관리자임

- type : Resource 의 형태 지정. 데이타소스 형태를 지정함

- maxActive : 최대 연결 가능한 Connection 숫자를 지정함

- maxIdle : Connection pool 유지를 위해 최대 대기 connection 숫자

- maxWait : Connection 재 사용을 위해 대기해야 하는 최대 시간(단위:ms)

- username : DB접속 계정

- password : DB접속 암호

- driverClassName : DB와 접속하기 위한 driver 클래스를 지정. 예에서는 MySql임

- url : 접속한 DB가 위치한 서버명, 포트명, 사용할 데이타베이스명을 지정


 

이클립스 프로젝트를 사용하시면 WEB-INF/web.xml파일에 DB Connection생성을 위한 설정

 

아니면  톰캣 홈/conf/web.xml 설정

 

<resource-ref>

              <description> DB Connection </description>

              <res-ref-name>jdbc/TestDB</res-ref-name>

              <res-type>javax.sql.DataSource</res-type>

              <res-auth>Container</res-auth>

</resource-ref>

 

resource-ref

- description : 참조할 resource에 대한 설명

- res-ref-name : 참조할 resource의 명칭. Server.xml에 정의된 이름과 일치해야함

- res-type : 참조할 resource 형태로 여기서는 DataSource를 지정함

- res-auth : 참조할 resource를 관리할 주체로 톰캣컨테이너를 지정함

 

이클립스 프로젝트를 사용하시면 아래 하나 더 추가해야 합니다.

 

이 방식의 특징은 dbcp 연결시 META-INF 폴더 밑에 context.xml 생성하여 아래 예시와 비슷하게

 

만들어서 사용해야 합니다. 별도로

 

 context.xml

 

  <context>

         <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"

                maxActive="100" maxIdle="30" maxWait="10000"

                username="sys" password="password" driverClassName="com.mysql.jdbc.Driver"

                url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/>

 </context>

 

 

최종 자바에서는

 

Connection conn = null;

 

 try {
   // 최상위 Context를 생성한다. 기본이 되는 작업
   Context ctx = new InitialContext();
   // 자바환경의 subContext를 얻는다.
   Context envCtx = (Context)ctx.lookup("java:comp/env");
   if(envCtx!=null){
    // jdbc/orcl 이름으로 바인딩된 객체를 통해서 DataSource 인스턴스를 얻는다.
    DataSource ds = (DataSource)envCtx.lookup("jdbc/TestDB");
 
    if(ds !=null){
     conn = ds.getConnection();
    }
   }
  }catch (NamingException e) {
   System.out.println("can't get Connection from DataSource : " + e.toString());
  }catch (Exception e) {
   System.out.println("DB Connection Error : " + e.toString());
  }

 

 

 

 

 

JSP 에서 다이렉트로 접속 하시려고 할경우에는


<%@ page language="java" import="java.sql.*" contentType="text/html;charset=KSC5601" %>
<%
    Class.forName("org.gjt.mm.mysql.Driver");
    Connection    Conn    = DriverManager.getConnection("jdbc:mysql://localhost/test","test","test");
    Statement    stmt    = Conn.createStatement();
    ResultSet    rs        = stmt.executeQuery("select name from test limit 10");
    if (!rs.next())
    {
        out.println("암것도 없다");
    }
    else
    {
        while(rs.next())
        {
            out.println(rs.getString(1));
        }
    }
    stmt.close();
    Conn.close();
%>

=========================================================================================

톰캣에 대하여 

각각의 폴더의 구조와 설정법 사용법
구조와 실행순서등을 알아야 한다.
for문 if문등의 조건문 활용연습


Database Connection Pooling
클라이언트의 요청이 없더라도 여분의 "접속"을 미리 여러 개 확보하여 pool에 모아놓고, 요청이 새로 들어오면 이미 생성된 커넥션 객체를 배분하여 작업이 끝난 후 커넥션 객체를 해체하는 것이 아니라 다시 Pool로 돌려보냄.

구조
WAS 안에 dachboard의 XML
WAS의 XML, 그리고 JSP가 있고
Dashboard화면이 함께 WAS에 있음.
XML의 수정으로 쉽게 쓰기 위해 WAS의 DBCP를 씀.


DASHBOARD에 최적화된 해상도 (기억안남)  1270 X 1024  ??