faces - ¿Elegir un Java Web Framework ahora?
jsf vs jsp (17)
¿La solución basada en el portal encaja bien con este problema?
Personalmente, me mantendría alejado de las grandes soluciones de Portal (a menudo son asesinos de productividad). Gatein embargo, he oído cosas buenas sobre Gatein pero no tengo ninguna experiencia real con eso.
Cualquier información sobre el uso de "Spring Roo" o "Play" será muy útil.
Acerca de Spring Roo, he leído respuestas anteriores como Spring roo Vs (Wicket and Spring) y otras cosas a través de Internet, pero todavía no estoy convencido (tal vez no lo entiendo), no estoy seguro de su madurez y, más importante, realmente me pregunto qué está haciendo SpringSource con Grails y Roo (no, Grails vs Roo, ¿por qué SpringSource está impulsando dos tecnologías muy similares? no me convence de que ambos sobrevivan).
No puedo decir mucho sobre Play. He visto la demostración como todo el mundo, pero me gustaría leer los comentarios de la vida real. Hasta entonces, esperaré.
Encontré publicaciones similares (...). ¡Las cosas seguramente han cambiado mientras tanto!
Sí y no :) Pero entremos en el infierno de los marcos de presentación: no hay una sola respuesta a su pregunta (como hace un año), hay docenas de marcos por allí y ningún ganador claro. Solo por citar algunos:
- JSF: muchos escépticos sobre este marco basado en componentes, incluyéndome a mí, así que no soy el mejor para hablar de ello, pero ...
- JSF 2 (+ CDI / Weld): los escépticos de JSF son alentados ( por Gavin King ) a "echar un segundo vistazo". De hecho, creo que JSF 2 es una gran mejora, especialmente con CDI, pero ... todavía es bastante nuevo (entiéndalo, carece de feeback). Si quieres adoptar Java EE 6, échale un vistazo.
- Wicket: otro marco basado en componentes que está recibiendo más atención. En general escucho cosas buenas sobre esto: más simple que JSF, buen diseño, alta capacidad de prueba, diseñador de HTML amigable, etc. Te puede gustar.
- Tapiz: simplemente no lo hagas (ver ¿Por qué dejaste de usar Tapiz? )
- Struts 2, Spring MVC, Stripes: marcos basados en acción. Todo decente y cubrirá sus necesidades (personalmente, me gusta Stripes y su convención sobre el enfoque de configuración, vea Stripes vs. Struts2 para tener una idea de esto).
- GWT, Flex, Grails: estos no son quizás lo que estás buscando. Realmente no puedo hablar sobre (versiones recientes) de Flex y GWT, pero sé que Grails have some fans .
En realidad, sugiero echar un vistazo a las presentations Matt Raible, realmente hizo un gran trabajo al comparar los marcos web, mostrando sus fortalezas y debilidades, recopilando datos y números, mostrando tendencias ... Recomiendo:
- Comparando JSF, Spring MVC, Stripes, Struts 2, Tapestry y Wicket (todavía no obsoleto)
- Marcos web del futuro: Flex, GWT, Rails y Grails (solo para probar las alternativas)
- Comparando Web Frame Kick-Ass (este es el más reciente)
Realmente, eche un vistazo a estas presentaciones, lo ayudarán a encontrar un marco apropiado (no hay una respuesta única, pero puede restringir la elección por eliminación) y podrían cambiar su punto de vista.
estamos en la etapa de planificación de la migración de un sitio web grande que se basa en un marco mvc desarrollado a medida a un marco web basado en Java que proporciona soporte integrado para ajax, contenido de medios enriquecidos, mashup, diseño basado en plantillas, validación, máximo html / separación de código java. Grails parecía una buena opción, sin embargo, no queremos usar un lenguaje de scripting. Queremos seguir usando java. El diseño basado en plantillas es una preocupación principal, ya que pretendemos utilizar esta aplicación web con múltiples sitios web con funcionalidades similares pero con un aspecto radicalmente diferente.
¿La solución basada en el portal encaja bien con este problema?
Cualquier información sobre el uso de "Spring Roo" o "Play" será muy útil.
Encontré publicaciones similares a this , pero tiene más de un año. ¡Las cosas seguramente han cambiado mientras tanto!
EDIT 1: ¡ Gracias por las excelentes respuestas! Este sitio está convirtiéndose en la mejor fuente para información de programadores en la trinchera. Sin embargo, esperaba más información sobre el uso de un portal-cms duo. Jahia se ve bien. Algo similar?
¡Echa un vistazo a RESThub , que sigue los mismos principios que Juega! pero implementado al reutilizar algunos frameworks / herramientas de grado empresarial como Maven 3 / Spring 3 / Jersey / jQuery.
RESThub es muy perturbador en comparación con otros marcos, ya que se trata de un conjunto de herramientas de pila completa, pero sin ningún servidor MVC o framworks basados en servlets. En su lugar, usa una GUI basada en la interfaz de usuario de jQuery que utiliza servicios web JAX-RS (REST) y un sistema de plantillas de Javascript basado en embeddedJs.
Los servidores son apátridas y utilizamos HTML5 sessionStorage para mantener la sesión en el lado del cliente. Este enfoque es diseño para RIA y escalabilidad.
Se proporcionan algunas aplicaciones de demostración (incluso si están en construcción).
A diferencia de otras respuestas, me gustaría destacar las desventajas (en mi humilde opinión) de los marcos web populares:
JSF2 : lanzado y ya añejado. Todavía quedan pocas noticias / artículos / publicaciones en blogs / experiencias. Soy escéptico Todavía estamos esperando la próxima versión principal de Richfaces / Icefaces, que es totalmente compatible con jsf 2, actualmente solo se pueden descargar compilaciones alpha.
Struts 2 : parece ser solo una buena cosa si todavía dependes de los puntales y quieres refacturar la mayor parte de tu código. De lo contrario: no.
GWT - No me gusta el enfoque de una sola página y java-> javascript. No estoy seguro de si una sesión: múltiples vistas / ventanas se pueden lograr fácilmente. Para mí, este marco debería usarse para usuarios masivos de aplicaciones de Internet ricas en una sola ventana.
Wicket : enfoque agradable, pero un poco detallado y con menos documentación disponible (excepto el buen wicket en el libro de acción, pero esto solo cubre 1.3). Además, para mí carece de grandes proyectos que se basan en él. Y actualmente no puedo ver hacia dónde va el camino del wicket o si ya se ha llevado a un callejón sin salida.
Spring MVC : todavía no lo intenté, pero debe incluir muchos tarros (spring mess) en su classpath para trabajar con este framework correctamente. Y depende de JSP (en la mayoría de los proyectos), que considero ya muerto. Y obtienes solo un framework MVC puro, todas las demás cosas (ajax y otras) tienen que ser implementadas / integradas.
Stripes : un framework MVC pequeño y agradable, pero con demasiada menos documentación, demasiados commits / committers, muy pocos lanzamientos, menos soporte de la industria y menos actividad en la lista de correo.
También me da curiosidad si me perdí un marco importante (dejé Tapestry intencionalmente) que podría ser una opción para ti (y también para mí).
Algo que merece más que solo una bala son los marcos de RIA basados en jugadores. Ex. Adobe Flex + Java (por supuesto, esto puede depender un tanto de si su "sitio" es realmente un "sitio" o más como una "aplicación", no haría un sitio de blog en Flex).
ajax,
En el sentido de AJAX como una palabra de moda, Flex normalmente usa AMF (un protocolo binario que es más eficiente que los protocolos utilizados por las aplicaciones AJAX), aunque también puedes hacer estrictamente cosas AJAX con Flex. Así que Flex admite AJAX, pero también admite "mejor que AJAX".
contenido multimedia enriquecido, mashup,
Siendo que Flex se ejecuta en la plataforma Flash de "máquina virtual", creo que se necesita agregar muy poco.
diseño basado en plantillas,
No estoy seguro de lo que está obteniendo exactamente, pero suena como Flex mxml.
validación,
Compatible por supuesto, aunque puede decidir hacer algunas cosas personalizadas si quiere ser elegante. (No es que tengas que hacerlo.) Lo bueno es que puedes ser tan sofisticado como quieras, o no.
máxima separación de código html / java
No se puede separar más utilizando un enfoque de desarrollo de "máquina virtual" como Flex / Silverlight / JavaFX. Esto no solo le permite mantener su código de presentación separado de su capa de acceso a datos y lógica del lado del servidor, sino que asegura que estén separados. ''Virtualizar'' su entorno de desarrollo le ofrece compatibilidad entre navegadores, una plataforma de destino coherente, sin preocupaciones sobre los navegadores nuevos o nuevos lanzamientos de exploradores que rompan su aplicación, capacidades de depuración de tipo java de primera línea y un producto final de aspecto más profesional / impresionante .
Creo que lo que estás buscando es algo cercano a Jahia. Es compatible con GWT, Mashups, contenido multimedia, etc.
http://www.jahia.org/cms/lang/en/home/Jahiapedia/Jahia_Templates http://www.jahia.net/downloads/jahia/jahia6.0.0/readme/index.html
Eche un vistazo a ItsNat
ItsNat es básicamente un navegador Java W3C en el servidor, increíblemente simple (DHTML en el servidor), promociona aplicaciones intensivas de interfaz de una sola página para AJAX
El juego es muy similar a ROR, una versión de ROR en java
Ext GWT + Spring
He estado usando Spring 3 y Jquery por un tiempo, pero escuché acerca de Play y le di una oportunidad. Me gusta mucho, Play encaja perfectamente entre algo así como PHP y los frameworks Java de trabajo pesado como Spring.
Las cosas que más me gustan del juego son:
- Es muy fácil conseguir que una aplicación de juego despegue, tienes que ir muy lejos con la codificación y la configuración para obtener una aplicación simple de crud en la pantalla con Spring (aunque Spring 3 lo ha hecho mucho más fácil).
- Spring Security es increíble, pero a costa de la complejidad. El módulo de seguridad de Play es muy simple y cubre las necesidades del 90% de las aplicaciones que existen.
- Puedes hacer un cambio de código y presionar Actualizar en el navegador para ver el cambio como con PHP en lugar de tener que hacer todo el proceso de redistribución con marcos basados en Servlet.
- Los mensajes de error se muestran muy bien y no tan crípticos la mayor parte del tiempo. Play todavía necesita trabajar en su manejo de errores
- Hay un mecanismo de complemento para Play que es bastante simple.
- La persistencia de objetos se hace muy bien en que una base de datos en memoria y JPA viene con el marco de modo que no hay configuración de herramientas de persistencia de objetos externos. Pasar de la base de datos en memoria a un RDBMS real es un cambio de una línea en el archivo de configuración.
- La configuración de MVC está muy bien. La clase Model que amplía para crear sus objetos de dominio se integra con el administrador de entidades JPA. No son solo los de POJO.
- La asignación de direcciones URL a los controladores es simple y flexible, y todo en un archivo de "rutas".
- Cada vez que creas un proyecto, Play maneja todas las dependencias de jar y Play tiene una utilidad para eclipse-ify (o cualquier IDE que te guste) del proyecto para que importe directamente en tu IDE favorito.
Cosas que no me gustan de Play
- La documentación aún no está completa, aún existen muchas características no documentadas.
- El marco es el servidor, por lo que debe dedicar un puerto a cada aplicación. Creo que alguien está trabajando en un complemento de host virtual, pero todavía no lo he visto en acción.
- Es joven, el proyecto es increíble y la tecnología es increíble, pero realmente necesita más desarrolladores. Me encantaría dedicarle algo de tiempo, ya veremos.
He tenido un gran éxito con JAX-RS . Es el único Java Web Framework que tiene algún tipo de especificación JSR y múltiples implementaciones distintas de las especificaciones de servlet y portlet (aunque esto puede ser algo malo).
Una de las cosas malas y buenas de Java es que puedes elegir y combinar frameworks (Python también tiene esta característica / problema). Es bueno porque no tienes que poner todos tus huevos en una sola canasta.
Aquí hay una receta general de la pila de aplicaciones web de Java:
Javascript / Flash + Solicitud / Manejo de respuesta + Inyección de Dependencia + Persistencia
Javascript: JQuery, Prototype, Dojo
Solicitud / respuesta: Spring MVC, Stripes y mi JAX-RS favorita (Jersey, Apache CXF)
Inyección de Dependencia: Spring, Guice
Persistencia: JPA (Hibernate, almacenamiento de la aplicación Google), Hibernate, JDO y más.
También tuve un gran éxito al usar AspectJ para hacer que Java "chupa menos". Al usar los mixins ITD de Spring''s @Configurable y AspectJ puedes obtener Rails como objetos Domain (esto es de hecho lo que hace Roo pero no necesitas que Roo haga esto).
JSF es un bonito framewrok, pero JSF 1.2 careció de visión en los próximos años desde su lanzamiento. JSF 2.0 parece prometedor y tiene muchas cosas nuevas añadidas para JSF 1.2 como soporte para ajax, facelets, soporte de anotación y convenciones predeterminadas (menos XML), construcción fácil de componentes que 1.2.
También se integra bien con Spring, si le preocupa el soporte de DI.
La mejor opción para mí es Wicket . Separación clara de marcado y código java. Muy fácil de escribir y usar componentes. Ajax fácil de usar, capacidad de prueba. Puede depurar directamente en sus páginas / componentes y no recibir mensajes de error crípticos de su implementación de JSF;)
También hay una buena wicket de comparación <-> JSF en términos de rendimiento
Las tres mejores opciones para mí son (alfabéticamente):
Ellos:
- tener buen apoyo ajax
- te permite hacer sitios web reales, no aplicaciones (como GWT)
- estable, bien documentado, ampliamente utilizado
- MVC
- Java puro
- fácil integración con Spring como middleware
Tal vez un poco tarde para el show, pero debo mencionar a Vaadin . La programación se realiza en Java exclusivamente, con un enfoque basado en componentes. La comunicación entre el cliente y el servidor se trata más de la interacción del usuario que del transporte de datos, toda la lógica empresarial reside en el servidor.
Yo secundaría la recomendación de Spring. No soy un gran admirador de GWT, no creo que Java -> Javascript crosscompiler todavía esté allí. Estoy trabajando en una aplicación AJAX que usa Spring en el servidor y jQuery en el cliente. Aunque técnicamente no existe un soporte "listo para usar" para jQuery, la implementación de un Spring-MVC AjaxView es completamente simple y tomó alrededor de 25 líneas de código.
Hace un par de años se usó el software del portal " Backbase ", que entonces no estaba muy maduro. Pero fue bueno y fácil para el desarrollo.
He encontrado que las stripes son realmente efectivas y sorprendentemente livianas ... su objetivo es ser más liviano que los puntales . He escuchado de amigos que son desarrolladores web de tiempo completo que JSF no vale la pena, aunque no tengo experiencia de primera mano, y no puedo respaldarlos con ejemplos (!).