RSS

Introducción a Apache Isis

13 May

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).
En mi caso considero que Apache Isis tiene cierto parecido con Spring Roo ya que te permite desarrollar rápidamente una aplicación. Obviamente y aunque no conozco bien ninguno de los dos frameworks diría que es aquí también donde terminan los parecidos entre ellos.
Pero sigamos con Apache Isis. Mi aplicación va a depender exclusivamente de mis objetos de dominio y en Apache Isis estos objetos son POJO anotados. En estos POJO van a tener ó que extender de la clase org.apache.isis.applib.AbstractDomainObject o se les va a tener que inyectar un objeto de tipo org.apache.isis.applib.DomainObjectContainer. Otros servicios de nuestra aplicación van a poder acceder a nuestro POJO (objecto de dominio) a través de los métodos implementados al extender del AbstractDomainObject o usando el objeto DomainObjectContainer inyectado por el contenedor de Apache Isis.
Para ver un ejemplo vamos a instalarnos el arquetipo de Apache Isis. Apache Isis está construido utilizando Maven para ello. El comando Maven que tendremos ejecutar para bajarnos el arquetipo será el siguiente.
mvn archetype:generate 
    -D archetypeCatalog=http://incubator.apache.org/isis
    -D archetypeGroupId=org.apache.isis.support
    -D archetypeArtifactId=quickstart-archetype
Una vez bajado veremos que nos ha generado distintos módulos (html, wicket, REST, junit, bdd, …).  En nuestro caso vamos a ver el módulo html que usa como viewer html. Si abrimos su pom encontraremos que a su vez utiliza otros dos módulos del proyecto, además de usar como viewer html.
       <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.

 
4 comentarios

Publicado por en 13 May, 2011 en Apache Isis

 

Etiquetas: , , , , ,

4 Respuestas a “Introducción a Apache Isis

  1. 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

     
  2. 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

     
  3. 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…

     

Replica a hop2croft Cancelar la respuesta