Comparar J2EE vs (Turbogears, Django, Pylons)

lasizoillo lasizoillo en gmail.com
Mar Jun 5 15:50:17 CEST 2007


Creo que el titulo de tu mensaje es apropiado J2EE vs (un monton de
cosas pythonicas).

Si quieres comparar J2EE con python, te propongo hacerlo por partes, y
luego ver un framework para verlo en su conjunto.

J2EE
===
 * JSP es el sistema de plantillas
 * Servlet para implementar un controlador HTTP
 * POJOs, Session EJB, ... para hacer la logica de negocio
 * EJBs de entidad (1.0 .. 3.0), Hibernate para la logica de
persistencia. Hibernate no es J2EE (si lo es EJB 3.0 que es una
inspiracion) pero se usa mucho.
 * EJB y JMS para mensajeria
 * JARs, WARs, EARs para el despliegue

Python
====
Sistemas de plantillas
----------------------------
Tienes un monton de referencias:
 - Los PSP que vienen con mod_python
 - Kid, Ghensi, SimpleTAL, ZTL, ... como sistemas de plantillas XML
que generan contenido
 - Chetah
 - Clearsilver (escrito en C)
 - Breve
 - .... (una enorme lista)

Controlador
---------------
 - Cherrypy como cosa hecha
 - WSGI, mod_python, ... como base para hacerte el tuyo
 - El que te proporcione el framework en cuestion. Por ejemplo django

Logica de negocio
-----------------------
Lo mismo que POJO es una clase de Java de las de toda la vida, aqui se
usan los modulos de python de toda la vida ;-)
Si quieres tener la funcionalidad de llamadas remotas de los EJB de
manera pythonica, te puedes mirar PyRO

Entidad
----------
 - DBI siempre esta como opción, pero es comparable a jdbc (Java), no a J2EE
 - SQLObject. ORM facil de usar, pero que te puede resultar limitado.
Patron Active Record
 - SQLAlchemy. Completo y mas util si tienes bases de datos legacy.
 - Hay un monton de ORM's escritos en python. Django tiene el suyo
propio, el autor de cherrypy esta haciendo otro.

Mensajeria
--------------
 - Volvemos a PyRO, aunque las colas de mensajes no son persistentes
:-(. No conozco forma pythonica con dicha funcionalidad.

Despliegue
--------------
Si el Java (cafe) viene en JARs (jarras), una python (serpiente)
vienen en egg (huevos).
El sistema de python es mucho más mejor:
- Tiene control de dependendecias y capacidad de descargar los
paquetes de un repositorio. Como el Java Web Start, pero que lo puedes
usar para todo.
- Puedes encontrar un tipo de ficheros instalados como hace Turbogears
para encontrar los widgets que tienes instalados.

Frameworks J2EE
==========
Nadie trabaja directamente con la especificacion J2EE directamente
porque es un poco infumable. La mayoria de la gente trabaja con
frameworks que facilitan la labor de trabajar con J2EE. Sobre todo si
el proyecto es grande.
Aqui eso de elijo J2EE y no me como la cabeza se termina.

Struts
-------
Framework MVC que se hizo famosillo. No se si sigue de moda o no. Te
permitia usar Velocity en vez de JSP, y ayudaba a la hora de hacer el
controlador. No se metia demasiado con cosas de entidad.

JSF
----
Tecnologia para cosas de presentacion en Java. Se da un aire a Struts
(o eso me parece) pero mas moderno. Creo que esta incluido en la
especificacion J2EE, pero no me hagas mucho caso. Mis tiempos de
Javero pasaron hace tiempo.

Spring
--------
Framework grande y complejo donde los haya. La idea principal es que
J2EE apesta y que es mejor usar POJO's mediante la inyeccion de
dependencia. Le meten un repasito a todo (incluso tiene una jerarquia
de excepciones de SQL para que no tengas que hacer un codigo espantoso
a base de comprobar el status code de la SQLException).
Recomendable hecharle un vistazo si vas a hacer algo medianamente gordo.

Otros
-------
Tienes un monton. Creo que todas las empresas de informatica de españa
tienen el suyo desarrollado antes sobre Struts y ahora sobre Spring.
Por ejemplo NEO de Entel.

Frameworks de Python
==============
Esta lista tampoco va a ser exhaustiva. Solo mostrar algunos ejemplos
de frameworks y su utilidad.

Turbogears
---------------
Simple y sencillo. Es el pegamento para unir cosas que ya habia en la
comunidad de python:
- CherryPy de controlador
- Todo el sistema de plantillas compatible con Buffet (una interfaz
comun para un monton de sistemas).
- SQLAlchemy y SQLObject como ORMs
- Sistema de autenticacion propio.
- Herramientas para ayudar en la internacionalizacion.
- Sistema de widgets propio o ToscaWidgets (gracias Alberto ;-))
- Ayudas para el despliegue
- ....

Django
---------
No conozco mucho del tema.
Solo se que se lo han currado todo ellos. Su ORM, sistema de plantillas, ...

Pylons
---------
Un pegamento para unir un monton de piezas WSGI.
http://www.wsgi.org/wsgi por si quieres mas piezas para tu proyecto

Plone
-------
Es un framework muy orientado a la gestion de contenidos, realizado
sobre ZOPE que es algo que sirve para mas cosas.
En la pagina de Plone tienes un video hecho por un tio de la NASA que
explica por qué eligio Plone antes que Turbogears, Django, Ruby on
rails y J2EE.
http://plone.org/about/movies
El video no creo que te ayude a elegir uno u otro framework, pero si a
no elegir Java ;-)



Y despues de toda esta chapada que te he metido, veo que me faltan un
monton de cosas por analizar:
- Sistemas de logs
- Sistemas de autenticacion/autorizacion
- Securizacion
- Rendimiento
- Soporte
- ...

Tras analizar un monton de estas cosas por encima decidi probar
Turbogears mas a fondo y cambiar si me raya en un futuro. Es posible
que cambie hacia WebPy para mis cosas, aunque no descarto el uso de
Plone en determinados casos (¿puede haber dos soluciones mas
antagonicas?). Django por ahora no me llama.

Si vas a usar WXPython como cliente (aparte del web) puedes usar SOAP,
varios frameworks de python te ayudan con la tarea. Aunque yo mas
tiraria por algo como PyRO que posiblemente tenga menos latencia. Solo
que para esta ultima opcion ningun framework te va a guiar.

Un saludo y espero no haberte liado mucho.

Javi


El 4/06/07, Jose Luis Dominguez NONLILLY
<DOMINGUEZ_JOSE_LUIS_NONLILLY en lilly.com> escribió:
> Hola a todos.
> Ya sé que esto va un poco en cuestión de gustos, pero mi problema es el
> siguiente.
>
> En un proyecto nuevo quieren realizar la típica gestión de almacén y un
> par de cosas más.
>
> Como no, mi jefe quiere vender J2EE, que hoy en día es lo que más está de
> moda.
>
> Como yo prefiero Python, he empezado a buscar y leer, y he encontrado como
> buenas opciones Django, Turbogears y Pylons.
>
> La duda que tengo es si estoy frameworks son comparables a JEE. Por lo que
> he leído ambos usan el patrón MCV, lo que no me quedó muy claro es si
> puedo realizar aplicaciones de escritorio como vista. Es decir, usar algo
> parecido a los servlets de JEE, y desde mi aplicación, por ejemplo con
> WXPython, conectarme a servidor de aplicaciones (No sé si esto último que
> he dicho es una tontería ya que no sé si TG o Django se basan en el modelo
> de tres capas)
>
> Y finalmente, sin animo de crear polémica, cual prefieren ustedes de los
> tres mencionados?
>
> Un saludo
> Jose
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>




Más información sobre la lista de distribución Python-es