Problema al configurar Spring + JSF 2.0 + Maven +jetty +hibernate

1,639 views
Skip to first unread message

Luís Soto

unread,
Jun 7, 2011, 10:18:37 AM6/7/11
to jav...@googlegroups.com
Saludos Amigos de la comunidad, 

Como ya muchos sabrán el JSF 2.0 ya esta entre nosotros razón por la cual me plantee la tarea de configurar un proyecto con estas tecnologías (Spring + JSF 2.0 + Maven +jetty +hibernate)

Todo funcionaba bien individualmente, el spring con el hibernate y el JSF2.0 con el jetty, cada cual por su lado, el problema se me presenta cuando intento consumir un bean de spring desde el managedBean de JSF 2.0 

He revisado cualquier cantidad de paginas, enlaces, y foros dejandome como resultado, 1 error diferente luego de ver cada 1... :S

Al momento tengo este 

La aplicación no se ha inicializado correctamente durante el inicio, no se encuentra la fábrica: javax.faces.application.ApplicationFactory "

Me parece un error de dependencia, pero con una semana de ensayos y error ya consigo entender muchas cosas.

el pom de mi proyecto 

************************************ POM.XML Padre *********************************************

<?xml version="1.0" encoding="UTF-8"?>
    <modelVersion>4.0.0</modelVersion>
    <groupId>ve.gob.ivss</groupId>
    <artifactId>ActualizadorEmpleador</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Actualizador Empleador - Build</name>
    <modules>
        <module>modelo</module>
        <module>web</module>
     <module>UtilIvss</module>
  </modules>
<!-- repositorios de las dependencias faltantes para proyecto web 
se declaran dos repositorios. Esto es necesario porque los jar todavía no están disponibles en el repositorio público de ibiblio. Más arriba vemos como se declaran las dependencias: por un lado incluimos tanto el api (paquetes javax.faces) como la implementación (paquetes com.sun.faces); ambos son necesarios. También se puede ver como se incluye el validation-api e hibernate-validator. El primero es la interfaz del JSR-303 y el segundo es la implementación que da Hibernate a este JSR. Este JSR-303 ya está dentro de JSF 2 y nos permite, mediante anotaciones, especificar que validaciones queremos hacer sobre nuestros beans (más adelante veremos ejemplos de esto).
--> 
<properties>
    <org.springframework.version>3.0.5.RELEASE</org.springframework.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
<!-- Repositorios --> 
<repositories>
    <repository>
        <id>maven2-repository.dev.java.net</id>
        <name>Java.net Repository for Maven</name>
        <url>http://download.java.net/maven/2</url>
    </repository>


    <repository>
<id>jboss-public</id>
<name>JBoss Public Nexus Repository</name>
    </repository>
</repositories>
<!-- END --> 
<!-- Desarrolladores --> 
<developers>
  <developer>
    <name>Luis Soto</name>
  <id>lsoto</id>
  <email>ls...@correo.org</email>
  <organization>personal</organization>
  <roles>
  <role>Developer</role>
  </roles>
<timezone>-3</timezone>
  </developer>
 </developers>
<!--Creacion del javadoc con maven -->
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.4</version>
<configuration>
<doclet>gr.spinellis.umlgraph.doclet.UmlGraphDoc</doclet>
<docletArtifact>
<groupId>gr.spinellis</groupId>
<artifactId>UmlGraph</artifactId>
<version>4.4</version>
</docletArtifact>
<additionalparam>
-inferrel -inferdep -quiet -hide java.*
-collpackages java.util.* -qualify
-postfixpackage -nodefontsize 9
-nodefontpackagesize 7 -operations -constructors
-visibility -types -link
</additionalparam>
</configuration>
</plugin>
   <plugin>
       <groupId>org.codehaus.mojo</groupId>
       <artifactId>cobertura-maven-plugin</artifactId>
       <inherited>true</inherited>
      </plugin>

      <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-project-info-reports-plugin</artifactId>
     </plugin>
          <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
          </plugin>
</plugins>
</reporting>
<!-- END Reporting -->
</project>

*********************************************************************************************

******************************************* POM MODULO WEB ********************************************
<modelVersion>4.0.0</modelVersion>
<groupId>ve.gob.ivss</groupId>
<artifactId>web</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Actualizador Empleador - FrontEnd</name>

<!--configuracion del padre -->
<parent>
<groupId>ve.gob.ivss</groupId>
<artifactId>ActualizadorEmpleador</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<!-- FIN -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Dependecias JSF 2 -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.1</version>
</dependency>
<!-- FIN JSF 2 -->
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>2.2</version>
</dependency>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework.version}</version>
</dependency>

<!-- Fin Spring MVC -->



<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<artifactId>modelo</artifactId>
<groupId>ve.gob.ivss</groupId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>ve.gob.ivss.commons</groupId>
<artifactId>UtilIvss</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<finalName>web</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<scanIntervalSeconds>3</scanIntervalSeconds>
</configuration>
</plugin>
</plugins>
</build>
</project>

**********************************************************************************************

********************************************* WEB XML  ***********************************************
<?xml version="1.0" encoding="UTF-8"?>
id="WebApp_ID" version="2.5">
<display-name>Actualizador Empleador</display-name>
<!-- context Locations -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/ve/gob/ivss/web/config/applicationContext.xml
classpath:/ve/gob/ivss/impl/config/spring-service.xml      <!-- Servicios spring --> 
classpath:/ve/gob/ivss/impl/config/spring-dao.xml           <!-- DAO spring --> 
</param-value>
</context-param>
<!-- Cambiar a "Production" cuando este listo para deploy -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<!-- end Context locations Listener que tiene que estar para que funcione 
spring -->

<!-- Servlet de Spring -->
<servlet>
<servlet-name>ViewRendererServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.ViewRendererServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Servlet de JSF -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!--Mapping jsf 2.0 -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>./faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<!-- Welcome page -->
<welcome-file-list>
<welcome-file>./faces/test.xhtml</welcome-file>
</welcome-file-list>
</web-app>


**********************************************************************************************************


En el proyecto "modelo" tengo funcionando el spring y en el "UtilIvss" estoy haciendo una clase para intentar levantar el contexto de spring.

si necesitan mas info avisen y de antemano les agradezco cualquier ayuda ya que esto me tiene ya en el abismo de la frustración


Muchísimas Gracias de antemano, 

--
Atentamente,

Luis Soto

pablo.a....@gmail.com

unread,
Jun 7, 2011, 11:58:57 AM6/7/11
to jav...@googlegroups.com
Te falta este listener en el web.xml

<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

Saludos

2011/6/7 Luís Soto <luisso...@gmail.com>
--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.

Luís Soto

unread,
Jun 7, 2011, 12:29:46 PM6/7/11
to jav...@googlegroups.com
Saludos Pablo, Gracias por tu ayuda. 

Ya agregue eso al web.xml y pues nada me cambio el error al siguiente: 

GRAVE: An error occured while initializing MyFaces: javax.faces.view.facelets.FaceletCacheFactory
java.lang.IllegalArgumentException: javax.faces.view.facelets.FaceletCacheFactory
        at javax.faces.FactoryFinder.validateFactoryName(FactoryFinder.java:657)
        at javax.faces.FactoryFinder.setFactory(FactoryFinder.java:331)
        at org.apache.myfaces.config.FacesConfigurator.setFactories(FacesConfigurator.java:477)


  • No se si tenga que ver algo con el plugin de jetty  Lo estoy levantando con el comando: mvn jetty:run-exploded
  • O si sera que falta de alguna dependencia.



--
Atentamente,

Luis Soto

002.gif

pablo.a....@gmail.com

unread,
Jun 7, 2011, 2:07:09 PM6/7/11
to jav...@googlegroups.com
Cómo apareció org.apache.myfaces en el stacktrace si todas las dependencias que tenes son de la RI? Fijate que no esté poniendo un jar que no es en el classpath.

Saludos.
002.gif

Luís Soto

unread,
Jun 7, 2011, 3:07:06 PM6/7/11
to jav...@googlegroups.com
Creo que de acá: 
Este proyecto es el que estoy creando para poder comunicar los beans de jsf con el spring

Y creo que acá me equivoque tontamente,


********************************************* POM UtilIvss **********************************

<?xml version="1.0"?>
<project
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>ActualizadorEmpleador</artifactId>
<groupId>ve.gob.ivss</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>ve.gob.ivss.commons</groupId>
<artifactId>UtilIvss</artifactId>
<version>1.0-SNAPSHOT</version>
<name>UtilIvss</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- prode -->

<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.tomahawk</groupId>
<artifactId>tomahawk</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<version>1.5</version>
</dependency>
<!-- Dependecias JSF 2 -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.2-b10</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.2-b10</version>
</dependency>
<!-- FIN JSF 2 -->
</dependencies>
</project>

**********************************************************************************************
Modificado lo anterior :

INFO: Inicializando Mojarra 2.0.1 (FCS b02) para el contexto '/web'
2011-06-07 14:32:51.725:INFO::Started SelectChann...@0.0.0.0:8080
[INFO] Started Jetty Server
[INFO] Starting scanner at interval of 5 seconds.

Sos Grosso papá...

El problema ahora es que no me encuentra el bean de spring cuando hago el llamado me tira NullPointer... Cosa que iré verificando en el transcurso de la tarde

Para no perder la costumbre : Alguna idea ?


Muchas Gracias :D

"En el nombre de pom padre, pom hijo y el plugin Jetty de maven"
002.gif

Luís Soto

unread,
Jun 7, 2011, 3:33:36 PM6/7/11
to jav...@googlegroups.com
En resumidas cuentas el problema desapareció gracias a varias cosas (errores de capa 8)

1.- Colocando estas lineas en mi web.xml
        <listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
2.- Las dependencias de los 2 proyectos tenían una pequeña diferencia (vicio de ctrl+c y ctrl+v)

3.- Limpie mi repo (.m2) y luego volví a bajar las dependencias necesarias (no era necesario pero me ahorre unos Kbs en disco)

Muchas Gracias Por La ayuda y colaboración Prestada.




--
Atentamente,

Luis Soto

002.gif

pablo.a....@gmail.com

unread,
Jun 7, 2011, 3:50:23 PM6/7/11
to jav...@googlegroups.com
El tema del contexto de spring que no te resuelve los beans, en una época necesitabas definir un VariableResolver (o ElResolver) en el faces-config.xml. Ahora con JSF 2.0 no se como es el tema, pero no creo que te cueste mucho encontrarlo.
002.gif

Luís Soto

unread,
Jun 7, 2011, 4:02:55 PM6/7/11
to jav...@googlegroups.com
No, no ya esta... te comento por lo menos yo lo hago así

En un modulo aparte (Utils) coloque una clase abstracta que llame containerBean, en la cual
cargo el contexto el contexto de spring, busco los beans de spring los meto en un arreglo y listo 
los tengo disponibles solo de llamarlos y castearlos según mi clase.

Solo con hacer una clase que extienda de esta clase puedo llamar a un servicio usando el containerBean y claro ese managedBean tendra posibilidad de usar el servicio... Ese código lo encontré por ahí en san google y esta muy bueno.


En mi caso solo use lo que necesitaba y tengo solo 2 clases por ahora pero cumple la función necesaria (llamar un bean de spring y usarlo).

Como todo, a gusto del consumidor.

En un futuro haré crecer este modulo un poco más :-)
Nuevamente Gracias por la ayuda.
002.gif

pablo.a....@gmail.com

unread,
Jun 7, 2011, 4:26:14 PM6/7/11
to jav...@googlegroups.com
2011/6/7 Luís Soto <luisso...@gmail.com>

No, no ya esta... te comento por lo menos yo lo hago así

En un modulo aparte (Utils) coloque una clase abstracta que llame containerBean, en la cual
cargo el contexto el contexto de spring, busco los beans de spring los meto en un arreglo y listo 
los tengo disponibles solo de llamarlos y castearlos según mi clase.

Uggh, hay cosas que mejor no preguntar :P

Que te ande bien.
Saludos.
Reply all
Reply to author
Forward
0 new messages