Hoy voy a hablar sobre Apache Isis. Para los que no lo conozcais, entre los que me incluyo, Apache isis es un proyecto que está encuadrado dentro de Apache Incubator. Es decir es un proyecto que está en la fase previa a convertirse parte de los proyectos ‘oficiales’ de la fundación Apache.
Y qué es Apache Isis os preguntareis. Apache es un según la definición dada por los desarrolladores un framekork de código abierto para desarrollo de aplicaciones que genera interfaces de usuario a partir de objetos de dominio. Este framework está diseñado a partir de dos patrones.
- El patrón Naked Object.
Este patrón cumple dos premisas básicas. - Toda la lógica de negocio se tiene que encontrar en objetos de dominio.
- La interfaz de usuario se debe generar 100% a partir de estos objetos de dominio.
- Tiene un arquitectura hexagonal. Básicamente nos dice que los objetos de dominio pueden interactuar con distintos tipos de interfaces de usuario (aplicación de escritorio, web, web service, …). Pero como una imagen vale más que mil palabras echadle un viztazo a la imagen de debajo (sacada de la página oficial de Apache Isis).
mvn archetype:generate -D archetypeCatalog=http://incubator.apache.org/isis -D archetypeGroupId=org.apache.isis.support -D archetypeArtifactId=quickstart-archetype
<dependency> <groupId>${project.groupId}</groupId> <artifactId>exampleIsis-dom</artifactId> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>exampleIsis-fixture</artifactId> </dependency> <!-- isis viewer --> <dependency> <groupId>org.apache.isis.viewer</groupId> <artifactId>html</artifactId> </dependency>
El módulo fixture agrega fixtures (bloques de código que sirven para inicializar objetos antes de que se arranque la aplicación. El módulo dom tiene los objetos de dominio utilizados por el arquetipo. Podemos ver que hay dos ToDoItem.java y ToDoItemRepository.java. Si abrimos el primero de ellos podemos ver un POJO anotado que extiende de AbstractDomainObject. Un vistazo al POJO:
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package dom.todo; import org.apache.isis.applib.AbstractDomainObject; import org.apache.isis.applib.annotation.Disabled; import org.apache.isis.applib.annotation.MemberOrder; public class ToDoItem extends AbstractDomainObject { // {{ Title public String title() { return getDescription(); } // }} // {{ Description private String description; @MemberOrder(sequence = "1") public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } // }} // {{ Done private boolean done; @Disabled @MemberOrder(sequence = "3") public boolean getDone() { return done; } public void setDone(boolean done) { this.done = done; } // }} // {{ markAsDone @MemberOrder(sequence = "1") public void markAsDone() { setDone(true); } public String disableMarkAsDone() { return done?"Already done":null; } // }} // {{ markAsNotDone @MemberOrder(sequence = "2") public void markAsNotDone() { setDone(false); } public String disableMarkAsNotDone() { return !done?"Not yet done":null; } // }} }
Podemos ver que se trata de una clase Java corriente con una serie de atributos con anotaciones. Aconsejo leer el documento isis-applib.pdf que se encuentra en la web para comprender mejor todas las posibles anotaciones que utiliza Apache Isis.
El módulo html creará un war tras realizar un mvn clean install. Para ejecutarlo deberemos lanzar el comando mvn jetty:run.
Nos metemos en la url del navegador http://localhost:8080/exampleIsis-viewer-html y woola tenemos la siguiente pantalla de autentificación (podemos encontrar usuario y contraseña en el fichero security_file.passwords del proyecto).
Vemos que podemos crear fácilmente nuevos objetos ToDo desde una interfaz web a partir del POJO que está creado. Nuestro objeto simplemente necesita una descripción para definirse.
Hemos visto que con Apache Isis nos ha resultado muy sencillo crear la parte de vista a partir de nuestros objetos de dominio.
Dan Haywood
13 May, 2011 at 12:17 am
Hi there,
Thanks for trying out Isis and putting up this post, and I hope you’ll get a chance to dig deeper soon. The best place for more information is our isis-dev mailing list.
Cheers
Dan
hop2croft
16 May, 2011 at 9:23 am
Hi,
thank you for posting. I’m still learning the basics, but I find Apache Isis a very interesting project. I hope next post about Isis will be better.
Cheers
Daniel
23 octubre, 2013 at 3:09 am
Pregunta, se puede crear el proyecto sin tener que hacerlo con maven desde consola, es decir, usando maven desde eclipse… los datos que me pide el maven de eclipse, para agregar un Archetype son:
Archetype Group ID
Archetype Artifact Id
Archetype Version
Repository URL.
Agregando estos datos, podria crear un archetype y crear un proyecto para empezar a trabajar con isis…el problema es que no se de donde sacarlos. En la pagina de isis me fije pero me faltaria la url…
hop2croft
23 octubre, 2013 at 8:12 am
Hola Daniel,
gracias por leer el blog. Mirando en la página de isis he encontrado este enlace, que imagino es al que te refieres, donde lo hacen desde consola (http://isis.apache.org/getting-started/quickstart-archetype.html). No he probado pero normalmente la url de repositorio es la del mvn repository que ya la tendrás añadida en Eclipse y por eso te dejará crear nuevos proyectos de otros frameworks/librerías (http://mvnrepository.com/tags/archetype). El de Apache Isis parece ser este (http://mvnrepository.com/artifact/org.apache.isis/quickstart-archetype).
Saludos.