Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [J2EE] Problema in deploy con netbeans (per esperti)

    Ciao a tutti.
    Mi scuso se il titolo del messaggio dice poco ma non essendo riuscito ancora a capire quale è la causa del mio problema non ho potuto essere più chiaro.

    Vi descrivo quello che mi succede:
    Utilizzo NetBeans 5.5 come ide e il server della JavaPlatform 9 per fare girare un'applicazioncina che ho fatto per imparare ad usare EJB 3.

    Tutto funzion a meraviglia fino a quando non mi capita un eccezione SQL.

    Ammettiamo che io mi dimentichi in fase di inserimento dei dati nel db di settare un campo che non può essere null.
    Come è giusto che sia mi salta fuori una sql exception.
    I fatti strani però sono 2:

    1) La sql exception non mi viene data una sola volta ma mi viene data di continuo come se fosse dentro a un ciclo infinito. E' come se una volta fallito l'insert (e fatto il rollback) venisse tentato di nuovo l'insert, che fallisce nuovamente e così via.
    Ovviamente la mia insert non è dentro un ciclo.
    Altra cosa interessante è che il contatore (automatico) nel mio DB si incrementa ad ogni iterazione di questo ciclo fantasma! Infatti se provo a inserire un nuovo dato a mano nel db il contatore che all'inserimento del dato precedente era arrivato a 10 (supponiamo), dopo questa eccezione sarà circa a 1634567.
    Quindi di fatto la mia insert viene tentata all'infinito.

    Passiamo ora alla seconda cosa ancora più bizzarra.

    2) L'unico modo che ho per terminare questo ciclo di sql exception che mi si ripropone è stoppare il server e così faccio.
    Dopodichè vado e sistemo l'errore. Poi faccio ripartire l'applicazione e questa volta funziona MA:
    sulla console continua a riproporsi il ciclo di sql exception relativo alla insert fatta in precedenza quando il programma era sbagliato. Infatti nella console mi viene stampata la sql che mi da l'eccezione e i dati inseriti nell'sql sono quelli vecchi.
    Insomma mi ritrovo con un'applicazione che funziona (i dati mi vengono inseriti nel db ora che ho corretto l'errore) ma sotto in console continua a girarmi all'infinito la sql exception vecchia.
    Insomma è come se si tenesse a mente di ritentare infinite volte le vecchie insert fallite oltre che a fare le insert corrette.
    ...e il contatore dell'id intanto cresce a dismisura.

    Altra chicca importante è che il ciclo infinito di eccezioni, la prima volta mi si scatena quando sto eseguendo l'applicazione ma tutte le volte successive si scatena al deploy dell'applicazione anche se non faccio il run.
    Insomma se l'applicazione è deploiata e faccio partire il server, partono anche le eccezioni.
    Se l'applicazione non è deployata, appena la deployo partono le eccezioni, MA ANCHE SE L'APPLICAZIONE NON STA ESEGUENDO; E' ALLUCINANTE!!!

    Ho provato ad eliminare il server e a ricrearlo in netbeans; a fare un clean e un build. A chiudere e riaprire il progetto a undeployarlo e a rideployarlo ma niente.

    Non so più che fare.
    Dipende dal server della java platform?
    Da netbeans?
    Dal database?

    Attualmente come DBMS sto usando Mysql ma lo stesso problema che l'ho anche usando il DB della java platform.

    Sono davvero alla frutta!
    Vi prego aiutatemi!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Premesso che non sono un esperto di EJB, posso però dirti che senza una straccio di riga di codice ci vuole la sfera di cristallo per indovinare qual che sia la causa delle tue magagne.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Domani posso postare il codice ma dubito che sia un problema del mio codice visto che il problema si verifica anche se la mia applicazione non è in esecuzione.
    In oltre, come detto sopra, l'eccezione che mi viene data è relativa ad una insert errata che nel mio codice non esiste più visto che l'ho corretta.

    Sembra più un baco di NetBeans o del server java... ...non so.

  4. #4
    Come promesso eccovi il mio codice, anche se so già che il problema non è qui.
    Secondo me è un impostazione del server se non un baco!

    Questa è la semplicissima servlet:

    codice:
    public class WriteAll extends HttpServlet {
    
        @Resource(mappedName="jms/WriteDataFactory")
        private  ConnectionFactory connectionFactory;
    
        @Resource(mappedName="jms/WriteData")
        private  Queue queue;
        
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try {
                Connection connection = connectionFactory.createConnection(); 
                Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                MessageProducer messageProducer = session.createProducer(queue);
    
                ObjectMessage message = session.createObjectMessage();
                String nome=request.getParameter("nome");
                
                if (nome!=null && !nome.equals("")) {
                    Clienti e = new Clienti();
                    e.setNome(nome);
    
                    message.setObject(e);
                    messageProducer.send(message);
                    messageProducer.close();
                    connection.close();
                    //response.sendRedirect("index.jsp");
                    return;
                }   
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Servlet WriteAll</title>");
                out.println("</head>");
                out.println("<body style=\"FONT-FAMILY: VERDANA; FONT-SIZE: 12px\">");
                out.println("<h3>Servlet WriteAll at " + request.getContextPath () + "</h3>");
                out.println("<form>");
                out.println("Nome Cliente: <input type='text' name='nome'>
    ");
                out.println("<input type='submit'>
    ");
                out.println("</form>");
                out.println("</body>");
                out.println("</html>");
                
            } catch (JMSException ex) {
                ex.printStackTrace();
            }
    
            out.close();
        }
        
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
        
        public String getServletInfo() {
            return "Short description";
        }
    }
    E questo è l'altrettanto semplicissimo Messege-Driven Bean che viene usato dalla servlet qui sopra per fare l'inserimento:

    codice:
    @MessageDriven(mappedName = "jms/WriteData", activationConfig =  {
            @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
            @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
        })
    public class WriteData implements MessageListener {
    
        @PersistenceContext
        private EntityManager em;
        
        @Resource
        private MessageDrivenContext mdc;
    
        public WriteData() {
        }
    
        public void onMessage(Message message) {
            ObjectMessage msg = null;
            try {
                if (message instanceof ObjectMessage) {
                    msg = (ObjectMessage) message;
                    Clienti e = (Clienti) msg.getObject();
                    save(e);
                }
            } catch (JMSException e) {
                e.printStackTrace();
                mdc.setRollbackOnly();
            } catch (Throwable te) {
                te.printStackTrace();
            }
        }
    
        public void save(Object object) {
            em.persist(object);
        }
    }

  5. #5
    Ho reinstallato La JavaPlatform e netbeans e ora senza cambiare nemmeno una linea del mio codice funziona tutto regolare.
    A dimostrazione del fatto che non è un problema del mio codice.

    Solo che a questo punto credo che alla prossima sqlException sarò da capo.

    Quindi se qualcuno ha qualche idea o consiglio lo prego di aiutarmi!

  6. #6
    ...ed infatti sono da capo...

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.