# WebObjects

WebObjects es un servidor web de aplicaciones Java y un marco de aplicaciones web basado en un servidor desarrollado originalmente por NeXT Software, Inc. Desde 2009, el software ha sido mantenido de forma independiente por voluntarios.
Las características distintivas de WebObject son su orientación a objetos, conectividad con base de datos y herramientas de creación de prototipos. Las aplicaciones creadas con WebObjects se pueden implementar como sitios web, aplicaciones de escritorio y / o servicios web basados en estándares.
El tiempo de ejecución de la implementación es puramente Java , lo que permite a los desarrolladores implementar aplicaciones WebObjects en plataformas compatibles con Java. Se puede utilizar WebObjects Java SE como servidor de aplicaciones(incluido) o implementar servidores de aplicaciones Java EE de terceros como JBoss, Apache Tomcat, WebLogic Server o IBM WebSphere .

## Historia

WebObjects fue creado por NeXT Software, Inc., se mostró públicamente por primera vez en la conferencia Object World de1995 y se lanzó al público en marzo de 1996. Los beneficios de tiempo y coste del desarrollo rápido orientado a objetos atrajeron a las principales corporaciones a WebObjects en los primeros días del comercio electrónico, con clientes como la BBC News, Dell Computer, Disney, DreamWorks SKG, Fannie Mae, GE Capital, Merrill Lynch y Motorola . Sin embargo, tras la fusión de NeXT con Apple Inc. en 1997, el perfil público de WebObjects languideció. Muchos de los primeros usuarios cambiaron posteriormente a tecnologías alternativas, y actualmente Apple sigue siendo el mayor cliente del software, confiando en él para impulsar partes de la Apple Store y iTunes Store, la implementación de más alto nivel de WebObjects.
WebObjects formaba parte de la estrategia de Apple de utilizar software para impulsar las ventas de hardware, y en el 2000 el precio se redujo de 50.000 dólares (licencia de implementación completa) a 699 dólares. Desde mayo de 2001, WebObjects se incluyó con Mac OS X Server y ya no requería un clave de licencia para desarrollo o implementación.
WebObjects pasó de ser un producto independiente a formar parte de Mac OS X con el lanzamiento de la versión 5.3 en junio de 2005. Las herramientas y marcos de desarrollo, que anteriormente se vendían por 699 dólares estadounidenses, se incluían en el IDE de Xcode de Apple. El soporte para Windows fue interrumpido más tarde. Apple dijo que integraría aún más las herramientas de desarrollo de WebObjects con Xcode en versiones futuras. Esto incluía un nuevo plugin EOModeler para Xcode. Sin embargo, esta estrategia no se siguió adelante.
En 2006, Apple anunció que el puente Cocoa-Java de MacOS X quedaría obsolto con el lanzamiento de Xcode 2.4 en la Conferencia Mundial de Desarrolladores de agosto de 2006, y con todas las características dependientes, incluida la suite completa de aplicaciones para desarrolladores de WebObjects: EOModeler, EOModeler Plugin, WebObjects Builder, WebServices Assistant, RuleEditor y WOALauncher. Apple había decidido concentrar sus recursos de ingeniería en el tiempo de ejecución de WebObjects, dejando la responsabilidad de las aplicaciones de desarrollo en la comunidad de código abierto. La principal alternativa de código abierto: el Eclipse IDE con el conjunto de complementos WOLips, maduró hasta tal punto que sus capacidades habían superado, en muchas áreas, las de las propias herramientas de Apple, que no habían tenido actualizaciones significativas durante varios años.
Apple prometió brindar asistencia a la comunidad en sus esfuerzos por ampliar dichas herramientas y desarrollar otras nuevas. En una publicación en la lista de correo webobjects-dev, Daryl Lee del equipo WebObjects de Apple reveló públicamente la nueva estrategia de la compañía para WebObjects. Prometió "hacer de WebObjects el mejor entorno de ejecución del lado del servidor "mediante:
* Mejora del rendimiento, la capacidad de gestión y el cumplimiento de los estándares
* Hacer que WebObjects funcione bien con Ant y los IDE más populares, incluidos Xcode y Eclipse
* Abrir y hacer públicos todos los estándares y formatos de los que depende WebObjects
WebObjects 5.4, que se envió con Mac OS X Leopard en octubre de 2007, eliminó el requisito de la clave de licencia para el desarrollo y la implementación de aplicaciones WebObjects en todas las plataformas. Todos los métodos para verificar las limitaciones de la licencia quedaron obsoletos.
En 2009, Apple dejó de publicar nuevas versiones de WebObjects fuera de Apple. La comunidad decidió continuar con el desarrollo con Project Wonder, un marco de código abierto construido sobre los marcos principales de WebObjects y extenderlo. Por ejemplo, Project Wonder ha actualizado las herramientas de desarrollo y proporciona un marco REST que no formaba parte del paquete WebObjects original.
Aunque una vez se incluyó en la instalación predeterminada de Mac OS X Server, WebObjects ya no se instaló de forma predeterminada a partir de Mac OS X Snow Leopard Server y poco después, Apple dejó de promover o vender WebObjects. A partir de 2016, WebObjects cuenta con el apoyo activo de su desarrollador comunidad, la "WOCommunity Association", ampliando los marcos centrales y proporcionando correcciones con Project Wonder. La organización celebró por última vez una Conferencia mundial de desarrolladores de WebObjects, WOWODC, en 2013.
En mayo de 2016, Apple confirmó que WebObjects había sido interrumpido.

## Herramientas

A partir de 2016, la mayoría de los arquitectos e ingenieros de WebObjects están utilizando las herramientas que está desarrollando la comunidad de WebObjects. Estas herramientas se ejecutan dentro del IDE de Eclipse y son de código abierto. Los complementos de WebObjects para Eclipse se conocen como WOLips.
La creación de marcos y aplicaciones de WebObjects para su implementación se logra normalmente mediante el conjunto de herramientas WOProject para Apache Ant o Apache Maven, que se distribuyen con WOLips.

## Marcos básicos

Una aplicación WebObjects es esencialmente un ejecutable en el lado del servidor, creado mediante la combinación de objetos de marco de aplicación prediseñados con el propio código personalizado del desarrollador. Los marcos de WebObjects se pueden dividir en tres partes principales:
* WebObjects Framework (WOF) se encuentra en el nivel más alto del sistema. Es responsable de la interfaz de usuario de la aplicación y la administración del estado. Utiliza un enfoque basado en plantillas para tomar ese gráfico de objetos y convertirlo en HTML u otro tipo de etiqueta. Estándares de visualización de información, como XML o SMIL. Proporciona un entorno donde poder utilizar y crear componentes reutilizables. Los componentes son fragmentos de presentación (HTML) y funcionalidad (código Java), a menudo con una lista de parámetros para mejorar la reutilización. Se utiliza WebObjects Builder para crear las plantillas HTML y crea el enlace de archivos .wod, por ejemplo, un objeto de cadena Java a objetos de interfaz como un campo de entrada en un formulario web.
* Enterprise Objects Framework (EOF) es, quizás, la característica distintiva de WebObjects. EOF se comunica con bases de datos relacionales y convierte las filas de la base de datos en un gráfico de objetos. Con EOModeler, el desarrollador puede crear una abstracción de la base de datos en forma de objetos Java. Para acceder o insertar información en la base de datos, el desarrollador simplemente accede a los Java Enterprise Objects (EO) desde su lógica de negocios. Después de eso, EOF administra los EO y crea automáticamente el código SQL requerido para confirmar los cambios en la base de datos.
* Java Foundation. Tanto Enterprise Objects como WebObjects se basan en las clases de Java Foundation con el nombre adecuado. Este marco contiene las implementaciones de la estructura de datos fundamentales y las utilidades que se utilizan en el resto de WebObjects. Los ejemplos incluyen clases de valor y colección básicas, como arrays, diccionarios . Java Foundation es similar al marco Foundation contenido en la API Cocoa de Apple para aplicaciones de escritorio macOS, sin embargo, Java Foundation está escrito en Java puro en lugar de Objective-C de Cocoa (con su contenedor de tiempo de ejecución de puente de Java ). Las clases Foundation tienen el prefijo "NS" (una referencia a su herencia del sistema operativo NeXTSTEP). Desde la transición de WebObjects a Java en 2000, la funcionalidad de muchas de las clases Java Foundation de Apple se ha replicado en el propio JDK de Sun. Sin embargo, persisten en gran parte por razones de compatibilidad con versiones anteriores y los desarrolladores son libres de utilizar los marcos que prefieran.

## Desarrollo rápido de aplicaciones basado en reglas (RBRAD)

WebObjects presenta un conjunto de tecnologías de desarrollo rápido que pueden crear automáticamente una aplicación web sin la necesidad de escribir ningún código Java. Dado un archivo modelo para una base de datos, WebObjects creará una interfaz que admite nueve tareas comunes de la base de datos, incluidas consultas, edición y listado. Estas aplicaciones son útiles para la creación de prototipos o de otra manera una base de datos, quizás para verificar relaciones o para sembrar la base de datos con datos.
La interfaz de usuario se genera dinámicamente, sobre la marcha en tiempo de ejecución usando un sistema basado en reglas, no se genera código. Por lo tanto, se puede modificar la configuración de una aplicación en tiempo de ejecución (usando un programa asistente) sin recompilar o relanzar la aplicación.
Los desarrolladores pueden utilizar una de las tres tecnologías diferentes, según el tipo de interfaz que deseen emplear:
* Direct To Web (D2W) permite a los desarrolladores crear rápidamente una aplicación web basada en HTML que accede a una base de datos.
* Direct To Java Client permite a los desarrolladores crear rápidamente una aplicación de escritorio cliente utilizando el kit de herramientas Java Swing . Una ventaja de las aplicaciones de cliente Java es que pueden aprovechar la potencia de procesamiento de la computadora cliente para realizar operaciones tales como ordenar una lista de elementos recibidos del servidor.
* Direct To Web Services permite a los desarrolladores desarrollar rápidamente aplicaciones basadas en servicios web que brindan acceso a un almacén de datos.

### Ventajas de RBRAD

* Tiempo de desarrollo y depuración muy reducido;
* Mayor estabilidad mediante el uso de código altamente ejercitado;
* Al utilizar la información contenida en el archivo del modelo de datos, las aplicaciones no violarán la integridad de la base de datos. Normalmente, tendría que escribir código para evitar tales situaciones y manejar errores generados por datos incorrectos.
* Utiliza completamente los servicios de validación proporcionados por WebObjects y Enterprise Objects.

## Java Compatibilidad

WebObjects es un producto 100% Java con las siguientes funciones basadas en Java:
* Implementación: las aplicaciones se pueden implementar en cualquier sistema operativo que tenga Java 1.3 o posterior. Muchos desarrolladores se han implementado con éxito en Windows y varios sistemas Linux como Red Hat Linux, Debian y SUSE . Las aplicaciones también se pueden alojar en cualquier servidor de aplicaciones compatible con Java EE, como JBoss .
* Integración de Java EE: las aplicaciones de WebObjects se pueden empaquetar en un solo directorio (un archivo .war expandido) que facilita la implementación en un contenedor de servlets de Java EE .
* JDBC: Dado que WebObjects usa JDBC para la conectividad de la base de datos, cualquier DBMS que tenga un controlador JDBC se puede usar dentro de WebObjects.
* Interfaz Swing: las aplicaciones WebObjects se pueden entregar al usuario como una "aplicación de cliente Java" o como un subprograma Java.

## Historial de versiones

WebObjects fue lanzado originalmente por NeXT Computer en marzo de 1996, pero fue adquirido por Apple Inc. con la adquisición de NeXT en diciembre de ese año.

## WOWODC

Desde 2007, la comunidad ha celebrado una conferencia anual para desarrolladores de WebObjects, WOWODC. En 2007 y 2008, la conferencia se llevó a cabo el fin de semana anterior a la WWDC, y en 2009, la comunidad promovió dos conferencias: WOWODC West en San Francisco el 6 y 7 de junio, inmediatamente antes de la WWDC, y WOWODC East en Montreal el 29 y 30 de agosto. WOWODC 2010 se celebró en Montreal los días 27, 28 y 29 de agosto de 2010. WOWODC 2011 se celebró en Montreal los días 1, 2 y 3 de julio de 2011. WOWODC 2012 se llevó a cabo en Montreal el 30 de junio, 1 y 2 de julio de 2012. WOWODC 2013 se celebró en Montreal. WOWODC 2014 se llevó a cabo en Montreal (12, 13 y 14 de abril). WOWODC 2015 se celebró en Hamburgo los días 25, 26 y 27 de abril. WOWODC 2016 se celebró en Montreal los días 24, 25 y 26 de junio

## Alternativas open-source

El interés en las alternativas de código abierto a los WebObjects que utilizan el lenguaje Objective-C creció con el cambio de WebObjects de Objective-C (última versión WO 4.5.1) a Java (primera versión WO 5.0). Los dos marcos disponibles son SOPE, que se ha utilizado como base del servidor de software colaborativo OpenGroupware.org durante unos ocho años, y GNUstepWeb, que forma parte del proyecto GNUstep. También existen reescrituras de código abierto de los marcos EOF (AJRDatabase, AJRDatabase, GDL2).
También hay alternativas basadas en Java:
* Wotonomy es un proyecto, alojado en Sourceforge, que implementa una versión de código abierto de sala limpia del sistema WebObjects 5.x. Proporciona una implementación casi completa del marco web MVC, así como implementaciones parciales de Foundation, Control, capas de datos y otras características. Es lo suficientemente funcional para aplicaciones de base de datos de fuente única y de bajo volumen de transacciones. Mientras que la estructura del proyecto se reorganizó en 2006 en torno a una infraestructura de compilación Apache Maven y se migró al sistema de control de revisiones Subversion, no ha habido ninguna actualización sustancial del código base desde 2003.
* Apache Tapestry tiene un diseño y una filosofía similares a los de WebObjects. Tapestry se combina frecuentemente con Apache Cayenne, un marco de persistencia inspirado en EOF.
* GETobjects es otro marco con una API similar a WebObjects 5.x relacionada con SOPE.
Un intento de hacer una versión Swift basada en SOPE / GETobjects está disponible como SwiftObjects. La implementación para Swift 4 está limitada debido a las capacidades de reflexión de esa versión Swift.