The MySQL database call does not work for me JSF Hibernate

0

I get this error when executing a query that should connect to the database when making a log:

    Hibernate: select this_.username as username1_0_0_, this_.password as 
    password2_0_0_, this_.name as name3_0_0_, this_.lastname as 
    lastname4_0_0_, this_.sex as sex5_0_0_, this_.tel as tel6_0_0_ from 
    ddjj.users this_ where this_.username like ? and this_.password like ?
    10-Jun-2017 19:45:01.078 WARNING [http-nio-8084-exec-182] 
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute #
    {loginFormBean.searchUser()}: java.lang.IndexOutOfBoundsException: 
    Index: 0, Size: 0
     javax.faces.FacesException: #{loginFormBean.searchUser()}: 
    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at 

 com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerI
    mpl.java:118)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at 
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at 

  javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at 




 com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPh
    ase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at 
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at 


 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicat
   ionFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.faces.el.EvaluationException: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    ... 31 more
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at aplicacion.modelo.source.UserDataSource.searchUser(UserDataSource.java:47)
    at aplicacion.hibernate.dao.imp.UserDAOImp.searchUser(UserDAOImp.java:36)
    at aplicacion.beans.LoginBean.searchUser(LoginBean.java:40)
    at aplicacion.beans.forms.LoginFormBean.searchUser(LoginFormBean.java:31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 32 more

10-Jun-2017 19:45:01.082 SEVERE [http-nio-8084-exec-182] com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError javax.faces.el.EvaluationException: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at aplicacion.modelo.source.UserDataSource.searchUser(UserDataSource.java:47)
    at aplicacion.hibernate.dao.imp.UserDAOImp.searchUser(UserDAOImp.java:36)
    at aplicacion.beans.LoginBean.searchUser(LoginBean.java:40)
    at aplicacion.beans.forms.LoginFormBean.searchUser(LoginFormBean.java:31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 32 more

XHTML

<?xml version='1.0' encoding='UTF-8' ?>

             Login                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          FormBean     package aplicacion.beans.forms;

import aplicacion.beans.LoginBean;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

/**
*
* @author Trabajo Y Estudio
*/
@ManagedBean
@ViewScoped
public class LoginFormBean implements Serializable{

@ManagedProperty(value = "#{loginBean}")
private LoginBean loginBean;
private String username;
private String pass;

public LoginFormBean() {
}

public String searchUser(){
    return loginBean.searchUser(username, pass);
}   

/**
 * @return the username
 */
public String getUsername() {
    return username;
}

/**
 * @param username the username to set
 */
public void setUsername(String username) {
    this.username = username;
}

/**
 * @return the pass
 */
public String getPass() {
    return pass;
}

/**
 * @param pass the pass to set
 */
public void setPass(String pass) {
    this.pass = pass;
}

/**
 * @return the loginBean
 */
public LoginBean getLoginBean() {
    return loginBean;
}

/**
 * @param loginBean the loginBean to set
 */
public void setLoginBean(LoginBean loginBean) {
    this.loginBean = loginBean;
}

}

Bean

package aplicacion.beans;

import aplicacion.hibernate.dao.imp.UserDAOImp;
import aplicacion.hibernate.dao.UserDAO;
import aplicacion.modelo.dominio.User;
import aplicacion.modelo.source.UserDataSource;
import java.io.Serializable; 
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
*
* @author hernan-PC
*/
@ManagedBean
@ViewScoped
public class LoginBean implements Serializable {

private User user;
private UserDAO userDao;
public LoginBean() {
}

@PostConstruct
public void init() {
    userDao = new UserDAOImp();
}

public String searchUser(String username, String pass) {
    String word = null;
    System.out.println("Bean");
    user = userDao.searchUser(username, pass);
    if (user == null) {
        FacesContext.getCurrentInstance()
                .addMessage(null, new 
FacesMessage(FacesMessage.SEVERITY_WARN, "Atencion", "Uasuario No 
Encontrado"));
    } else {
        FacesContext.getCurrentInstance()
                .getExternalContext()
                .getSessionMap().put("user", user);
        word = "menu?faces-redirect=true";
    }
    return word;
}

/**
 * @return the user
 */
public User getUser() {
    return user;
}

/**
 * @param user the user to set
 */
public void setUser(User user) {
    this.user = user;
}

/**
 * @return the userDao
 */
public UserDAO getUserDao() {
    return userDao;
}

/**
 * @param userDao the userDao to set
 */
public void setUserDao(UserDAO userDao) {
    this.userDao = userDao;
}

}

---------------------------- up here arrives well --------------- ----------

package aplicacion.modelo.source;

import aplicacion.hibernate.config.HibernateUtil;
import aplicacion.modelo.dominio.User;
import java.io.Serializable;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

 /**
 *
 * @author hernan-PC
 */
public class UserDataSource implements Serializable {

public static void add(User user) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();
    session.save(user);
    session.getTransaction().commit();
    session.close();
}

public static void upDate(User user) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();
    session.save(user);
    session.getTransaction().commit();
    session.close();
}

public static User searchUser(String username, String pass) {
    User user = null;
    Session session = HibernateUtil.getSessionFactory().openSession();
    Criteria criteria = session.createCriteria(User.class);
    criteria.add(Restrictions.like("username", username));
    criteria.add(Restrictions.like("password", pass));
    System.out.println("dentro de la busqueda de ususario");
    //no importa si el usuario existe o no igual entra al if
    if (criteria.list().isEmpty()) {
        System.out.println("dentro de if ");
        user = new User();

        user = (User) criteria.list().get(0);
    }
    session.close();        
    System.out.println("devolviendo usuario");
    return user;
}

}
    
asked by Hernan Jesus Diaz Yarbi 11.06.2017 в 00:56
source

1 answer

1

As you can see in the stacktrace, IndexOutOfBoundsException occurs in your method searchUser() . That exception is thrown when you try to access an invalid position in a collection, for example if you access position 5 of an array with 2 elements.

In this case the stacktrace is giving you the information that you tried to access position 0 and that the size of your collection was 0. You can see it in:

{loginFormBean.searchUser()}: java.lang.IndexOutOfBoundsException: 
Index: 0, Size: 0

In searchUser you have:

    if (criteria.list().isEmpty()) { // Chequeo lista vacía
        System.out.println("dentro de if ");
        user = new User();

        user = (User) criteria.list().get(0); //acceso la primera posición de una lista vacía
    }

If you enter the body of if it is because criteria.list() has no elements and therefore accessing position 0 ( user = (User) criteria.list().get(0); ) will throw IndexOutOfBoundsException.

It is not clear to me because when the user does not exist you try to access criteria.list instead of dealing with that particular case, returning eg a new User with username emptied, null or an exception

    
answered by 11.06.2017 / 16:59
source