Estoy planeando comenzar un nuevo proyecto y estoy mirando los frameworks web de Java más modernos. Decidí construir mi aplicación alrededor de Guice, y es probable que use un ORM muy ligero como Squill/JEQUEL/JaQu o similar, pero no puedo decidir sobre el framework web. ¿Cuál se ajustaría mejor en un entorno tan ligero? ¿Y cuál se integra mejor con Guice?¿Qué estructura web de Java se ajusta mejor con Google Guice?
Respuesta
Tengo un poco de experiencia en este tema, ya que comencé a programar un nuevo proyecto en noviembre. El proyecto está en una etapa tardía ahora.
Para mí, las siguientes directrices de diseño eran importantes:
- Utilice una pila de tecnología moderna que es a la vez divertido de usar y será de uso general en el futuro.
- Reduce el número de artefactos del proyecto: utiliza anotaciones/código Java donde tenga sentido, omite XML.
- Use marcos que son de código abierto
- Tener una comunidad activa
- no se encuentran en estadio alfa
- son ligeros
- evitar la duplicación de conceptos
- puedo explicar los conceptos en que a mis dos compañeros desarrolladores que, a pesar de ser buenos programadores, nunca han usado dependency injection (DI) o frameworks web.
- puede servir como una base para futuros proyectos techological
Google Guice como un contenedor DI era una opción obvia - claramente la contianer DI más bien pensado, con los desarrolladores brillantes y una buena comunidad. Cumple todos los puntos mencionados anteriormente.
Así que configuré mi stack de tecnología básica. Comenzó con Guice, agregó Hibernate para persistencia (junto con warp-persist y warp-servlet). Luego escribí algunos DAO básicos que seleccionan algo.
Intenté hacer lo siguiente: agregué un framework web diferente a eso.
- XSLT con xStream usando servlets HTTP normales
- JSF- MyFaces
- Apache Wicket
- warp-widgets
he creado una página sencilla con una mesa, poblada por la DAO, cabeceras y un campo de texto con los cuatro marcos.
Estos fueron mis hallazgos al comparar los cuatro marcos.
XSLT y XStream es una especie de enfoque hardcore. No es realmente un marco, sino una tecnología viable completamente apátrida para aplicaciones de alto rendimiento. Esta fue de lejos la forma más rápida de servir la página de prueba. En modo de depuración, 3 ms en localhost contra aproximadamente 30-50 ms con los otros framworks.
La integración de Guice fue relativamente sencilla y buena utilizando warp-servlet que me permitió inyectar en servlets e inyectar httprequest, httpresponse, session en otros objetos, sin pasarlos. Desventajas: no hay comunidad en absoluto, ya que soy la única persona que consideraría esta pila. - sin componentes listos para usar.
Luego eché un vistazo a JSF y Guice: por supuesto, es posible poner el inyector en el contexto de servlet y usar guice como un localizador de servicio. Con el enfoque directo, es imposible inyectar los granos de respaldo en otro lugar. El uso de una resolución de resolución personalizada resuelve esto parcialmente, pero luego pierde la integración con IDE en sus archivos JSF además tendrá que usar feo FQN para sus beans de respaldo, o crear una cadena-> Guice key mapping en alguna parte. Ambos son feos como:
- Ventajas: buena comunidad, muchos desarrolladores en el mercado de trabajo (no hay criterios para mí). No te despedirán por elegir JSF si algo sale mal.
- Desventajas: trae su propio mecanismo Inversion of control (IoC) que choca conceptualmente con Guice.
warp-widgets: Creé mi ejemplo simple usando esto para divertirme; es etapa alfa temprana. Fue agradable de usar y sus componentes son fáciles de implementar y reutilizar por mi cuenta. Su objetivo es proporcionar HTML de tipo seguro con la integración perfecta de Guice. Dado que parecía que solo tenía un desarrollador activo en ese momento, que ahora está trabajando de forma convincente en Guice 2.0, diría que la comunidad es casi inexistente. Funcionó a las mil maravillas, era razonablemente rápido, pero hubiera sido probador alfa. Eso fue simplemente demasiado arriesgado para mí considerarlo para un proyecto comercial.
Apache Wicket: este proyecto me sorprendió por primera vez con wicket-ioc y wicket-guice juntos en la descarga principal. La inyección de constructores en páginas web no es posible, solo establece + campo. La inyección en las páginas web de Wicket es fácil, simplemente agregue @Inject
a los campos que desea llenar, pero se supone que usted no debe comprender how it works in background. Cosas complicadas sucediendo. La inyección de páginas web es teóricamente posible, pero no la he usado una vez, ya que esto imposibilita el uso de URL montadas, además de que interferirá con el estado persistente/serializado. Los miembros inyectados de las clases se tratan de forma transparente con la serialización de páginas web, que es necesaria para habilitar el respaldo del navegador. Wicket utiliza cero artefactos externos: solo una pequeña configuración del URLs en una clase de aplicación. Entonces, toda la configuración se realiza en Java, lo que se adapta bien al modelo de Guice. Separación clara de HTML y Java. Es de código abierto al igual que la mayoría de los componentes que son numerosos y de buena calidad. Está disponible desde 2005 (?) Y es un proyecto Apache de alto nivel. Aunque es un marco rico en características, su API es razonablemente compacto (todas las clases básicas caben en un solo JPEG en mi pantalla). A diferencia de otros, no trae un mecanismo de IoC en sí mismo, sino que piensa en IoC como un servicio que puede ser proporcionado por Spring Framework, Guice, etc. y esa filosofía lo hace superior w.r.t. Integración de Guice ¿He mencionado el soporte Ajax realmente inteligente y fácil?
Marcos no evaluados en profundidad: tapices5 - trae su propio IoC. Seam: no es un framework en sí mismo, sino un metaframwork que normalmente coincide con Spring, JSF. Hibernar. (Aunque Spring puede ser reemplazado teóricamente por Guice.)
Resumen: del framworks evaluado, Apache Wicket fue el claro ganador - con respecto a la integración de Guice + todos los otros criterios mencionados.
Además de nosotros dos, algunas otras personas have had this problem before.
Un buen contenedor web liviano es Simple. Es extremadamente eficaz y se puede utilizar con marcos como Restlet y Jersey.
Guice + DI framework == PITA. Jersey compite/interfiere con la inyección de dependencia y los desarrolladores de ambos nunca llegaron a una solución razonable. Hay puentes y kludges y hacks, pero Jersey no juega bien con DI. – toolbear
, por el contrario, Jersey tiene su propia abstracción para DI, por lo que es fácil conectar un proveedor de DI. Jersey + Guice funciona muy bien para nosotros. – Eelco
Wicket has a Guice module built in, que no he usado (pero he usado Wicket bastante, y me gustó).
problema con wicket es que es un marco no administrado, es decir, usted está a cargo de crear instancias de componentes. la forma en que manejamos esto bajo la capucha está solicitando la inyección en un oyente de instanciación de componentes. funciona, pero definitivamente no * el * framework web para guice. –
He aquí un artículo sobre integrating Guice with Stripes
The Play framework es una agradable. It has Guice support (tampoco lo he probado todavía).
El Mojave MVC Web Framework es un marco muy simple y liviano que incorpora Guice.
- 1. ¿Qué framework Java funciona mejor con Google Web Toolkit?
- 2. Mejor estructura de la estructura del proyecto web de Java
- 3. Manejando bien con Google Guice
- 4. Configurando Apache Shiro con Google Guice Servlet
- 5. Uso de Netbeans RCP con Google Guice
- 6. Gestión de por vida con Google Guice
- 7. ¿Está activo Google Guice?
- 8. Google Guice: Proveedor con los parámetros
- 9. ¿Cómo uso Jersey ExceptionMapper con Google Guice?
- 10. Características ocultas de Google Guice
- 11. Uso de Google Guice para inyectar propiedades de Java
- 12. ¿Qué estructura web funciona bien con Scala en Google App Engine?
- 13. ¿Qué marco de desarrollo web funciona mejor con Google App Engine?
- 14. JAVA - La mejor estructura de datos adecuada
- 15. ¿Qué hay de nuevo en Google Guice 3?
- 16. Guice con los padres
- 17. ¿Cómo se hacen sitios web con Java?
- 18. ¿Inyectar Util Class con Google Guice vs static Methods?
- 19. ¿Qué patrón se ajusta entre una fachada y un DAO?
- 20. ¿Qué estructura web de Perl debería usar?
- 21. La inyección colección de clases con Guice
- 22. ¿Por qué no hay ningún archivo de configuración para la inyección de dependencia con Google Guice?
- 23. ¿Cómo vincular una implementación a algunas interfaces con Google Guice?
- 24. parametrizada con Guice
- 25. Custom Guice Scope, o un mejor enfoque?
- 26. ClassNotFoundException con Guice 2.0
- 27. Uso de Guice 3 con JAX-WS en Java 6 fuera del contenedor web
- 28. ¿Para qué se utiliza "java web start"?
- 29. Servicios web con Google App Engine
- 30. Guice vs AspectJ
Me gustó la lista de verificación, pero no creo que warp - *** tenga sentido. – Nachiket