Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    3

    Servlet che non salva su db...

    ciao ragazzi, sono nuovo del forum. vi scrivo per un problema con la mia piccola applicazione web tomcat/mysql..

    praticamente è un gestionale per il gioco del fantacalcio. c'è una serie di servlet che generano risposte utilizzate dallo strato di view, implementato in adobe flex.

    il mio problema sorge durante l'invio delle formazioni. una volta ogni 100, viene inviata la risposta di formazione salvata correttamente ma sul db non c'è traccia del salvataggio.. e neppure nel log c'è traccia di errori.
    ho pensato ad una risposta vecchia cachata a causa di quella nuova che arriva troppo tardi.. questo perché la macchina su cui faccio girare l'applicazione è DECISAMENTE vecchiotta (pentium III con 128mb di ram )

    comunque vi posto la parte di codice interessata, magari potete darmi una mano a gestire meglio l'errore visto che così fa un po' pena (è 1 app che ho creato 2 anni fa x esercitarmi con java/hibernate/mysql)

    codice:
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       status = OK;
       Session hibernateSession = HibernateUtil.currentSession();
       hibernateSession.beginTransaction();
       Principal p = request.getUserPrincipal();
       if (p != null) {
          // ... serie di controlli sulla formazione inviata...
       } else {
          status = ERROR;
          errorMessage = "Non sei abilitato ad eseguire questa operazione";
       }
       try {
          Document doc = XmlResponseFactory.getInstance().newXml();
          buildXml(doc, request, hibernateSession, rf);
          String xmlString = XmlResponseFactory.getInstance().xmlToString(doc);
          response.setContentType("text/xml;charset=ISO-8859-1");
          response.getOutputStream().println(xmlString);
          response.getOutputStream().flush();
          response.getOutputStream().close();
       } catch(Exception e) {
          e.printStackTrace();
       }
       hibernateSession.getTransaction().commit();
    }
    
    private void buildXml(Document doc, HttpServletRequest request, Session hibernateSession, RegistroFormazioni rf) {
       Element root = doc.createElement("response");
       doc.appendChild(root);
       Element st = doc.createElement("status");
       if (status == OK) {
          st.setAttribute("Status", Integer.toString(OK));
          st.setAttribute("Message", "Formazione modificata correttamente");
          rf.setSuccesso(true);
       } else if (status == ERROR) {
          st.setAttribute("Status", Integer.toString(ERROR));
          st.setAttribute("Message", errorMessage);
          rf.setSuccesso(false);
          rf.setErrore(errorMessage);
       }
       root.appendChild(st);
    }

    grazie anticipatamente a chiunque risponderà!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Ho sistemato il tuo codice che veniva scritto tutto su una riga.
    In futuro, se devi postare più di una riga di codice, NON usare il tasto CODE, ma usa i tag CODE, ovvero scrivi a mano i tago di apertura e chiusura ed incolla all'interno il codice.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    3
    grazie!!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Domanda: io nel codice che hai postato non vedo nessuna scrittura sul DB... dov'è che dovrebbe essere?

    Io vedo che crei da zero un oggetto Document (quindi, credo un documento XML), che ci aggiungi un figlio e... basta. Da nessuna parte rendi persistente questo nuovo documento.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    3
    si scusami... in effetti tutta quella parte lì l'ho volutamente omessa perché pensavo non potesse essere utile.

    comunque faccio una serie di controlli che, se danno esito positivo, permettono di salvare correttamente il PO Formazione con i relativi metodi forniti da Hibernate.

    guarda per completezza comunque ti incollo tutta la classe:

    codice:
    package com.fantacalcio.servlet;
    
    import java.io.IOException;
    import java.lang.reflect.InvocationTargetException;
    import java.security.Principal;
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    import java.util.Iterator;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.hibernate.Criteria;
    import org.hibernate.Session;
    import org.hibernate.criterion.Projections;
    import org.hibernate.criterion.Restrictions;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    
    import com.fantacalcio.po.*;
    import com.fantacalcio.util.FusoOrario;
    import com.fantacalcio.util.HibernateUtil;
    import com.fantacalcio.util.XmlResponseFactory;
    
    /**
     * Servlet implementation class FormazioneServlet
     */
    public class FormazioneServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	private final int titolari = 11, riserve = 7;
    
    	private final int ERROR = 0, OK = 1;
    
    	private int status;
    	private String errorMessage = "";
    
    	/**
    	 * @see HttpServlet#HttpServlet()
    	 */
    	public FormazioneServlet() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    		status = OK;
    
    		Session hibernateSession = HibernateUtil.currentSession();
    		hibernateSession.beginTransaction();
    
    		Criteria criteria = hibernateSession.createCriteria(Ruolo.class);
    		List<Ruolo> listaRuoli = criteria.list();
    		String[] ruoli = new String[listaRuoli.size()];
    		Iterator<Ruolo> itRuoli = listaRuoli.iterator();
    		int cont = 0;
    		while (itRuoli.hasNext()) {
    			ruoli[cont] = itRuoli.next().getNome();
    			cont++;
    		}
    
    		final String P = ruoli[0], D = ruoli[1], C = ruoli[2], A = ruoli[3];
    
    		int tot = titolari+riserve;
    
    		Formazione formazione = null;
    		RegistroFormazioni rf = null;
    
    		Principal p = request.getUserPrincipal();
    		if (p != null) {
    
    			Fantasquadra fantasquadra = null;
    			try {
    				fantasquadra = (Fantasquadra)p.getClass().getMethod("getFantasquadra", null).invoke(p, null);
    			} catch (IllegalArgumentException e1) {
    				e1.printStackTrace();
    			} catch (SecurityException e1) {
    				e1.printStackTrace();
    			} catch (IllegalAccessException e1) {
    				e1.printStackTrace();
    			} catch (InvocationTargetException e1) {
    				e1.printStackTrace();
    			} catch (NoSuchMethodException e1) {
    				e1.printStackTrace();
    			}
    
    			criteria = hibernateSession.createCriteria(Giornata.class);
    			criteria.setProjection(Projections.max("id"));
    			int idGiornata = (Integer)criteria.uniqueResult();
    			criteria = hibernateSession.createCriteria(Giornata.class);
    			criteria.add(Restrictions.eq("id", idGiornata));		
    			Giornata ultimaGiornata = (Giornata)criteria.uniqueResult();
    
    			criteria = hibernateSession.createCriteria(Formazione.class);
    			criteria.add(Restrictions.eq("fantasquadra", fantasquadra));
    			criteria.add(Restrictions.eq("giornata", ultimaGiornata));
    			formazione = (Formazione)criteria.uniqueResult();
    
    			criteria = hibernateSession.createCriteria(Risultato.class);
    			criteria.add(Restrictions.eq("formazione", formazione));
    
    			GregorianCalendar ora = FusoOrario.trasformaData(new GregorianCalendar());
    
    			rf = new RegistroFormazioni();
    			rf.setFantasquadra(fantasquadra);
    			rf.setGiornata(ultimaGiornata);
    			rf.setData(ora);
    			hibernateSession.save(rf);
    
    			if (criteria.uniqueResult() == null) {
    
    				GregorianCalendar blocco = ultimaGiornata.getBlocco();
    
    				if (ora.before(blocco)) {
    
    					if (formazione == null) {
    
    						formazione = new Formazione();
    						formazione.setFantasquadra(fantasquadra);
    						formazione.setGiornata(ultimaGiornata);
    
    					}
    
    					String param = request.getParameter("modulo");
    
    					if (param != null) {
    
    						int modulo = Integer.parseInt(param);
    
    						criteria = hibernateSession.createCriteria(Modulo.class);
    						criteria.add(Restrictions.eq("id", modulo));
    						Modulo m = (Modulo)criteria.uniqueResult();
    
    						if (m != null) {
    
    							rf.setModulo(m);
    							hibernateSession.update(rf);
    
    							String tipo = m.getTipo();
    
    							int portieri = 1;
    							int difensori = Integer.parseInt(tipo.substring(0,1));
    							int centrocampisti = Integer.parseInt(tipo.substring(2,3));
    							int attaccanti = Integer.parseInt(tipo.substring(4,5));
    
    							Giocatore[] giocatori = new Giocatore[tot];
    
    							for (int i=0; i<titolari; i++) {
    
    								param = request.getParameter("g"+i);
    
    								if (param != null) {
    
    									int idGiocatore = Integer.parseInt(param);
    
    									criteria = hibernateSession.createCriteria(Giocatore.class);
    									criteria.add(Restrictions.eq("id", idGiocatore));
    									Giocatore g = (Giocatore)criteria.uniqueResult();
    
    									if (g != null) {
    
    										giocatori[i] = g;
    
    										Ruolo r = g.getRuolo();
    										String nomeRuolo = r.getNome();
    										if (nomeRuolo.equals(P))
    											portieri--;
    										else if (nomeRuolo.equals(D))
    											difensori--;
    										else if (nomeRuolo.equals(C))
    											centrocampisti--;
    										else if (nomeRuolo.equals(A))
    											attaccanti--;
    
    										GiocatoreRf gr = new GiocatoreRf();
    										gr.setGiocatore(g);
    										gr.setRf(rf);
    										gr.setPosto(i);
    										hibernateSession.save(gr);
    
    									}
    
    								}
    								else {
    									status = ERROR;
    									errorMessage = "Te ne 6 scordato uno (o più)!!";
    								}
    
    							}
    
    							int panchinari = riserve;
    
    							for (int i=titolari; i<titolari+riserve; i++) {
    
    								param = request.getParameter("g"+i);
    
    								if (param != null) {
    
    									int idGiocatore = Integer.parseInt(param);
    
    									criteria = hibernateSession.createCriteria(Giocatore.class);
    									criteria.add(Restrictions.eq("id", idGiocatore));
    									Giocatore g = (Giocatore)criteria.uniqueResult();
    
    									if (g != null) {
    
    										giocatori[i] = g;
    										panchinari--;
    
    										GiocatoreRf gr = new GiocatoreRf();
    										gr.setGiocatore(g);
    										gr.setRf(rf);
    										gr.setPosto(i);
    										hibernateSession.save(gr);
    
    									}
    
    								}
    
    							}
    
    							if (status == OK)
    								if (portieri < 0) {
    									status = ERROR;
    									errorMessage = "Quanti portieri vuoi mettere??";
    								}
    								else if (portieri > 0) {
    									status = ERROR;
    									errorMessage = "Lo metti ora il portiere che manca o chiamiamo Toro??";
    								}
    								else if (difensori < 0) {
    									status = ERROR;
    									errorMessage = "Troppi difensori!!";
    								}
    								else if (difensori > 0) {
    									status = ERROR;
    									errorMessage = "Mancano uno o più difensori!!";
    								}
    								else if (centrocampisti < 0) {
    									status = ERROR;
    									errorMessage = "Troppi centrocampisti!!";
    								}
    								else if (centrocampisti > 0) {
    									status = ERROR;
    									errorMessage = "Mancano uno o più centrocampisti!!";
    								}
    								else if (attaccanti < 0) {
    									status = ERROR;
    									errorMessage = "Troppi attaccanti!!";
    								}
    								else if (attaccanti > 0) {
    									status = ERROR;
    									errorMessage = "Mancano uno o più attaccanti!!";
    								}
    								else if (panchinari < 0) {
    									status = ERROR;
    									errorMessage = "Troppe riserve!!";
    								}
    
    								else {
    
    									formazione.setModulo(m);
    									formazione.setUltima_modifica(FusoOrario.trasformaData(new GregorianCalendar()));
    									hibernateSession.saveOrUpdate(formazione);
    
    									for (int i=0; i<tot; i++) {
    
    										criteria = hibernateSession.createCriteria(GiocatoreFormazione.class);
    										criteria.add(Restrictions.eq("id.idFormazione", formazione.getId()));
    										criteria.add(Restrictions.eq("posto", i));
    										GiocatoreFormazione gf = (GiocatoreFormazione)criteria.uniqueResult();
    
    										if (gf != null)
    											hibernateSession.delete(gf);
    
    										Giocatore g = giocatori[i];
    
    										if (g != null) {
    
    											gf = new GiocatoreFormazione();
    											gf.setGiocatore(g);
    											gf.setFormazione(formazione);
    											gf.setPosto(i);
    											hibernateSession.merge(gf);
    
    										}
    
    									}
    
    								}
    
    						}
    						else {
    							status = ERROR;
    							errorMessage = "Modulo non valido";
    						}
    
    					}
    					else {
    						status = ERROR;
    						errorMessage = "Non hai scelto il modulo";
    					}
    
    				}
    				else {
    					status = ERROR;
    					errorMessage =
    						"Troppo tardi per modificare la formazione!"
    						+ "\nIl limite era alle "
    						+ blocco.get(Calendar.HOUR_OF_DAY) + ":"
    						+ (blocco.get(Calendar.MINUTE) < 10 ? "0"+blocco.get(Calendar.MINUTE) : blocco.get(Calendar.MINUTE))
    						+ " del " + (blocco.get(Calendar.DAY_OF_MONTH) < 10 ? "0"+blocco.get(Calendar.DAY_OF_MONTH) : blocco.get(Calendar.DAY_OF_MONTH)) + "/"
    						+ (blocco.get(Calendar.MONTH) < 9 ? "0"+(blocco.get(Calendar.MONTH)+1) : (blocco.get(Calendar.MONTH)+1)
    						);
    				}
    
    			}
    			else {
    				status = ERROR;
    				errorMessage = "Questa formazione fa riferimento alla giornata " + ultimaGiornata.getNumero() + " che � gi� stata disputata, per cui non � pi� possibile modificarla";
    			}
    
    		}
    		else {
    			status = ERROR;
    			errorMessage = "Non sei abilitato ad eseguire questa operazione";
    		}
    
    		try {
    
    			Document doc = XmlResponseFactory.getInstance().newXml();
    			buildXml(doc, request, hibernateSession, rf);
    			String xmlString = XmlResponseFactory.getInstance().xmlToString(doc);
    
    			response.setContentType("text/xml;charset=ISO-8859-1");
    			response.getOutputStream().println(xmlString);
    			response.getOutputStream().flush();
    			response.getOutputStream().close();
    
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    
    		hibernateSession.getTransaction().commit();
    
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	}
    
    	private void buildXml(Document doc, HttpServletRequest request, Session hibernateSession, RegistroFormazioni rf) {
    
    		Element root = doc.createElement("response");
    		doc.appendChild(root);
    
    		Element st = doc.createElement("status");
    
    		if (status == OK) {
    
    			st.setAttribute("Status", Integer.toString(OK));
    			st.setAttribute("Message", "Formazione modificata correttamente");
    
    			rf.setSuccesso(true);
    
    		}
    
    		else if (status == ERROR) {
    
    			st.setAttribute("Status", Integer.toString(ERROR));
    			st.setAttribute("Message", errorMessage);
    
    			rf.setSuccesso(false);
    			rf.setErrore(errorMessage);
    
    		}
    
    		hibernateSession.update(rf);
    
    		root.appendChild(st);
    
    	}
    
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.