- [스트럿츠1.3] JNDI설정을 통한 DB접속 목차
회사에 내준 교육자료가 스트럿츠1을 기반으로 한 개발이였다. 선조들이 쓰던 스트럿츠를 일본에서는 아직 주류로 하고 있는것같아 조금 놀랐다. 몇년전에 학원에서 잠깐 맛보기로 한적이 있어서 작동개념에 대해서는 대충 아는데, DB접속을 스트럿츠에서는 당최 어떻게 하는지 몰라서 구글링 해서 겨우 찾았다.
getsource가 사라진 스트럿츠1.3
구글링해서 찾아보면 대부분 action클래스에서 부모클래스의 메소드인 getSource메소드를 호출하여 커넥션을 가져왔다. 그러나 1.3부터는 getSource메소드가 사라졌다. 처음에 나는 그것도 모르고 열심히 찾았다. 왜 없는걸까 하고 api도 뒤졌지만 찾을수 없었다. (삽질). 없어진 이유는 요즘 워낙 서버에서 db풀기능을 잘 지원해서 따로 지원할 이유가 없어졌다고 그런다고..;; 암튼..
JNDI설정을 통한 DB 접속
그래서 대체한 방법으로 JNDI 설정을 통해서 DB커넥션을 가져오는것이였다.
서버가 아파치톰켓이라는 가정하에 다음과 같은 설정이 필요하다.
1. server.xml 설정
server.xml에 GlobalNamingResources부분에 다음과 같이 추가한다. (적당히 수정할건 수정하고)
<Resource name="jdbc⁄my" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql:⁄⁄localhost:3306⁄netwrk?autoReconnect=true" username="root" password="1234" maxActive="100" maxIdle="30" maxWait="10000" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" ⁄>
마찬가지로 <Host>사이에 다음과 같이 추가한다.
<Context path="" docBase="codingTest-struts" source="org.eclipse.jst.jee.server:codingTest-struts" debug="0" privileged="true" crossContext="true"> <Resource name="jdbc⁄my" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql:⁄⁄localhost:3306⁄netwrk?autoReconnect=true" username="root" password="1234" maxActive="100" maxIdle="30" maxWait="10000" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"⁄> <⁄Context>
2. web.xml에 다음과 같이 추가한다.
<resource-ref> <description>Mysql Datasource<⁄description> <res-ref-name>jdbc⁄my<⁄res-ref-name> <res-type>javax.sql.DataSource<⁄res-type> <res-auth>Container<⁄res-auth> <⁄resource-ref>
3. 라이브러리추가
mysql-connector-java-5.0.8-bin.jar
commons-dbcp-1.4.jar
commons-pool2-2.1.jar
commons-collections4-4.0.jar
4. 커넥션 가져오기.
String sql = createSelectSql(loginForm.getUserNo(), loginForm.getPassword()); Connection con = null; PreparedStatement pstmt = null; try{ Context initContext = new InitialContext(); Context envContext = (Context) initContext.lookup("java:⁄comp⁄env"); DataSource ds = (DataSource) envContext.lookup("jdbc⁄my"); con = ds.getConnection(); pstmt = con.prepareStatement(sql); ResultSet rs = pstmt.executeQuery() ; if(rs.next()){ session.setAttribute("userNo", loginForm.getUserNo()); session.setAttribute("password", loginForm.getPassword()); SesUtils sesUser = new SesUtils(); sesUser.setUserNo(rs.getString("USERNO")); sesUser.setPass(rs.getString("PASS")); sesUser.setUserName(rs.getString("USERNAME")); sesUser.setAuthority(rs.getString("AUTHORITY")); sesUser.setDelFlg(rs.getString("DELFLG")); sesUser.setUserNo(session.getId()); af = mapping.findForward("menu"); } }catch(Exception e){ af = mapping.findForward("errorForm"); }finally{ try {pstmt.close();} catch (SQLException e) {} try {con.close();} catch (SQLException e) {} }
대략적으로 적었기 때문에 좀 설명이 부족할 수 있으나 이런식으로 하더라라는 마음으로 포스팅 했다. 그런데 스트러츠에서 db접속은 이렇게 직접적으로 하는것보다 ibatis와 같이 따로 프레임워크를 써서 해야한다고 한다. 스트럿츠는 그냥 단순히 mvc패턴의 프레임워크일 뿐(?)이기 때문에 스프링과 같이 db에 관련한 설정은 할 수 없다고 한다.
'FW > struts1.3' 카테고리의 다른 글
struts1.3에서 커넥션풀을 이용한 db접속 (0) | 2014.04.06 |
---|