@picklesdog70 escreveu:
Tenho a seguinte estrutura:
- Uma única servlet
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
process(req, resp);
}@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { process(req, resp); } private void process(HttpServletRequest req, HttpServletResponse res) throws ServletException{ String path = req.getServletPath(); path = path.substring(1, path.indexOf(".")); String actionClass = actions.getProperty(path); if(actionClass == null){ throw new ServletException("Url não encontrada. Verifique o endereço digitado"); } try{ Action action = (Action) Class.forName(actionClass).newInstance(); action.setRequest(req); action.setResponse(res); action.runAction(); } catch (Exception e) { throw new ServletException(e); } }
- Uma Action Abstrata
public abstract class Action {
private HttpServletRequest request; private HttpServletResponse response; public abstract void process() throws Exception; public void runAction() throws Exception{ Connection connection = DbConnectionFactory.getInstance(); try{ process(); connection.commit(); }catch (Exception e) { connection.rollback(); throw new ActionException(e); }finally { connection.close(); } }
- Actions que extendem a Action abstrata e implementam o método process();
public class TripSaveAction extends Action {
@Override
public void process() throws Exception {
Trip trip = new Trip();TripService tripService = new TripService(); tripService.save(trip); redirect("index.html"); }
}
- Service pode chamar um DAO
public class TripService extends Service {
@Override public Trip save(Trip trip) throws Exception{ try{ TripDao tripDao = new TripDao(); return tripDao.save(trip); }catch (Exception e) { throw new ServiceException(e.getMessage()); } }
- Por fim, DAOs
public class TripDao extends Dao {
@Override public Trip save(Trip trip) throws Exception{ try{ PreparedStatement stmt = DbConnectionFactory.getInstance().prepareStatement("INSERT INTO
Estou com dúvida em como usar a conexão/transação que é aberta na Action Abstrata no meu DAO...... para que ao final seja feito o commit() ou rollback() em caso de erro......do jeito que esta agora...... o DAO pega outra conexão no pool.......
Mensagens: 11
Participantes: 2