http://www.trap17.com/index.php/J2ee-Technologies-Integrate-Servlet-Jndi-Jdbc_t7782.html 웹문서를 아주 많이 참고했습니다^^
(거의 의역 수준입니다.. OTL)
여기에 나오는 소스들 모두가 위의 웹문서에서 가져왔습니다^^

html과 php 문서 속성상 소스에서의 <>괄호는 []괄호로 대처합니다..

저번의 pointbase 사용하기 이후로 계속되는 삽질들 입니다..

1. 먼저, pointbase server를 실행합니다.
- 저번에 설명했으므로 부가적인 설명은 하지 않습니다^^
- 잘 모르시는 분은... 초보자의 J2EE 1.4 에서 제공되는 RDBM인 pointbase의 사용하기를 봐주세요^^;;

2. 아무 폴더에서 MyTestDB라는 폴더를 만듭니다.
- 그리고 아래의 파일들을 에디터 등으로 작성하여 MyTestDB에 넣습니다.
build.xml
[?xml version="1.0" ?]
[!-- A minimal build.xml to populate a PointBase database.
This is derived from the build.xml in the J2EE Tutorial.
--]
[project name = "studentDB" default="create-db_common" basedir="."]
[property file="build.properties"/]
[path id="db.classpath"]
[fileset dir="${db.root}/lib"]
[include name="*.jar"/]
[/fileset]
[/path]
[target name="create-db_common" depends="init"
description="Create database tables and populate database." ]
[java classname="com.pointbase.tools.toolsCommander" fork="yes" ]
[jvmarg line="${db.jvmargs}" /]
[arg line="${db.driver} ${db.url} ${sql.script} ${db.user} ${db.pwd}" /]
[classpath refid="db.classpath" /]
[/java]
[/target]
[target name="init"]
[tstamp/]
[/target]
[/project]

build.properties
j2ee.home=D:/Sun/AppServer
sunone.home=${j2ee.home}
domain.resources="domain.resources"
domain.resources.port=8080
db.root=${j2ee.home}/pointbase
db.driver=com.pointbase.jdbc.jdbcUniversalDriver
db.host=localhost
db.port=9092
db.sid=sun-appserv-samples
db.url=jdbc:pointbase:server://${db.host}:${db.port}/${db.sid}
db.user=pbpublic
db.pwd=pbpublic
url.prop=DatabaseName
ds.class=com.pointbase.jdbc.jdbcDataSource
db.jvmargs=-ms16m -mx32m
sql.script=student.sql

- j2ee.home은 각자 J2EE를 설치한 드라이브와 폴더로 변경해주시면 됩니다.

student.sql
CREATE TABLE student
(name VARCHAR(10), qpa VARCHAR(6));

DELETE FROM student;

INSERT INTO student VALUES('Sue', '4.0');
INSERT INTO student VALUES('Billy','3.4');

- 이 파일은 pointbase를 이용하여 테이블의 스키마를 만들고, 튜플을 넣는 SQL문입니다.

3. 자~ 데이터베이스에 위의 SQL문을 실행해봅니다.
- 먼저 도스 콘솔창에 가서, asant.bat라고 실행해보고 실행 파일이 없다는 오류가 나면 J2EE의 환경설정을 제대로 해주셔야합니다.
- 환경설정은 초보자의 간단한 EJB 프로그램 만들기를 참고하세요^^
- 그럼, 이제 조금전에 만들었던 MyTestDB 폴더로 이동하여, asant.bat라고 실행합니다.

- 위와 같이 나오면 성공한겁니다.
이게 머지? 라고 물으신다면.. 저도 자세히는 모릅니다.. (허허;; 먼산)
- 간단히 설명하자면, build.properties에서 pointbase에 접속하기 위한 환경설정을 하고, 그것에 따라 build.xml에서 pointbase에 접속합니다. 그리고 build.properties의 마지막에 지정된 db.script인 student.sql을 pointbase에서 실행하는게 아닐까하는 초보자의 추측입니다.(추측일 따름입니다. 좀더 공부해야겠네요;;)

4. 데이터베이스에서 SQL문이 제대로 실행되었는가 확인해봅시다.
- 저번에 실행했던 startconsole을 실행합니다.
역시나 잘 모르시는 분은... 초보자의 J2EE 1.4 에서 제공되는 RDBM인 pointbase의 사용하기를 먼저 봐주세요^^

- 여기서 중요한 것은 처음 connect할 때의 URL이 저번과는 다르다는 것입니다.
jdbc:pointbase:server://localhost/sun-appserv-samples 이렇게 설정해주고 OK를 선택해야합니다.
- 이것때문에 삽질 좀 했습니다. 영문 문서를 보고도 멍청하게 딴 곳에서 student Table이 없다고 궁시렁거리고 있었으니까요^^;;

- 자 위의 그림처럼 왼쪽 트리의 SCHEMAS > PBPUBLIC > TABLES에서 STUDENT가 있는 것이 확인된다면 성공한 겁니다. 그런 다음 튜플이 제대로 들어갔는지, 확인합니다.

- select문을 사용해서 우리가 student.SQL에서 넣은 값과 같은지 확인하고, 같이 나오면 성공한 겁니다^^

5. 다음은 웹 어플리케이션 (WAR)에서의 DB 테스트할 준비합니다.
- start default server를 실행합니다. 역시 잘 모르시는 분들은 초보자의 간단한 EJB 프로그램 만들기를 참고하세요^^
- admin console을 실행합니다.

- 아래와 같이 로그인화면에서 User Name은 admin, Password는 J2EE 설치시에 넣었던 그 Password를 넣습니다.

- JDBC에 pointbase를 연결하기 위해 아래의 메뉴를 선택합니다.
Resources > JDBC > JDBC Resources 그리고 오른쪽 프레임에서 New 버튼을 선택합니다.

- JNDI name에는 jdbc/PBPUBLIC(아마도 DB 계정인듯합니다. 추측.. ㅡㅡ)를 입력하고, Pool Name에는 PointBasePool을 선택합니다.

- 그리고 OK~

6. 다음은 웹 어플리케이션 (WAR)을 만듭니다.
- 아래의 소스를 MyTestDB 폴더에 넣습니다.
ReadStudentDB.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import java.util.*;

public class ReadStudentDB extends HttpServlet {

public void doGet(HttpServletRequest req,
HttpServletResponse response)
throws ServletException,
IOException {

Connection con = null;

try {

InitialContext ic = new InitialContext();
Context envCtx = (Context) ic.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/StudentDB");
con = ds.getConnection();

response.setContentType("text/html");
PrintWriter out = response.getWriter();

String resultString = "";
String selectStatement = "select * " + "from student";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
ResultSet rs = prepStmt.executeQuery();
resultString += "[html][body]";

while (rs.next()) {
resultString += rs.getString(1)+"[p]";
resultString += rs.getString(2)+"[p]";
}
resultString += "[/body][/html]";

prepStmt.close();
out.println(resultString);
}
catch (SQLException ex) {
System.out.println("SQL EX " + ex.getMessage());
}
catch(Exception ex) {
System.out.println(" A Wierd Exception " + ex);
}

finally {
try {
if(con != null) con.close();
}
catch(SQLException e){
System.out.println("Problem closing");
}
}
}
}

- java파일을 컴파일하고 deploytool을 실행합니다.
- New > Web application을 선택합니다.

- 위의 그림처럼 WarfileMyDBReader.war로, War Display NameMyDBReader로 설정하고, Context Root은 /GetStudents로 설정한 다음 아래의 Edit Content를 선택합니다.
- 아래처럼 ReadStudentDB.java 파일을 Add합니다.

- 그 후의 설정은 그림과 같이 합니다..(귀차니즘의 압박;;)


- Finish를 하고 나면, 메인 화면에 Files > Web WARs > MyDBReader > ReadStudentDB가 생성된 것을 볼 수 있습니다.
ReadStudentDB를 선택하고 오른쪽 프레임에서 Aliases탭을 선택한 후 아래 그림처럼 Add한 후 /CoolServlet를 입력하고 반드시 엔터를 칩니다.

- 왼쪽 프레임의 트리에서 MyDBReader를 선택한 후 Resource Ref's탭에서 Add를 합니다. 그러면 창에 새로운 ROW가 생기는데, 거기서 Coded Namejdbc/StudentDB을 삽입합니다.
그리고 왼쪽 프레임의 트리에서 localhost:4848을 선택하면 Connect 다이얼로그화면이 나올 것입니다. OK하고 다시 MyDBReader를 선택하여 밑의 프레임에서 JNDI Name에는 jdbc/PBPUBLIC를 선택하고, User Name에는 pbpublic, Password에도 역시 pbpublic을 넣습니다.

- 그리고 Tools 메뉴에서 Deploy를 합니다. 아래와 같이 나오면 Deploy성공한것이죠^^

- 그리고 왼쪽 프레임의 트리에서 localhost:4848을 선택하여 아래처럼 오른쪽 프레임에 Application으로 MyDBReaderrunning으로 뜨면 성공한 것입니다^^


7. 마지막으로 확인하기

- 위의 그림처럼 주소창에 http://localhost:8080/GetStudents/CoolServlet 이라고 입력하고 그 결과값이 SQL문의 insert 값과 동일하면 제대로 연동이된 것입니다.

p.s 이거 쓰느라 하루를 허비했네요 ㅡㅡ;
수업다녀오고, 리포트 짬내서 쓰고, 삽질 좀 하고... 휴~~~

중요한 점을 정리하겠습니다. 순서가 중요합니다. 무조건 start pointbase를 실행하고 그 다음에 start default server를 실행해야합니다. 그리고 Resource Ref's탭에서 jdbc/StudentDBAdd할 때, jdbc/StudentDB는 ReadStudentDB.java 소스중 DataSource ds = (DataSource) envCtx.lookup("jdbc/StudentDB");의 jdbc/StudentDB와 일치해야합니다.
Posted by xHuro
,