Recomendación de Java web Framework

Desarrollo productos del lado del servidor utilizando sitios web como interfaces. La lógica subyacente suele ser compleja, sin embargo, las interfaces de usuario son MUY simples (la mayoría de ellas son operaciones CRUD simples en tablas mysql. La consulta más complicada generalmente requiere algunas uniones, y todo se realiza normalmente sin estado, excepto para el usuario). cartas credenciales).

Hasta ahora, he diseñado mis proyectos de esta manera:

  • PHP / HTML5 / JScript: un sitio web simple para acceder a datos/opciones de configuración. NO tiene acceso directo al modelo. Necesita consultar la API (para minimizar el impacto de los cambios). Normalmente dejo que el usuario obtenga y procese los datos de la API usando JavaScript.
  • PHP Api / MySQL: una API REST de PHP conectada al modelo mysql usando mi clase de acceso a la base de datos personalizada (la hice para mi primer proyecto y, después de algunas actualizaciones, generalmente cubre la mayoría de las consultas del proyecto). La Api alimenta datos a nuestros propios controles de formulario de JavaScript y a las GUI personalizadas de los clientes. Prefiero asegurar la consistencia del modelo dentro de la base de datos al normalizarlo y usar disparadores simples para mantener la consistencia, evitando algunas ediciones peligrosas en bases de datos complejas, por lo que lo más complejo que hace el modelo PHP son consultas de búsqueda o transacciones complicadas. Algunas búsquedas requieren la creación dinámica de consultas para algunas uniones auxiliares, sin embargo, este no es el escenario normal.
  • Archivo(s) ejecutable(s) con lógica compleja, generalmente en C++, a veces en Python o Java si el tiempo es rápido o si hay bibliotecas realmente buenas disponibles y el rendimiento no es un problema clave. Se ejecuta en segundo plano como servicio o es invocado por PHP, según las necesidades del proyecto. En su mayoría son Python, Java o C++. Los procesos en segundo plano generalmente escriben directamente en la base de datos, mientras que los archivos ejecutados dan su salida a través de stdout/err

Como dije antes, normalmente nuestros sitios web son MUY simples, así que construí la API base y el sitio web base sobre Code Igniter para simplificar; como dije, esa parte de la aplicación es realmente simple y está cubierta por mis propias clases generales.

El problema

Tengo dos problemas principales:

  • Soy el único desarrollador de PHP que queda en la empresa, por lo que mi jefe se siente mal por la mantenibilidad del proyecto. Le gusta Java y conozco Java, por lo que prefiere usar Tomcat.
  • No tengo experiencia profesional en marcos de Java y no me gusta codificar las mismas cosas una y otra vez para cada proyecto, ni llenarlas con copiar/pegar repetitivo, así que si quiero algún código estructurado y bonito de otros puedo entender que los marcos son el camino a seguir, ya que no tengo suficiente experiencia con Tomcat para hacerlo desde cero.

La pregunta

El próximo proyecto al que me enfrentaré sería mucho más fácil de implementar con un servidor consciente del estado, como Tomcat. También me gustaría poder declarar clases en el ámbito de una aplicación (o algo equivalente que haga que se instancian solo una vez cuando se inicia Tomcat, si el marco desalienta esa práctica).

¿Qué marcos Java son los más adecuados para mi problema y situación general? Mi plan es hacer un proyecto semilla para que mis proyectos sean homogéneos, sin embargo, puede ser mejor usar herramientas de generación, ¿cuál es tu experiencia al respecto? .Tengo tiempo para jugar con el marco antes de comenzar el proyecto en sí.

En este momento, mis colegas que codifican Tomcat están usando una combinación de lo siguiente:

  • Puntales2
  • Mybatis para la abstracción de bases de datos. Parece ser demasiado grande. Parece que usaré solo el 5% de su poder para mis proyectos.
  • Mosaicos para homogeneización de visualización

No tengo experiencia con struts, pero parece fácil, por lo que mi primer pensamiento fue seguir su esquema para hacer que los proyectos sean más homogéneos, lo que tiene la ventaja de tener personas a las que puedo hacer preguntas sentadas a mi lado, sin embargo, parece como que produce demasiada placa repetitiva, y que modificar ciertas cosas se vuelve tedioso después del proceso de generación automática, pero puede ser solo la falta de experiencia.

Como dije, nuestros puntos finales son muy simples, por lo que preferiría un marco de trabajo ligero. Sé que el mejor marco es con el que te sientes más cómodo, y que si mis colegas conocen un marco específico, es mucho mejor seguir el juego, pero como dije, no tengo experiencia con los marcos de Java, así que Tengo que aprender uno de todos modos, así que quería opiniones basadas en la experiencia.

Pregunta LATERAL: Como dije antes, la mayoría de mis proyectos tienen un punto final REST Api. PHP parece perfecto para esto, ya que no se aplica el tipo; sin embargo, con estructuras de datos de forma arbitraria, Java no es tan fácil como PHP. Recuerdo de mis tiempos de Java que usé la biblioteca Gson de Google para manejar la codificación/descodificación JSON, y parece que todavía está de moda en este momento. Solía ​​satisfacer mis necesidades en el pasado. Tiene alguna idea sobre esto?

pregunta secundaria 2: imagine el siguiente escenario: tengo un analizador Tika para extraer texto sin formato de los documentos. Mi primer pensamiento es crear una instancia del analizador Tika en el alcance de la aplicación y luego llamar a sus métodos cuando sea necesario. En C, necesitaría manejar la concurrencia por mí mismo, ¿Tomcat lo está haciendo correctamente? ¿Cuáles son las mejores prácticas con Tomcat? Estaré en una intensa lectura de documentación de tomcat esta noche, por lo que probablemente podré responderme sobre esto lo suficientemente pronto.

Respuestas (1)

Tiene muchos requisitos y nunca he oído hablar de algunos marcos que mencionó. (Por ejemplo, nunca he escrito una sola línea de PHP). Dicho esto, le recomendaría el (meta) marco Spring.

Pivotal (la empresa detrás de Spring) describe Spring de la siguiente manera:

Un elemento clave de Spring es el soporte de infraestructura a nivel de aplicación: Spring se enfoca en la "plomería" de las aplicaciones empresariales para que los equipos puedan enfocarse en la lógica de negocios a nivel de aplicación, sin ataduras innecesarias a entornos de implementación específicos.

Además, está Spring Boot , que le brinda la posibilidad de poner en marcha su proyecto. Puede encontrar un tutorial para crear un servidor REST simple aquí .

Si está buscando un marco simple y fácil de aprender, Spring no es para usted. Pero en mi opinión es más que un framework, porque proporciona todo un ecosistema de frameworks, que se pueden combinar según tus necesidades.

Hay, por ejemplo, Spring Data y Spring Data REST que automáticamente (más o menos) crean la API REST y las operaciones CRUD necesarias.

Desafortunadamente, no tengo experiencia con el desarrollo de front-end y Spring, pero hay Spring MVC que lo ayuda a construir front-end.

Spring también puede empaquetarse como WAR y desplegarse en un servidor Tomcat.

Gracias por tus sugerencias. De hecho, comencé a experimentar con Struts2. Tengo Spring en mi lista de seguimiento, sin embargo, me parece un poco pesado. Planeo aprender sobre esto, pero creo que no lo haré realmente hasta que me encuentre en una situación en la que Struts2 sea demasiado incómodo de implementar: nuestra interacción con el usuario es realmente simple, por lo que probablemente Struts sea suficiente para la mayoría de mis proyectos. También me permite crear instancias de clases en el ámbito de la aplicación, así que estoy un poco contento con él ATM.