Foros del Web » Programación para mayores de 30 ;) » Java »

Problema conectando struts con hibernate

Estas en el tema de Problema conectando struts con hibernate en el foro de Java en Foros del Web. Hola, qué tal? Primero que todo un saludo. Estoy haciendo un login en struts y hibernate. Todoiba bien cuando estuve haciendo pruebas con usuarios definidos ...
  #1 (permalink)  
Antiguo 20/11/2010, 01:33
 
Fecha de Ingreso: noviembre-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Problema conectando struts con hibernate

Hola, qué tal? Primero que todo un saludo. Estoy haciendo un login en struts y hibernate. Todoiba bien cuando estuve haciendo pruebas con usuarios definidos en cadenas de texto. Pero ahora que estoy conectado la base de datos con hibernate me está regresando el error Estado HTTP 503 - El Servlet action no está disponible en este momento
Supongo que el problema es el struts-config.xml porque la verdad no soy muy diestro en esto. Qué me recomiendan revisar o hacer?

Este es el código del struts-config.xml
Código:
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">


<struts-config>
    <form-beans>
        <form-bean name="LoginForm" type="Modelo.LoginForm"/>
    	<form-bean name="SubirForm" type="Modelo.SubirForm"/>
    </form-beans>
    
    <global-exceptions>
    
    </global-exceptions>

    <action-mappings>
        <action path="/Welcome" forward="/Inicio.jsp"/>
	<action path="/upload" forward="/Proyecto.jsp" />
        <!-- Upload Action -->
        <action path="/upload-submit" type="Controlador.SubirAction" name="SubirForm" scope="request" input="input">
        <forward name="/input" path="/Proyecto.jsp" />
        <forward name="success" path="/display.jsp" />
     </action>
     <action name="LoginForm" path="/Login" scope="request" type="Controlador.LoginAction" input="/Inicio.jsp">
         <forward name="success" path="/Proyecto.jsp"/>
         <forward name="failure" path="/Inicio.jsp"/>
     </action>

    </action-mappings>

    <plug-in className="Controlador.HibernateUtil">
        <set-property property="path" value="/config.hibernate.cfg.xml"/>
    </plug-in>
    
    <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>

    <message-resources parameter="com/myapp/struts/ApplicationResource"/>    
    
      <plug-in className="org.apache.struts.tiles.TilesPlugin" >
        <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />      
        <set-property property="moduleAware" value="true" />
    </plug-in>
    
    <!-- ========================= Validator plugin ================================= -->
    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property
            property="pathnames"
            value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
    </plug-in>
  
</struts-config>
Y este es el código de Inicio.jsp

Código:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>

<html:html lang="true">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title><bean:message key="welcome.title"/></title>
        <html:base/>
    </head>
    <body style="background-color: white">

        <jsp:include page="cabecera.jsp"/>
        <html:form action="/Login">
            <table align="center" width="300" style="border:black 1px solid">
                <tr>
                    <td> Usuario: </td>
                    <td> <html:text property="user" value=""/> </td>
                </tr>
                <tr>
                    <td> Password: </td>
                    <td><html:password property="password" value="" /> </td>
                </tr>
                <tr>
                    <td> <html:submit value="Aceptar" /> </td>
                </tr>

            </table>
        </html:form>
        <h1> Inicio </h1>

        <logic:notPresent name="org.apache.struts.action.MESSAGE" scope="application">
            <div  style="color: red">
                ERROR:  Application resources not loaded -- check servlet container
                logs for error messages.
            </div>
        </logic:notPresent>
        
        
    </body>
</html:html>
Les agradecería una pequeña guí o un consejo. Gracias y saludos!!
  #2 (permalink)  
Antiguo 21/11/2010, 17:45
 
Fecha de Ingreso: octubre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema conectando struts con hibernate

Hola

Te olvidaste de Postear la Clase Action.

Si dijiste que con cadena de texto funcionaba bien, probablemente el problema se deba a alguna excepcion causada en dicha clase Action.

Verifica tu conexion o la llamada a la Base de datos en esa clase.

Un Cordial Saludo

Marcos Jara
http://tutorialjava7.wordpress.com
  #3 (permalink)  
Antiguo 22/11/2010, 14:35
 
Fecha de Ingreso: noviembre-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Problema conectando struts con hibernate

Bien, he revisado la clase Action, para ver si me puede estar produciendo un error desde ahí. Comenté las líneas que había agregado hasta antes que dejara de funcionar, pero creo que el problema no va por ahí. O al menos no soy tan hábil para descubrirlo.
Adjunto la clase Action. Y un Plugin que tengo.

LoginAction.java
Código:
package Controlador;

import Modelo.LoginForm;
import Beans.Usuario;
import java.util.List;
import Controlador.HibernateUtil;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

/**
 *
 * @author Andy
 */
public class LoginAction extends org.apache.struts.action.Action {
    
    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
    private static final String FAILURE = "failure";
    private static Log log = LogFactory.getLog(LoginAction.class);
    final public static String consulta = "FROM Beans.Usuario AS u WHERE u.login = ? AND u.password = ?";
    

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        PrintWriter pw = response.getWriter();
        LoginForm loginForm = (LoginForm) form;
        Usuario usuarioBD = null;
        List usuarios = null;
        SessionFactory factory = null;
        Session session = null;
        String usuario = loginForm.getUser();
        String password = loginForm.getPassword();

        try
        {
            factory = (SessionFactory) servlet.getServletContext().getAttribute(HibernateUtil.KEY_NAME); //Esto qué es?
            session = factory.openSession();
            
            usuarios = (List)session.createQuery(consulta);
            
            if(usuario.equals("andy") && password.equals("andy"))
            {
                HttpSession sessionActual = request.getSession(true);
                sessionActual.setAttribute("USER", usuario);
                return mapping.findForward(SUCCESS);
            } else {
                return mapping.findForward(FAILURE);
            }
        } catch (HibernateException e) {
            log.error("Hibernate error");
            session.close();
        } finally {
            log.error("Hibernate exception");
            session.close();
            return mapping.findForward(FAILURE);
        }
        
    }


}
El plugin
Código:
package Controlador;


import java.net.URL;
import javax.servlet.ServletException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil implements PlugIn {
   private Configuration config;
   private SessionFactory factory;
   private String path = "/config.hibernate.cfg.xml";
   private static Class clazz = HibernateUtil.class;
   public static final String KEY_NAME = clazz.getName();
   private static Log log = LogFactory.getLog(clazz);

   public void setPath(String path) {
      this.path = path;
   }

   public void init(ActionServlet servlet, ModuleConfig modConfig)
    throws ServletException {
      try {
         URL url = HibernateUtil.class.getResource(path);
         config = new Configuration().configure(url);
         factory = config.buildSessionFactory();
         servlet.getServletContext().setAttribute(KEY_NAME, factory);
      } catch (MappingException e) {

         log.error("mapping error", e);
         throw new ServletException();
      } catch (HibernateException e) {
         log.error("hibernate error", e);
         throw new ServletException();
      }
   }

   public void destroy() {
      try {
         factory.close();
      } catch (HibernateException e) {
         log.error("unable to close factory", e);
      }
   }
}
Creo que la excepción la está tirando, pero no puedo verla. Cómo podría hacer para imprimirla en la pantalla? Tal vez por ahí sería más fácil descubrirla, porque así es como programar a ciegas.

Última edición por SirAndy; 22/11/2010 a las 16:12
  #4 (permalink)  
Antiguo 22/11/2010, 17:59
 
Fecha de Ingreso: octubre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema conectando struts con hibernate

Por favor, postea el log completo del error para poder ayudarte, estoy viendo que estas utilizando el LogFactory,

Caso contrario, en el siguiente codigo, agrega lo siguiente, para que te lance el error a tu consola,

Avisame.

try {
URL url = HibernateUtil.class.getResource(path);
config = new Configuration().configure(url);
factory = config.buildSessionFactory();
servlet.getServletContext().setAttribute(KEY_NAME, factory);
} catch (MappingException e) {

log.error("mapping error", e);
e.printStackTrace();
throw new ServletException();
} catch (HibernateException e) {
log.error("hibernate error", e);
e.printStackTrace();
throw new ServletException();
}
  #5 (permalink)  
Antiguo 22/11/2010, 18:28
 
Fecha de Ingreso: noviembre-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema conectando struts con hibernate

Primero quetodo gracias por ayudarme tutorialjava.
He agregado las líneas que me mencionas, pero sigo sin poder ver los errores que está generando. Estoy usando netbeans y estoy viendo si hay algo para "activar/descativar" los mensajes a la consola. Aunque lo único que no despliega es eso, las excepciones.
  #6 (permalink)  
Antiguo 22/11/2010, 18:37
 
Fecha de Ingreso: noviembre-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema conectando struts con hibernate

No puedo descubrir donde se pintan las excepciones. he usado:
catch (MappingException e) {
log.error("mapping error", e);
log.trace("error"); e.printStackTrace();
throw new ServletException();
} catch (HibernateException e) {
log.error("hibernate error", e);
log.trace("hibernate error", e); e.printStackTrace();
throw new ServletException();
}
  #7 (permalink)  
Antiguo 22/11/2010, 18:48
 
Fecha de Ingreso: octubre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema conectando struts con hibernate

Ok,

Pero esta linea:

e.printStackTrace();

no estaba antes en tu codigo de la Clase Action.

Ya lo agregaste..? e igual no muestra nada?

Por que mira que igual tiene que mostrarte el error, y si pruebas solamente haciendo el catch de la clase Exception, de repente por ahi hacemos que se imprima el mensaje de error en la consola, que es lo que queremos.

Prueba lo siguiente:

try {
URL url = HibernateUtil.class.getResource(path);
config = new Configuration().configure(url);
factory = config.buildSessionFactory();
servlet.getServletContext().setAttribute(KEY_NAME, factory);
} catch (Exception e) {
e.printStackTrace();
throw new ServletException();
}

Es importante que te imprima el error en la consola, para poder detectar y corregir el problema.
  #8 (permalink)  
Antiguo 22/11/2010, 19:00
 
Fecha de Ingreso: noviembre-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema conectando struts con hibernate

Hola nuevamente.
Pues en netbeans sigo sin poderver las excepciones, al parecerme las está regresando en unos archivos.

Está es un archivo llamado stdout_20101122
java.lang.NullPointerException
at org.hibernate.cfg.Configuration.configure(Configur ation.java:1441)
at Controlador.HibernateUtil.init(HibernateUtil.java: 33)
at org.apache.struts.action.ActionServlet.initModuleP lugIns(ActionServlet.java:871)
at org.apache.struts.action.ActionServlet.init(Action Servlet.java:359)
at javax.servlet.GenericServlet.init(GenericServlet.j ava:212)
at org.apache.catalina.core.StandardWrapper.loadServl et(StandardWrapper.java:1173)
at org.apache.catalina.core.StandardWrapper.load(Stan dardWrapper.java:993)
at org.apache.catalina.core.StandardContext.loadOnSta rtup(StandardContext.java:4149)
at org.apache.catalina.core.StandardContext.start(Sta ndardContext.java:4458)
at org.apache.catalina.core.StandardContext.reload(St andardContext.java:3190)
at org.apache.catalina.manager.ManagerServlet.reload( ManagerServlet.java:918)
at org.apache.catalina.manager.ManagerServlet.doGet(M anagerServlet.java:360)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:717)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBas e.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run( JIoEndpoint.java:454)
at java.lang.Thread.run(Unknown Source)

Y este es uno llamado localhost2010-11-122

22/11/2010 06:55:48 PM org.apache.catalina.core.StandardContext loadOnStartup
GRAVE: El Servlet /Ihtoa lanzó excepción de load()
javax.servlet.UnavailableException
at org.apache.struts.action.ActionServlet.init(Action Servlet.java:402)
at javax.servlet.GenericServlet.init(GenericServlet.j ava:212)
at org.apache.catalina.core.StandardWrapper.loadServl et(StandardWrapper.java:1173)
at org.apache.catalina.core.StandardWrapper.load(Stan dardWrapper.java:993)
at org.apache.catalina.core.StandardContext.loadOnSta rtup(StandardContext.java:4149)
at org.apache.catalina.core.StandardContext.start(Sta ndardContext.java:4458)
at org.apache.catalina.core.StandardContext.reload(St andardContext.java:3190)
at org.apache.catalina.manager.ManagerServlet.reload( ManagerServlet.java:918)
at org.apache.catalina.manager.ManagerServlet.doGet(M anagerServlet.java:360)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:717)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBas e.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run( JIoEndpoint.java:454)
at java.lang.Thread.run(Unknown Source)
  #9 (permalink)  
Antiguo 22/11/2010, 19:20
 
Fecha de Ingreso: octubre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema conectando struts con hibernate

mmm,

Que lastima, es que es un poco dificil ayudarte sin tener el conjunto completo de clases a mano.

Pero si o si es por la configuracion de tu hibernate, no se, de repente no esta encontrando bien las clases, o el nombre de la conexion a la base de datos no esta configurado correctamente.

Si sacas el log factory de tu clase, y todas las dependencias del mismo el mensaje tiene que imprimirte en la consola,

Sino haz directamente para imprimir System.out.println(e.toString());

Con eso no hay caso, tiene que imprimirte si o si en pantalla
  #10 (permalink)  
Antiguo 22/11/2010, 19:24
 
Fecha de Ingreso: noviembre-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema conectando struts con hibernate

Diablos! bien, tendré que ver de qué manera me imprime a la consola, porque ni el Sistem.out.printl me está respetando. Gracias por tu ayuda tutorialjava.
  #11 (permalink)  
Antiguo 23/11/2010, 09:31
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 16 años, 4 meses
Puntos: 10
Respuesta: Problema conectando struts con hibernate

Al parecer estas configurando mal Hibernate,

Como se llama tu archivo de configuracion de Hibernate? Acaso se llama hibernate.cfg.xml??

Fijate muy bien, que estas haciendo con esta linea:

private String path = "/config.hibernate.cfg.xml";

Segun yo, tienes un archivo que se llama config.hibernate.cfg.xml

Checalo y nos avisas!

Saludos!
  #12 (permalink)  
Antiguo 23/11/2010, 13:23
 
Fecha de Ingreso: noviembre-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema conectando struts con hibernate

Hola Bunburyscom, sí tengo un archivo que se llama hibernate.cfg.xml que está dentrode un paquete denominado config. Sugerirías que lo ponga en otro lugar? Gracias, saludos!
  #13 (permalink)  
Antiguo 24/11/2010, 10:10
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 16 años, 4 meses
Puntos: 10
Respuesta: Problema conectando struts con hibernate

Cita:
Iniciado por SirAndy Ver Mensaje
Hola Bunburyscom, sí tengo un archivo que se llama hibernate.cfg.xml que está dentrode un paquete denominado config. Sugerirías que lo ponga en otro lugar? Gracias, saludos!
Ok, entonces intenta llamarlo de otra forma, por ejemplo:

private String path = "/config/hibernate.cfg.xml";

O tambien:

private String path = "config/hibernate.cfg.xml";

Saludos!
  #14 (permalink)  
Antiguo 06/12/2010, 19:43
 
Fecha de Ingreso: noviembre-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Problema conectando struts con hibernate

Hola, gracias por la ayuda pero sigo sin poder solucionar el problema, en cuanto tenga algo lo postearé por acá. Saludos!!
  #15 (permalink)  
Antiguo 07/12/2010, 04:42
 
Fecha de Ingreso: octubre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema conectando struts con hibernate

SirAndy,

Yo no tendría problemas en verificar tu código más detenidamente si me envias tu proyecto, el script de tu base de datos, y todo lo necesario para montar tu APP en mi maquina, también si no estás muy apurado.

Escribe a mi email, y por alli seguimos conversando.

Saludos.
  #16 (permalink)  
Antiguo 07/12/2010, 11:31
 
Fecha de Ingreso: noviembre-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Problema conectando struts con hibernate

Gracias tutorialjava, al parecer no puedo ver tu correo porque no tengo los permisos para hacerlo. Te molestaría mandarme un correo a andbrav en gmail, para que pueda regresarte el proyecto? Gracias nuevamente por esta gran ayuda. Hasta pronto.

Etiquetas: hibernate, struts
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:58.