MVC_Board - src/main/java - svc - BoardWriteProService.java

모쿠모쿠·2022년 9월 27일

JSP

목록 보기
147/151
package svc;

import java.sql.Connection;

import dao.BoardDAO;
import db.JdbcUtil;
import vo.BoardDTO;

// Action 클래스로부터 요청(지시)을 받아 DAO 클래스와 상호작용을 통해
// 실제 비즈니스 로직(DB 작업)을 지시하는 클래스
// => 주로, Connection 객체 관리, DAO 객체 관리, DAO 객체의 각 메서드 호출,
//    작업 수행 후 결과에 대한 판별을 통해 데이터베이스 트랜잭션 관리 등을 수행
public class BoardWriteProService {
	
    // 글쓰기 작업 요청을 위한 registBoard() 메서드 정의
    // => 파라미터 : BoardDTO 객체 		리턴타입 : boolean(isWriteSuccess)
    public boolean registBoard(BoardDTO board) {
//		System.out.println("BoardWriteProService - registBoard()");

		// 1. 글쓰기 작업 요청 처리 결과를 판별하여 리턴하기 위한 boolean 타입 변수 선언
        boolean isWriteSuccess = false;
        
        // 2. JdbcUtil 클래스로부터 Connection Pool 에 저장된 Connection 객체 가져오기 - 공통
        // => Service 클래스에서 트랜잭션 관리를 위해 Connection 객체에 접근해야하기 때문에 
        Connection con = JdbcUtil.getConnection();
        
        // 3. BoardDAO 클래스로부터 BoardDAO 인스턴스 가져오기 - 공통
        // => 싱글톤 디자인 패턴으로 생성된 BoardDAO 인스턴스 가져오기
//		BoardDAO dao = new BoardDAO(); // 생성자가 private 이므로 접근 불가
		BaordDAO dao = BoardDAO.getInstance();
        
        // 4. BoardDAO 인스턴스에 Connection 객체 전달하기 - 공통
        dao.setConnection(con);
        
        // 5. BoardDAO 인스턴스의 XXX 메서드 호출하여 요청받은 XXX 작업 수행 및 결과 리턴받기
       // BoardDAO 객체의 insertBoard() 메서드를 호출하여 글쓰기 작업 수행 후 결과 리턴받기
       // => 파라미터 : BoardDTO 객체(board) 	  리턴타입 : int(insertCount)
       int insertCount = dao.insertBoard(board);
       
       // 6. 리턴받은 작업 수행 결과를 통해 판별 후 트랜잭션 처리 작업 수행
       if(insertCount > 0) { // 작업 성공 시
       		// 트랜잭션 적용을 위해 JdbcUtil 클래스의 commit() 메서드를 호출하여 commit 작업 수행
            JdbcUtil.commit(con);
            
            // 작업 처리 결과를 성공으로 표시하기 위해 isWriteSuccess 를 true 로 변경
            isWriteSuccess = true;
       } else { // 작업 실패 시
       		// 트랜잭션 취소를 위해 JdbcUtil 클래스의 rollback() 메서드를 호출하여 rollback 작업 수행
            JdbcUtil.rollback(con);
       }
       
       // 7. Connection 객체 반환 - 공통
       JdbcUtil.close(con);
       
       // 8. 작업 수행 결과 리턴
       return isWriteSuccesss;
    }
}

package svc;

import java.sql.Connection;

import dao.BoardDAO;
import db.JdbcUtil;
import vo.BoardDTO;

// Action 클래스로부터 요청(지시)을 받아 DAO 클래스와 상호작용을 통해
// 실제 비즈니스 로직(DB 작업)을 지시하는 클래스
// => 주로, Connection 객체 관리, DAO 객체 관리, DAO 객체의 각 메서드 호출,
// 작업 수행 후 결과에 대한 판별을 통해 데이터베이스 트랜잭션 관리 등을 수행
public class BoardWriteProService {

// 글쓰기 작업 요청을 위한 registBoard() 메서드 정의
// => 파라미터 : BoardDTO 객체   리턴타입 : boolean(isWriteSuccess)
public boolean registBoard(BoardDTO board) {

// System.out.println("BoardWriteProService - registBoard()");

	// 1. 글쓰기 작업 요청 처리 결과를 판별하여 리턴하기 위한 boolean 타입 변수 선언
	boolean isWriteSuccess = false;
	
	// 2. JdbcUtil 클래스로부터 Connection Pool 에 저장된 Connection 객체 가져오기 - 공통
	// => Service 클래스에서 트랜잭션 관리를 위해 Connection 객체에 접근해야하기 때문에
	Connection con = JdbcUtil.getConnection();
	
	// 3. BoardDAO 클래스로부터 BoardDAO 인스턴스 가져오기 - 공통
	// => 싱글톤 디자인 패턴으로 생성된 BoardDAO 인스턴스 가져오기

// BoardDAO dao = new BoardDAO(); // 생성자가 private 이므로 접근 불가
BoardDAO dao = BoardDAO.getInstance();

	// 4. BoardDAO 인스턴스에 Connection 객체 전달하기 - 공통
	dao.setConnection(con);
	
	// 5. BoardDAO 인스턴스의 XXX 메서드 호출하여 요청받은 XXX 작업 수행 및 결과 리턴받기
	// BoardDAO 객체의 insertBoard() 메서드를 호출하여 글쓰기 작업 수행 후 결과 리턴받기
	// => 파라미터 : BoardDTO 객체(board)   리턴타입 : int(insertCount)
	int insertCount = dao.insertBoard(board);
	
	// 6. 리턴받은 작업 수행 결과를 통해 판별 후 트랜잭션 처리 작업 수행
	if(insertCount > 0) { // 작업 성공 시
		// 트랜잭션 적용을 위해 JdbcUtil 클래스의 commit() 메서드를 호출하여 commit 작업 수행
		JdbcUtil.commit(con);
		
		// 작업 처리 결과를 성공으로 표시하기 위해 isWriteSuccess 를 true 로 변경
		isWriteSuccess = true;
	} else { // 작업 실패 시
		// 트랜잭션 취소를 위해 JdbcUtil 클래스의 rollback() 메서드를 호출하여 rollback 작업 수행
		JdbcUtil.rollback(con);
	}
	
	// 7. Connection 객체 반환 - 공통
	JdbcUtil.close(con);
	
	// 8. 작업 수행 결과 리턴
	return isWriteSuccess;
}

}

profile
Hello, Velog!

0개의 댓글