Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    553

    Errore usando Hibernate per un db Mysql

    Salve,

    ho realizzato il seguente Controller:

    codice:
    @WebServlet({"/add","/del", "/list"})
    public class Controller extends HttpServlet {
        private static final long serialVersionUID = 1L;
        private static final Logger logger = LogManager.getLogger(Controller.class);
       
        public Controller() {
            
        }
    
    
        
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
    
    
    //        getClass().getResource("/log4j2.properties");
            String params = "testing log4j";
    
    
            if (logger.isDebugEnabled()) {
                logger.debug("DEBUG: " + params);
    
    
            }
    
    
            if (logger.isInfoEnabled()) {
                logger.info("INFO: " + params);
            }
    
    
            logger.warn("WARNING: " + params);
            logger.error("ERROR: " + params);
            logger.fatal("FATAL: " + params);
            
            String path=request.getServletPath()!=null?request.getServletPath():"";
            PrintWriter w=response.getWriter();
            SessionFactory sessionFactory=HibernateUtils.getSessionFactory();
            switch(path) {
              case "/add":
                   
                  String url=request.getParameter("url")!=null?request.getParameter("url"):"";
                  String title=request.getParameter("title")!=null?request.getParameter("title"):url;
                  String username=request.getParameter("user")!=null?request.getParameter("user"):"";
                  if(!url.isEmpty()) {
                      Session hsession=sessionFactory.getCurrentSession();
                      hsession.beginTransaction();
                      try {
                          User user=new User();
                          user.setUsername(username);
                          
                          //register URL
                          WebPage webPage=new WebPage();
                          webPage.setUrl(url);
                          webPage.setTitle(title);
                          webPage.setUser(user);
                          
                          hsession.saveOrUpdate(user);
                          hsession.save(webPage);
                          hsession.getTransaction().commit();
                          response.sendRedirect("ok.jsp");
                      }catch(HibernateException he) {
                          hsession.getTransaction().rollback();
                          response.sendRedirect("failed.jsp");
                      }
                  }
                  break;
              case "/del":
                  w.println("del");
              case "/list":
    
    
                  Session hsession=sessionFactory.getCurrentSession();
                  Query query=(Query) hsession.createQuery("from WebPage");
                  List<WebPage> pages=query.list();
                  hsession.getTransaction().commit();
                  request.setAttribute("pageList", pages);
                  request.getRequestDispatcher("list.jsp").forward(request, response);
                  break;
                  
              default:
                  w.println("???");
            }
        }
    
    
    }


    Se digito una url nel browser del tipo : http://localhost:8080/pocket?add?use...t&title=google, il Controller dovrebbe nel metodo doGet() inserire nel db Mysql lo user, l'url e il title.

    Ottengo però il seguente errore:
    ERROR: testing log4j
    FATAL: testing log4j
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
    nov 02, 2019 8:49:26 AM org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: Servlet.service() for servlet [webservlet.Controller] in context with path [/pocket] threw exception [Servlet execution threw an exception] with root cause
    java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
    at org.apache.catalina.loader.WebappClassLoaderBase.l oadClass(WebappClassLoaderBase.java:1364)
    at org.apache.catalina.loader.WebappClassLoaderBase.l oadClass(WebappClassLoaderBase.java:1185)
    at org.slf4j.LoggerFactory.getSingleton(LoggerFactory .java:223)
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:12 0)
    at org.slf4j.LoggerFactory.performInitialization(Logg erFactory.java:111)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFa ctory.java:269)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.ja va:242)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.ja va:255)
    at org.hibernate.annotations.common.Version.<clinit>( Version.java:34)
    at org.hibernate.annotations.common.reflection.java.J avaReflectionManager.<clinit>(JavaReflectionManage r.java:73)
    at org.hibernate.cfg.Configuration.createReflectionMa nager(Configuration.java:2356)
    at org.hibernate.cfg.Configuration.createReflectionMa nager(Configuration.java:2352)
    at org.hibernate.cfg.Configuration.reset(Configuratio n.java:267)
    at org.hibernate.cfg.Configuration.<init>(Configurati on.java:258)
    at org.hibernate.cfg.Configuration.<init>(Configurati on.java:262)
    at classes.HibernateUtils.buildSessionFactory(Hiberna teUtils.java:16)
    at classes.HibernateUtils.<clinit>(HibernateUtils.jav a:12)
    at webservlet.Controller.doGet(Controller.java:56)
    at javax.servlet.http.HttpServlet.service(HttpServlet .java:635)
    at javax.servlet.http.HttpServlet.service(HttpServlet .java:742)
    at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilt er(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBas e.invoke(AuthenticatorBase.java:493)
    at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:137)
    at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve. invoke(AbstractAccessLogValve.java:660)
    at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(H ttp11Processor.java:798)
    at org.apache.coyote.AbstractProcessorLight.process(A bstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandl er.process(AbstractProtocol.java:806)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProce ssor.doRun(NioEndpoint.java:1498)
    at org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker( Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$Wrapping Runnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)





    Cosa succede????? Boh?!


    tulipan

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da tulipan Visualizza il messaggio
    [COLOR=#ff0000]
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
    L'errore non c'entra niente direttamente con il DB e Hibernate. Innanzitutto non vedo gli import ma da LogManager.getLogger deduco che il TUO codice usa direttamente log4j

    Il punto è che nel tuo progetto c'è altro (probabilmente Hibernate) che invece usa la SLF4J. Per usare SLF4J ci vuole l'artifact della sua API (slf4j-api.jar) e in PIÙ ci vuole l'artifact di "adattamento" per girare i log su una libreria di logging specifica es. Log4J, quindi ad esempio slf4j-log412.jar (per Log4J 1.2).

    Pertanto cerca di fare chiarezza sul logging (lo so ... il logging non è la cosa più importante ma ho visto progetti di lavoro dove era molto ravanato ..).
    Se puoi usare SLF4J, usalo anche nel TUO codice. Che tra l'altro rispetto al Log4J 1.2 è più pratico perché con SLF4J puoi sfruttare i messaggi "parametrizzati".

    Invece di usare con Log4J la concatenazione (che è inefficiente):

    logger.debug("Valore x = " + x + "; valore y = " + y);

    Con SLF4J puoi fare:

    logger.debug("Valore x={}; y={}", x, y);

    che è oltretutto più leggibile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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 © 2024 vBulletin Solutions, Inc. All rights reserved.