음.. 새로운 프로젝트가 시작되었다.
환경설정을 해야 한다. 테스트 디비는 만들었고..
이제 이클립스와 오라클을 연동해야 한다.
그런데..기존에 해왔던 방식과는 다르게 연동을 하고 있었다.
톰캣 server.xml안에서 DB연동을 하더라.. 찾아봐야겠다.
DB연동안하고 프로젝트만 실행시켰을 때
javax.naming.NameNotFoundException: Name -- is not bound in this Context
이런 에러가 났다. ->DB설정문제인것같다
Tomcat / server.xml - Oracle Connection pool 설정
http://bluexmas.tistory.com/286
Oracle Connection Pool
<Resource auth="Container"
driverClassName="oracle.jdbc.driver.OracleDriver"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
maxActive="100"
maxIdle="30"
maxWait="10000"
name="jdbc/testDS"
password="tiger"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@loclahost:1521:orcl"
username="scott"/>
Context 경로 추가
<Context docBase="C:/workspace/images" path="images" reloadable="true"/>
URIEncoding
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
출처: http://bluexmas.tistory.com/tag/tomcat [파란크리스마스]
톰캣(Tomcat) 커넥션풀(DBCP) 설정
http://gangzzang.tistory.com/entry/%ED%86%B0%EC%BA%A3Tomcat-%EC%BB%A4%EB%84%A5%EC%85%98%ED%92%80DBCP-%EC%84%A4%EC%A0%95
여기 뭔가 자세히 적혀있긴한데.. 이걸 따라하면되는건가..
Oracle 데이터베이스 스키마와 함께 사용할 Apache Tomcat 구성
http://www.ibm.com/support/knowledgecenter/ko/SSPJLC_7.5.0/com.ibm.si.mpl.doc_7.5.0/install/t_configuring_apache_tomcat_for_oracle_manually.html
프로시저
- Oracle JDBC 드라이버 JAR 파일을 tomcat_home/lib 디렉토리에 추가하십시오.
- tomcat_home/conf/context.xml 파일을 다음과 같이 업데이트하십시오.
<Context>
...
<Resource name="jdbc/WorklightDS"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@oserver:1521/ORCL"
username="WORKLIGHT"
password="WORKLIGHT_password"/>
<Resource name="jdbc/WorklightReportsDS"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@oserver:1521/ORCL"
username="WORKLIGHTREPORTS"
password="WORKLIGHTREPORTS_password"/>
<Resource name="jdbc/AppCenterDS"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@oserver:1521/ORCL"
username="APPSCHM"
password="APPSCHM_password"/>
...
</Context>
여기서 oserver는 Oracle 서버의 호스트 이름입니다.
톰켓 DB connection 관련 Server.xml/web.xml 설정
http://holiclove.tistory.com/entry/%ED%86%B0%EC%BC%93-DB-connection-%EA%B4%80%EB%A0%A8-Serverxmlwebxml-%EC%84%A4%EC%A0%95
// tomcat - server.xml파일에 DB Connection생성을 위한 설정(<Host>태그 내부에 추가함)
<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.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:Microsoft:sqlserver://localhost:3306/javatest?autoReconnect=true"/>
</Context>
//내용설명
Context - path : URL 호출시 사용될 이름
- docBase : 실제 웹 어플리케이션이 위치한 폴더명
- debug : 로그 작성 레벨
- reloadable : 톰캣서버의 재시작 없이 수정된 내용을 불러오기 위한 옵션
- crossContext : myapp이외의 Context에서도 사용 가능하도록 하는 옵션
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가 위치한 서버명, 포트명, 사용할 데이타베이스명을 지정
// tomcat - web.xml파일에 DB Connection생성을 위한 설정
<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를 관리할 주체로 톰캣컨테이너를 지정함
- jsp 페이지에서 호출방법
Context ic = new InitialContext();
DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/TestDB");
con = ds.getConnection();
* mysql 의 경우 context 가 다르면, 각각 설정을 따로 하셔야 합니다.
* data source 의 접근 방식은 다음과 같이 할 수도 있습니다.
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB");
* tomcat 에서 JNDI 관련 에러메시지별 대처 방법
- Cannot load JDBC driver class 'com.mysql.jdbc.Driver', cause: com.mysql.jdbc.Driver 또는
Null Pointer Exception '', cause: No suitable driver
==> 해당 jdbc 드라이버(위의경우 mysql 드라이버) 가 없기 때문입니다.
해당 드라이버 파일을 $CATALINA_HOME/common/lib 디렉토리로 복사합니다.
- Name xxxx is not bound in this Context
==> server.xml 과 web.xml 에서 해당 JNID가 설정되지 않은 경우입니다.
server.xml 과 web.xml 에 JNDI resource 를 설정하고 이름을 동일하게 설정하도록 합니다
나는 톰캣5.5를 사용하고있고
기존 프로젝트를 보니까 +
http://javafactory.tistory.com/entry/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4-tomcat-Connection-pool-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95%ED%86%B0%EC%BA%A3-Connection-pool-%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%97%B0%EB%8F%99
commons-collections-3.1.jar ★
commons-dbcp-1.2.1.jar ★
commons-dbutils-1.0.jar
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
commons-logging-1.0.4.jar
commons-net-1.4.1.jar
commons-pool-1.2.jar ★
ojdbc5.jar ★
이 파일 4개는 꼭 있어야 하는 것 같다.
webcontent->>WEB-INF >> lib 여기에 추가
이클립스에서 톰캣연동한 후에 DB연결 작업을 했었는데.
기존 서버에 있던 환경을 그대로 따라 해야 할지..로컬에서만 돌리게 해야할지.. 고민하다가.. (사실 잘 안됐다.)
server.xml에 있는 설정은 그대로 두고
<Context ~~~ /> 있는 부분은 주석 처리하고
<Context docBase="~~~" path="" reloadable="true" source="org.eclipse.jst.j2ee.server:~~"> <- 원래 있던 부분 사이에 DB연결 코드 넣음
<Resource name="jdbc/TESTDB" <- web.xml에 <res-ref-name>jdbc/TESTDB</res-ref-name>여기와 같아야 한다.
auth="Container"
driverClassName="oracle.jdbc.driver.OracleDriver"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@DB가 있는 서버 주소:1521:TESTDB"
username="ID"
password="PW"
maxActive="20"
maxldle="10"
maxWait="-1"/>
</Context>