Controller.java

download

/*
 * $Id:$
 */

package dcieslak;

import java.util.*;
import java.io.*;
import javax.transaction.*;
import javax.naming.*;
import javax.servlet.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import javax.sql.*;
import javax.transaction.UserTransaction;
import org.apache.log4j.*;

/**
 * Klasa bazowa dla kontrolerów
 */
abstract class Controller extends HttpServlet {

    protected Connection _conn;
    protected Logger _logger;

    public void init()
    throws ServletException {

        BasicConfigurator.configure();
        _logger = Logger.getLogger(getClass().getName());

        ServletContext context = getServletContext();
        try {
            InitialContext initial = new InitialContext();
            DataSource ds = (DataSource) initial.lookup(
                "java:comp/env/jdbc/java2db");
            _conn =  ds.getConnection();
            if(_conn == null)
                throw new ServletException("empty conn");
        }
        catch(Exception exc) {
            _logger.error("błąd inicjalizacji", exc);
            throw new ServletException(exc);
        }
    }

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

        req.setCharacterEncoding("iso-8859-2");
        UserTransaction userTransaction;
        try {
            InitialContext initial = new InitialContext();
            userTransaction = (UserTransaction)
                initial.lookup("java:comp/UserTransaction");
        }
        catch(Exception exc) {
            _logger.error("błąd doGet()");
            throw new ServletException(exc);
        }

        try {
            userTransaction.begin();
            if (req.getParameter("zapisz:method") != null) {
                zapisz(req);
            }
            else if (req.getParameter("usun:method") != null) {
                usun(req);
            }
            else if (req.getParameter("dodaj:method") != null) {
                dodaj(req);
            }
            pokaz(req);
            userTransaction.commit();
        }
        catch(Exception exc) {
            try {
                userTransaction.rollback();
            }
            catch(SystemException exc2) {
                throw new ServletException(exc);
            }

            throw new ServletException(exc);
        }

        ServletContext context = getServletContext();
        String[] arr = getClass().getName().split("\\.");
        RequestDispatcher disp = context.getRequestDispatcher(
            "/" + arr[1] + ".jsp");
        disp.forward(req, res);
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
        doGet(req, res);
    }

    public void pokaz(HttpServletRequest req)
    throws Exception {
        throw new ServletException("pokaz() should be redefined");
    }

    public void zapisz(HttpServletRequest req)
    throws Exception {
        throw new ServletException("zapisz() should be redefined");
    }

    public void dodaj(HttpServletRequest req)
    throws Exception {
        throw new ServletException("dodaj() should be redefined");
    }

    public void usun(HttpServletRequest req)
    throws Exception {
        throw new ServletException("usun() should be redefined");
    }

}

(...) Nie ma bowiem łatwych odpowiedzi. Nie istnieje nic takiego jak najlepsze rozwiązanie - zarówno jeśli chodzi o narzędzia, jak i języki czy systemy operacyjne. Są jedynie systemy, które mogą być bardziej odpowiednie w konkretnych okolicznościach.

I tu właśnie do gry wchodzi pragmatyzm. Nie należy przywiązywać się do żadnej określonej metody, ale mieć na tyle rozległą wiedzę i doświadczenie, by w danej sytuacji wybrać dobre rozwiązanie. (...)

Andrew Hunt, David Thomas "Pragmatyczny Programista"