Aprendiendo compartiendo.

Hola a toda la comunidad, debido a que actualmente me encuentro de vacaciones sin goce de sueldo osea sin trabajo y en gratitud a todos los años de aportes que he recibido de esta fabulosa comunidad, me dispongo a subir el código fuente de una proyecto que hice personalmente, con el fin de aprender a configurar todo, es decir siempre que he trabajado, me han dado proyectos ya armados en algunos otros he implementado cosas, pero dicen que la mejor forma de aprender es hacer las cosas, quizas les parezca trilado mi ejemplo pero la idea es compartir lo que he aprendido quizas a alguien mas le pueda servir, se que ya existen millones de ejemplos en la red, pero he visto pocos en español, así que pondre la liga de github donde estará el código y aqui ire anexando post con la explicación de cada proyecto.

las tecnologias a utilizar seran JSF2,Primefaces 3.5, Spring3,Hibernate 3.6, JPA2.0, El motor de BD seleccionado fue MySql.

Se que igual no es lo mas novedoso pero creo que son las tecnologias mas estandar a mi parecer.

TODO ESTO ES PARA DECIR GRACIAS JAVA MÉXICO.!!!!!!

Faltarían palabras para decir todo lo que esta comunidad me ha aportado y esta es una pequeña forma de decir GRACIAS.
en breve estáre subiendo el link tratare de subir todo mi código comentado.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Muy bien

Siempre es bueno tener ejemplos para poder hacer referencia a ellos cuando hay dudas. Y si tu ejemplo lo vas haciendo crecer a partir de dudas que salen de aquí, mejor, porque las respuestas pueden ser simples ligas a partes del proyecto y el que tiene la duda lo puede bajar y armarlo para entender bien cómo funciona, etc.

Imagen de ingscjoshua

Primera entrega

Bueno lo prometido es Deuda y aqui anexo la liga de git hub para descargar el proyecto.
aqui
Explico un poco como esta Organizado.
hay 4 proyectos. todos estan construidos con maven. vere si lo puedo pasar a gradel. es mi primer tarea despues de que esto funcione jeje XD
es el DataAccesCSE aqui el modelo de la base de datos y demas query's etc. cosas las configuraciones a la BD. posteriormente posteo el script de la BD que trabajara en Mysql.
TOCSE Aqui van todos los TO antes llamados DTO, VO etc o en otras palabras los pojos de transporte.
CoreCSE Aqui todo el core de la aplicacion los servicos y demas.
AdminWebCSEAqui el proyecto web xmtl, MB y utilidades Css imganes etc.

Como notaran procure hacer MVC. no se si es la forma mas correcta pero en muchos proyectos lo he visto configurado asi y creo que es mas facil entender donde esta que. asi no hay mucho mas que decir pueden descargar el codigo ya mismo apenas tengo hecho el login y el home. pero la idea es crear toda una aplicacion para administrar usuarios y recursos y cualquier cosa que se me ocurra jeje XD . mas que tener un objetivo de hacer un producto es ir practicando como implementar cosas.

Imagen de ingscjoshua

Script de Bd

Ya esta el script en el mismo proyecto salu2

Imagen de ingscjoshua

si

Ok pues veamos como avanza esto

Imagen de Sr. Negativo

Buen aporte :D !!

Gracias por compartir tu proyecto.

Imagen de avefenix_x

Considero importante en los ejemplos que publicastes.

Que pongas comentario a las clases para explicar que representan cada entidad o anotacion para los que apenas inician a comprender la mecanica de tu configuracion o de este tipo de configuraciones

Tambien seria de importancia un pequeño diagramita de su funcionalidad en terminos generales,para que antes de adentrarse ya sepan en terminos generales de que se trata.
Saludos.

Imagen de javadicto

Un comentario

Primero que nada, gracias por compartir tu proyecto, me parece que esta bien estructurado y las tecnologias y/o Frameworks que decidiste utilizar fueron buenas desiciones, por otra parte me perece que si estas usando JSF2 para la vista deberias utilizarlo a el para los scope y usar a Spring solo como una fabrica de beans para los servicios y DAOs, veo que en tus MB usas anotaciones del tipo:
@Component
@Controller
@Scope(value="session")

Cuando todo eso ya lo tienes en JSF2 y con mas variedad: @ViewScoped, @SessionScoped, @RequestScoped, etc.

Zapatero a tus zapatos (JSF2 - Vista (controller), Spring- Servicios y DAO(JPA, Hibernate, JDBC, etc) )

JSF2 ya cuenta con inyección de dependencias:
@ManagedProperty(value = "#{nombreDelBeanAnotado}")

Por ejemplo para tu MB LoginMB pudiste ahorrarte algunas anotaciones usando las de JSF2:

@ManagedBean(name = "loginMB")
@SessionScoped
public class LoginMB implements Serializable {
       private static final long serialVersionUID = 1L;
        @ManagedProperty(value = "#{usuarioService}")
        private UsuarioServiceImpl usuarioService;
        etc
        etc
        etc
}

Otra cosa, las anotaciones en los servicios de Spring es preferible tenerlas de lado de las implementaciones y no de la interface, esto por si tienes varias clases que implementan a la misma interface,ejemplo: @Service("usuarioService01"), @Service("usuarioService02"), etc

Saludos

Imagen de ingscjoshua

Ok

Me parece un exclente aporte, lo implemente asi porque al leer la referencia de spring, comentan que recomiendan usar esas anotaciones, para inyectar los servicios, revise varias formas de hacerlo y las probe y esta fue la que me funciono como comentas quizas mi contexto estaba mal y hay que corregir eso, me parece excelente ahora que tenga un tiempo lo modifico y lo pruebo,

en este punto. Otra cosa, las anotaciones en los servicios de Spring es preferible tenerlas de lado de las implementaciones y no de la interface, esto por si tienes varias clases que implementan a la misma interface,ejemplo: @Service("usuarioService01"), @Service("usuarioService02"), etc

no se supone que por eso se hace el uso de la interfza? solo haces un bean que apunte a otra clase que lo implemente y sigues usando la misma interfaz?.

Gracias y saludos.

Imagen de ingscjoshua

Ok

Claro lo tendren en cuenta

Imagen de javadicto

Creo que no me di a entender

Si tu tienes una interface y varias implementaciones, cada implementacion con su propia logica segun corresponda, en el MB como sabes que implementacion (logica) debes ejecutar si la notacion la estas dejando en la interface de manera general? Bueno, en otras palabras: Como sabes que implementacion debes inyectar?

Espero haberme explicado mejor, haz la prueba: crea tres implementaciones de la misma interface y trata de inyectar la segunda en tu MB, ahi te daras cuenta el por que la anotacion con su respectivo nombre debe ir en la implementacion.

Saludos.

Imagen de ingscjoshua

Ok

ah ok no lo habia visto desde ese punto de vista suena interesante, lo reviso y lo cambio :)

Imagen de ingscjoshua

Acatualizacion

Hola a todos los comentarios que hicieron ya los implemente en el proyecto jeje espero seguir avanzando estube atareado en otras cosas pero vamos avanzando

Imagen de ingscjoshua

Mas actualizaciones

Hola Anexe una clase que se conecta al JNDI

Imagen de ingscjoshua

Duda

Hola a todos estoy implementando el CRUD de mi aplicación pero tengo un problema.

Tengo un MB que tiene que ser de Scope de Vista

@ManagedBean(name="usuarioMB")
@ViewScoped
public class UsarioPrincipalMB implements Serializable{
        private FacesContext context;
        private FacesMessage facesMessage;
        private String navigation;
        @ManagedProperty(value = "#{usuarioService}")
        private UsuarioServiceImpl usuarioService;
        private UsuarioTO usuarioTO;

El problema esta en que si lo dejo anotado asi cuando intento navegar a mi XHTML me sale la siguiente excepción

javax.faces.FacesException: java.io.NotSerializableException: mx.com.cse.Core.ServiciosImpl.UsuarioServiceImpl
        at com.sun.faces.renderkit.ResponseStateManagerImpl.getViewState(ResponseStateManagerImpl.java:137)
        at javax.faces.application.StateManager.getViewState(StateManager.java:555)
        at com.sun.faces.context.PartialViewContextImpl.renderState(PartialViewContextImpl.java:416)
        at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:288)
        at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
        at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:981)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757)
        at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:391)
        at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
        at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
        at java.lang.Thread.run(Thread.java:680)
Caused by: java.io.NotSerializableException: mx.com.cse.Core.ServiciosImpl.UsuarioServiceImpl
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
        at java.util.HashMap.writeObject(HashMap.java:1001)
        at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:940)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
        at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1346)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1154)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
        at java.util.HashMap.writeObject(HashMap.java:1001)
        at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:940)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
        at com.sun.faces.renderkit.ClientSideStateHelper.doWriteState(ClientSideStateHelper.java:325)
        at com.sun.faces.renderkit.ClientSideStateHelper.writeState(ClientSideStateHelper.java:169)
        at com.sun.faces.renderkit.ResponseStateManagerImpl.getViewState(ResponseStateManagerImpl.java:135)
        ... 36 more
|#]

Y no me mueve al XHTML

esto se soluciona si cambio la anotación y uso

@SessionScoped

Tienen alguna sugerencia?

Todos mis cambios ya estan arriba el problema esta en el MB

UsarioPrincipalMB

Imagen de neko069

A qué metodo de

A qué metodo de UsuarioServiceImpl accedes para llegar a la página? Porque el error baja hasta acá

java.io.NotSerializableException: mx.com.cse.Core.ServiciosImpl.UsuarioServiceImpl
Imagen de ingscjoshua

Es solo

Es solo la inyección

@ManagedProperty(value = "#{usuarioService}")
        private UsuarioServiceImpl usuarioService;
Imagen de ingscjoshua

Otra duda

Hola estoy trantando hacer una clasica pantalla con un filtro de 3 campos, lo que me pregunto es si puedo hacer un named query que reciba los 3 parametros si estan los 3 presentes si no solo 1 o 2 me explico?, la verdad no se si con un namedQuery se pueda o tengo que utilizar otra forma de hacer el query quiero que el query se arme dinamicamente, que me sugieren?

Imagen de neko069

Criterias y condiciones if

Criterias y condiciones if -else.

Imagen de javadicto

Perdon

En el ejemplo que te puse me equivoque, se declara la interface y se inyecta la implementacion, asi:

@ManagedBean(name = "loginMB")
@SessionScoped
public class LoginMB implements Serializable {
       private static final long serialVersionUID = 1L;
        @ManagedProperty(value = "#{usuarioService}") //Aqui se inyecta la implementacion
        private UsuarioService usuarioService; //Aqui se declara a nivel interface
        etc
        etc
        etc
}

Saludos

Imagen de ingscjoshua

Duda con Hibernate

Hola a todos se que ya tiene rato que no subo nada jaja XD sorry he andado medio atareado, la pregunta es, en mi proyecto estoy añadiendo la parte de la búsqueda de los usuarios, y al tratar de ejecutar la consulta al llegar al DAO el hibernateTempleate es null, lo estoy cerrando en algun lado? no que yo sepa al hacer el login todos los DAO tiene el HibernateTempleate inicializado pero al hacer la busqueda este esta null alguno tiene una sugerencia de lo que estoy haciendo mal?, ya he usado hibernate pero esta es la primera vez que configuro todo yo y nose si estoy dejando algo mal o si tengo q estar abriendo y cerrando la session y si es asi como hay que hacerlo?, la idea era esa ir aprendiendo porque casi siempre que llego ya esta todo configurado para usarlo pero sin lugar a dudas cuando tu lo tienes que configurar aprendes mas!!, alguna sugerencia todo mi codigo ya esta arriba en gitHub el metodo que lo intenta ejecutar es este:

  @SuppressWarnings("unchecked")
  public List<UsuarioEntity> usuariosByFilter( UsuarioTO usuario) {
    Criteria criteria=getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(UsuarioEntity.class); // Aqui Falla y me manda NullPointerException.
    if(usuario.getNomUsuario()!=null &&!usuario.getNomUsuario().equals("")){
      criteria.add(Restrictions.like("nomUsuario",usuario.getNomUsuario()+"%"));
    }
    if(usuario.getApellidoPatero()!=null&& !usuario.getApellidoPatero().equals("")){
      criteria.add(Restrictions.ilike("apellidoPatero", usuario.getApellidoPatero()+"%"));
    }
    if(usuario.getFechaCreacion()!=null){
      criteria.add(Restrictions.le("fechaCreacion",usuario.getFechaCreacion()));
    }
    return criteria.list();
   }
Imagen de ingscjoshua

tengo mis unitest

En mis pruebas unitarias esto no falla asi que aun mas me siento confundido ya que las pruebas las pasa jjeje y no se porq en el web ya no funciona y se muere el HibernateTempleate

Imagen de CuicaJavier

Gracias por compartir tu Proyecto

En lo que pueda ayudare!