Date post: | 11-Jun-2015 |
Category: |
Technology |
Upload: | mario-garcia |
View: | 674 times |
Download: | 0 times |
Creando plugins con
Me presento
Mario García Desarrollador Freelance Java/Groovy Commiter de Griffon Otros proyectos en los que me entretengo:
Anibal: http://anibal.sourceforge.net Viewa: http://www.viewaframework.org
Twitter: @marioggar Blog: desmontandojava.blogspot.com
¿Que vamos a ver? ¿Por qué Griffon?
Plataforma de Plugins
Plugins y Addons
Creación de un plugin
Creación de un addon
Creación de un arquetipo con el plugin creado
¿Por qué Griffon?
¿Por qué Griffon ? Lo reconozco, el desarollo de Swing era...
Desestructurado
Practica inexistencia de frameworks Cada aplicación un framework XD
Verboso
Mucho código para realizar las mismas tareas. Hey! Es Java puro ¿Qué esperabais?
Dificíl en el manejo de hilos
Dificultad en el manejo del EventDispatchThread
¿Por qué Griffon ?
Es decir, una pesadilla :<
¿Por qué Griffon ?
Yo quería divertirme y escuche una musica...
¿Por qué Griffon ?
… me tome una copita y asi encontré...
¿Por qué Griffon ?
SWING + GROOVY + GRAILS ~=
¿Por qué Griffon ?
¿Por qué Griffon? Site: http://griffon.codehaus.org
Licencia: Apache 2.0
1er release: (0.0) – 10 Sept. 2008 (Basado en Grails 1.1)
Última distribución: 0.9.4
Sospechosos habituales...
Andres Almiray
Danno Ferrin
Plataforma de Plugins
Plataforma de plugins
Lo que Griffon no hace, lo hacen sus plugins http://griffon.codehaus.org/Plugins Mas de 170 plugins y contando Categorias
Persistencia Componentes Look and Feel Internacionalización Testing Y unas cuantas más
Plugins y Addons
Plugins y Addons
Plugin y Addon Plugins
Agregan nuevas librerias a nuestro proyecto Agregan nuevos scripts (p.e: crear nuevos ficheros) Agregan Addons
Addons Agregan funcionalidad en tiempo de ejecución. Ejemplo: Inyectar un servicio a todos los controladores
cada vez se instancien.
Creación de un plugin
Creación de un plugin
Pasos para crear un plugin (Sin addons) Creación del proyecto del plugin Agregacion de dependencias Agregación/Modificación de scripts Empaquetado plugin Plugin Release
Creación de un plugin
Creación del proyecto* griffon create-plugin nombrePlugin
Se creará la estructura del proyecto
Un plugin tiene la misma estructura que un proyecto Griffon normal
Codigo del ejemplo del plugin y del Addon en:
http://code.google.com/p/griffon-examples/
Creación de un plugin
Creación del proyecto. Partes más importantes
Descriptor Plugin Declaración o agregación
de dependencias Agregación de scripts Agregación de código fuente
Creación de un plugin
Creación del proyecto Partes más importantes: Descriptor Plugin
Metainformación sobre el plugin Versión del plugin (Por si necesitas una versión en concreto) Versión de Griffon compatible Dependencias con otros plugins Tipo de licencia Toolkit compatible (Swing, SWT...) Compatibilidad de plataformas Datos sobre el autor Información sobre la funcionalidad del plugin
Creación de un plugin
Creación de un plugin
Agregación de dependencias Manualmente en el directorio lib Declarativamente en
BuildConfig.groovy
Creación de un plugin
Agregación de dependencias BuildConfig.groovy (fragmento)
Creación de un plugin
Agregación Scripts Podemos agregar scripts que generen código
create-domain-class en el caso de gorm (Grails) que crea una clase que tiene capacidad de persistencia
Podemos modificar/agregar ficheros de configuración a través de los scripts de instalación/desinstalación/actualización del plugin
Por ejemplo, queremos agregar la configuración del servidor Solr al que vamos a consultar.
Creación de un plugin
Agregación de scripts Todos los scripts están en “scripts”
Por defecto existen _Install.groovy _Uninstall.groovy _Upgrade.groovy
Creación de un plugin
Agregación de scripts Creación de fichero de configuración en la instalación a través de
_Install.groovy
Creación de un plugin
Empaquetado del plugin Empaquetamos el plugin para poder testearlo antes de realizar un
release. griffon package-plugin
Importante copiar la ruta de creación del empaquetado del plugin, para poder instalarlo en nuestras aplicaciones locales
Creación de un plugin
Empaquetado del plugin
Creación de un plugin
Empaquetado del plugin Probamos a instalar el plugin
Veremos también como se descargan las dependencias
Creación de un plugin
Empaquetado del plugin Veremos como se ha creado el fichero Solr.groovy
Creación de un Addon
Creación de un Addon
Hasta ahora: Gracias al plugin nuestra aplicación
Puede utilizar el api de Solrj Puede recoger la configuración de un fichero
(Solr.groovy) Pero nos gustaría:
No tener que repetir el codigo de conexión Hacer las consultas mas a-la Gorm
Creación de un Addon
Pasos a seguir: Creación de un nuevo Addon
Vamos a crear un addon dentro de nuestro plugin
Inyectar funcionalidad en tiempo de ejecución En cada instancia de controlador un builder que permita realizar criterias
básicas a-la Gorm.
Creación de un Addon
Creación del Addon* griffon create-addon nombreAddon
Esta ejecución creará un nuevo fichero denominado [NombreDelAddon]GriffonAddon.groovy
Creación de un Addon
Creación del Addon El fichero del Addon por lo general tiene comentados:
Todos los metodos que hacen referencia al ciclo de vida Todos los posibles puntos de inyección en tiempo de ejecución
Creación de un Addon
Inyección de funcionalidad en Runtime Ciclo de vida del Addon
No vamos a deternos aqui, ya que nuestro Addon no depende del ciclo de vida del Addon
Orden de ejecución de metodos addonInit(app) { ... } addonPostInit(app) { ... } addonBuilderInit(app) { ... } addonBuilderPostInit(app) { ... }
Creación de un Addon
Inyección de funcionalidad en Runtime La lista de posibles elementos que puede agregar un addon a
una aplicación en tiempo de ejecución son:
factories: Nodos que pueden ser interpretados en cualquier miembro de un grupo MVC
methods: Metodos adicionales agregados a todos los miembros de un grupo MVC
props: Propiedades agregadas a todos los m. de un g. MVC mvcGroups: Nuevos grupos MVC events: Manejadores de eventos en tiempo de ejecución XXXDelegates: Diferentes estrategias para construcción de
nodos.
Creación de un Addon
Inyección de funcionalidad Vamos a inyectar una propiedad en todos los controladores para
poder realizar consultas de tipo criteria contra una instancia de solr como esta:
Creación de un Addon
Inyección de funcionalidad Inyección de método withSolr
La inyección se produce a través del addon creado (AlaGormGriffonAddon) Vamos a leer el fichero de configuración que crea el plugin al instalarlo. Solo
una vez cuando se inicia la aplicación. Vamos a inyectar el metodo withSolr en cada instancia que se cree de un
controlador. Este metodo withSolr devolverá una instancia de un builder creado por nosotros (SolrjBuilder)
El código fuente que vamos a agregar estará en la carpeta src/main dentro de nuestro plugin (SolrjBuilder/ConstraintsBuilder).
Creación de un addon
Inyección de funcionalidad
Creación de un addon
Probamos el addon Volvemos a empaquetar el plugin
Nota: Podemos empaquetar solamente el addon
Volvemos a instalar el plugin Primero voy a desinstalarlo e instalarlo otra vez
Importante: Al trabajar en local cuidado con la cache de ivy, puede jugar malas pasadas.
Creamos un grupo MVC en nuestra aplicación para probar los criterias contra un servidor Solr
Creación de un addon
Nuevo MVC (Vista)
Creación de un addon
Nuevo MVC (Controlador)
Creación de un addon
Y el resultado sería
Arquetipos
Arquetipos
Caracteristicas Reutilización de estructuras de proyectos
Una serie de grupos MVC comunes (Login) Plugins (P.e. En esta empresa siempre se utiliza
activeJdbc para conexión a base de datos, y ldap para la autenticación)
Lo que se os ocurra compartir.
Arquetipos
Comandos create-archetype
Crea la estructura del arquetipo.
package-archetype Prepara el arquetipo para ser compartido
install-archetype Instala el arquetipo para poder ser utilizado. NO instala el arquetipo en tu
aplicación
Arquetipos
Descriptor application.groovy
En este fichero se define aquello que va a ser instalado, en la aplicación que siga este arquetipo.
Arquetipos
Templates Estos templates se utilizarán para crear nuevos artefactos.
La resolución de estas plantillas sigue este orden: local a la aplicación → $basedir/src/templates/artifacts
Por un plugin → $pluginHome/*/src/templates/artifacts
Arquetipo local → ~/.griffon/<version>/archetypes/<name>/templates/artifacts
Arquetipo global → $griffonHome/archetypes/<name>/templates/artifacts
Arquetipos
Ejemplo simple* Creamos un arquetipo que haga que el proyecto tenga
como dependencias los plugins de viewaswing y ldap Creamos el arquetipo Agregamos en application.groovy los plugins Empaquetamos e instalamos el arquetipo Creamos una aplicación que siga el arquetipo que acabamos de crear
Arquetipos
Creamos el arquetipo
Editamos el fichero application.groovy Descomentamos la linea donde se recupera los metadatos de la aplicación
Agregamos las lineas para nuestros plugins
Arquetipos
Arquetipos
Empaquetamos griffon package-archetype
Nos creara un fichero zip en la carpeta del arquetipo
Instalamos griffon install-archetype URL/ruta del arquetipo
Si lo ejecutamos en la misma carpeta donde esta el fichero zip solamente deberemos ejecutar
griffon install-archetype nombrefichero.zip
Esto lo instalará en el repositorio local
Creamos una aplicacion con el arquetipo
Arquetipos
Un consejo antes de terminar...
http://www.manning.com/almiray/
Q&A