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

jsf en una aplicación Enterprise

Estas en el tema de jsf en una aplicación Enterprise en el foro de Java en Foros del Web. hola a todos tengo el siguiente escenario, tengo una aplicación java enterprise y en la war coloque los jsf, los beans los coloque en la ...
  #1 (permalink)  
Antiguo 22/10/2014, 11:18
Avatar de jocryo  
Fecha de Ingreso: agosto-2014
Mensajes: 38
Antigüedad: 9 años, 7 meses
Puntos: 0
Exclamación jsf en una aplicación Enterprise

hola a todos

tengo el siguiente escenario, tengo una aplicación java enterprise y en la war coloque los jsf, los beans los coloque en la ejb (que no estoy seguro si van hay), y pues hice todo normal, pero al momento de ejecutar, no me reconoce la clase

codigo del bean:
Código HTML:
package co.com.glokal.almaviva.controlador.bean;

import javax.ejb.Stateless;
import javax.ejb.LocalBean;

/**
 *
 * @author jose.ceballos
 */
@Stateless
@LocalBean
public class login {

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    
    private String user;
    private String pass;
        
    private String respuesta;
    
    public String getUser() { return user; }
    public void setUser(String user) { this.user = user; }
    public String getPass() { return pass; }
    public void setPass(String pass) { this.pass = pass; }
        
    public String getRespuesta() { return respuesta; }
    public void setRespuesta(String respuesta) { this.respuesta = respuesta; }
    
    public void iniciarSesion(){  
        if(pass.equals("123") && user.equals("admin")){
            respuesta = "Correcto";
        }
    }

    
}
codigo del jsf:
Código HTML:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form >
            Usuario:&nbsp;&nbsp;&nbsp; <h:inputText id="txtUser" value="#{login.user}"/>
            Contraseña: <h:inputSecret id="txtPass" value="#{login.pass}"/>
            <h:commandButton action="login" actionListener="#{login.iniciarSesion()}" value="Guardar"/>
            <h:outputLabel value="#{login.respuesta}"/>
        </h:form>
    </h:body>
</html> 
como hago para que e reconozca el bean (login.java) ?
  #2 (permalink)  
Antiguo 22/10/2014, 15:35
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: jsf en una aplicación Enterprise

Hola,

Posiblemente,

Cita:
Iniciado por jocryo Ver Mensaje
... tengo el siguiente escenario, tengo una aplicación java enterprise y en la war coloque los jsf, los beans los coloque en la ejb (que no estoy seguro si van hay), y pues hice todo normal, pero al momento de ejecutar, no me reconoce la clase

Código HTML:
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
como hago para que e reconozca el bean (login.java) ?
Con Stateless y LocalBean estás definiendo un EJB, pero no creo que sea visible desde el JSF puesto que no creo que lo pueda inyectar en CDI, aunque de eso no estoy seguro. Posiblemente, si agregas la anotación @Named sea visible desde JSF ... pero no creo que sea la solución correcta, principalmente porque es Stateless.

Lo mas correcto es que hagas un Bean adicional en la aplicación Web, que le agregues la anotación @Named, desde estas inyectas el EJB con la anotación @EJB, e implementas todos los metodos para que llamen a los métodos del EJB, como un Decorator.

Lo mas simple es que no hagas un EJB, y ese mismo código lo pases a la aplicación Web, le quitas las anotaciones y le pones la anotación @Named. Tienes que comprender que ya no va a ser un EJB de allí en adelante sino un simple Bean.

Saludos,
  #3 (permalink)  
Antiguo 23/10/2014, 08:51
Avatar de jocryo  
Fecha de Ingreso: agosto-2014
Mensajes: 38
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: jsf en una aplicación Enterprise

hola HackmanC , gracias por tus respuestas pero tengo que decirte que no entendí mucho que digamos, la ultima si por lo que entendí no me sirve, pero la que mas me sonó fue la segunda, lo malo es que no se como hacer eso TT_TT, ¿como debería hacer eso?
  #4 (permalink)  
Antiguo 23/10/2014, 10:20
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: jsf en una aplicación Enterprise

Hola,

Cita:
Iniciado por jocryo Ver Mensaje
... pero la que mas me sonó fue la segunda, lo malo es que no se como hacer eso TT_TT, ¿como debería hacer eso?
Cita:
Iniciado por HackmanC Ver Mensaje
... hagas un Bean adicional en la aplicación Web, que le agregues la anotación @Named, desde estas inyectas el EJB con la anotación @EJB, e implementas todos los metodos para que llamen a los métodos del EJB, como un Decorator. ...
Crea una nueva clase en donde tienes la aplicación Web, la forma de colocarlo allí y no en los ejb depende del editor y la forma como construyes el proyecto ear (las clases que compiladas quedan en WEB-INF/classes en el proyecto war). En esa clase pones una variable y la anotas con @EJB, después crear los métodos necesarios para realizar la lógica de la presentación.

Algo así:

Código Java:
Ver original
  1. @Named
  2. public class login {
  3.  
  4. @EJB
  5. co.com.glokal.almaviva.controlador.bean.login ejblogin;
  6.  
  7. public void iniciarSesion(...) {
  8. ejblogin.iniciarSesion(...);
  9. }
  10.  
  11. ...
  12.  
  13. }
Por cierto, no puedes tener las variables user y pass como miembros del EJB, el EJB es @Stateless. Tienes que ajustar el EJB y el Bean consecuentemente.

Es más polimorfismo que decorador, creo.
Saludos,

Última edición por HackmanC; 23/10/2014 a las 10:49 Razón: por cierto...
  #5 (permalink)  
Antiguo 23/10/2014, 11:10
Avatar de jocryo  
Fecha de Ingreso: agosto-2014
Mensajes: 38
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: jsf en una aplicación Enterprise

no di pie con bola, ahora ni ejecuta >.<

me quedo algo asi:

EJB
Código Java:
Ver original
  1. package co.com.glokal.almaviva.controlador.beanejb;
  2.  
  3. import javax.ejb.Stateless;
  4. import javax.ejb.LocalBean;
  5. import javax.ejb.Remote;
  6.  
  7. @Stateless
  8. @Remote //aca antes estaba en @LocalBean
  9. public class loginEjb {
  10.  
  11.     public String iniciarSesion(String password, String nameuser){  
  12.         String resp = "Incorrecto";
  13.         if(password.equals("123") && nameuser.equals("admin")){
  14.             resp = "Correcto";
  15.         }
  16.         return resp;
  17.     }

bean en el lado War
Código Java:
Ver original
  1. package co.com.glokal.almaviva.controlador.bean;
  2.  
  3. //import co.com.glokal.almaviva.controlador.beanejb.loginEjb;
  4. import javax.ejb.EJB;
  5. import javax.faces.bean.ManagedBean;
  6. import javax.faces.bean.RequestScoped;
  7. import javax.inject.Inject;
  8. import javax.inject.Named;
  9.  
  10. /**
  11.  *
  12.  * @author jose.ceballos
  13.  */
  14. @ManagedBean(name = "login")
  15. @Named
  16. @RequestScoped
  17. public class login {
  18.  
  19.     /**
  20.      * Creates a new instance of login
  21.      */
  22.     public login() {
  23.     }
  24.     private String user;
  25.     private String pass;
  26.        
  27.     private String respuesta;
  28.    
  29.     //@Inject
  30.     @EJB
  31.     private co.com.glokal.almaviva.controlador.beanejb.loginEjb log;
  32.    
  33.     public String getUser() { return user; }
  34.     public void setUser(String user) { this.user = user; }
  35.     public String getPass() { return pass; }
  36.     public void setPass(String pass) { this.pass = pass; }
  37.        
  38.     public String getRespuesta() { return respuesta; }
  39.     public void setRespuesta(String respuesta) { this.respuesta = respuesta; }
  40.    
  41.    
  42.     public void iniciarSesion(){  
  43.         /*
  44.         if(pass.equals("123") && user.equals("admin")){
  45.             respuesta = "Correcto";
  46.         }
  47.         */
  48.         //log = new loginEjb();
  49.         respuesta = log.iniciarSesion(pass, user);
  50.     }
  51.    
  52. }

y el jsf si no ha cambiado

que hice mal?

por cierto, el error que arroja la consola dice que no esta reconociendo la ubicación de loginEjb

Última edición por jocryo; 23/10/2014 a las 11:26
  #6 (permalink)  
Antiguo 23/10/2014, 11:27
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: jsf en una aplicación Enterprise

Hola,

Cita:
Iniciado por jocryo Ver Mensaje
...
@Stateless
@Remote //aca antes estaba en @LocalBean
...
No sé que te hizo pensar en cambiar a @Remote.

Cita:
Iniciado por jocryo Ver Mensaje
@ManagedBean(name = "login")
@Named

que hice mal?
O usas ManagedBean o usas Named.

Es lógico que no funcione.

Lo único que se me olvidó mencionar anteriormente, es que adicionalmente de los cambios que te indique, el proyecto war debe de conocer la interfaz del ejb. En otras palabras, si el ejb está en otro proyecto diferente al war, tendrías que crear una interfaz del ejb y esa interface ponerla en el war, con las anotaciones que ya tenias, como @LocalBean o @Local. Con esto último los cambios son mas grandes, y creo que tendrías que comprender mas como funciona todo para poder hacerlo.

Posiblemente te sea de alguna ayuda:
http://docs.oracle.com/javaee/7/tuto...eans.htm#BNBLR

Sino posiblemente alguien mas te pueda guiar detenidamente sobre cada uno de los pasos a seguir,

Saludos,
  #7 (permalink)  
Antiguo 23/10/2014, 11:34
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: jsf en una aplicación Enterprise

Hola,

Cita:
Iniciado por jocryo Ver Mensaje
...
@Stateless
@Remote //aca antes estaba en @LocalBean
...
No sé que te hizo pensar en cambiar a @Remote.

Cita:
Iniciado por jocryo Ver Mensaje
@ManagedBean(name = "login")
@Named

que hice mal?
O usas ManagedBean o usas Named.

Es lógico que no funcione.

Lo único que se me olvidó mencionar anteriormente, es que adicionalmente de los cambios que te indique, el proyecto war debe de conocer la interfaz del ejb. En otras palabras, si el ejb está en otro proyecto diferente al war, tendrías que crear una interfaz del ejb y esa interface ponerla en el war, con las anotaciones que ya tenias, como @LocalBean o @Local (no puede ser una copia de la interface, debe ser la misma interface). Con esto último los cambios son mas grandes, y creo que tendrías que comprender mas como funciona todo para poder hacerlo.

Posiblemente te sea de alguna ayuda:
http://docs.oracle.com/javaee/7/tuto...eans.htm#BNBLR

Sino posiblemente alguien mas te pueda guiar detenidamente sobre cada uno de los pasos a seguir,

Saludos,

Etiquetas: clase, enterprise, jsf, string
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 20:07.