miércoles, 17 de diciembre de 2014

Componente Carbon UI para gestionar la clusterización (III) Final

Pues como pudieron ver en la entrada anterior, se mostró la visualización del plugin desarrollado para gestionar de manera gráfica la configuración necesaria para clusterizar las herramientas de la Suite de WSO2, hasta el momento se encuentra funcional solo que se está implementando las respectivas validaciones para no permitir que se introduzcan errores en los parámetros.

Ahora les daré una breve descripción de como es que se desarrollan los componentes visuales (Carbon UI) para la Suite de WSO2.Y cualquier apoyo que nos quieran brindar o duda que tengan nos pueden dejar sus comentarios.

Para el desarrollo de un Carbon UI Bundle Project es necesario que nos descarguemos el WSO2 Developer Studio, que no es más que un plugin desarrollado por WSO2 y que está montado en Eclipse, en este link se puede descargar el plugin por separado separado o un Eclipse en este caso la versión Kepler que ya trae instalado el plugins Developer Studio lo cual es lo que recomiendo para evitar algun problema de configuración que tengamos.

Para entender como se desarrolla un carbon UI Bundle pueden acceder a la documentación online del Developer Studio.

Para comprender como es que funciona el core de Carbon y como se puede personalizar les sugiero que sigan estos enlaces en los que se da una explicación bien detallada de como es que funciona y como está compuesto:
Una vez descargada la herramienta, podemos ejecutarla y visualizamos el Dashboard del Developer Studio como la imagen que verán a continuación:

Paso 1

 Damos click en la opción Carbon UI Bundle Project para poder crear un UI Bundle y seleccionamos la primera opción porque vamos a desarrollar uno desde cero: 

Paso 2
Después de darle siguiente en la captura anterior, nos encontraríamos con la siguiente pantalla, en la que definimos cual va a ser el nombre de nuestro proyecto, si deseamos crear una clase Activator que va a ser ejecutada una vez que se cargue nuestro bundle y se definen otros atributos necesarios para el mismo, además de definir el path donde se van a desplegar nuestras vistas:

Paso 3
Una vez que hayamos completado el paso anterior se especifica en quñe grupo y qué id va a tener nuestro bundle en maven:

Paso 4
Le damos Finish y nos quedaría un proyecto en nuestro workspace con una estructura similar a esta:

Paso 5
Como verán tenemos creada nuesta clase Activator en la que podemos definir que hacer en el momento en que se cargue nuestro bundle esto se define en el metodo:

    public void start(BundleContext bundleContext) throws Exception {
        Activator.context = bundleContext;
        //TODO Aquí podemos poner nuestra implementación.
    }

También tenemos creada nuesta carpeta clustermanager dentro de la carpeta web en la que estarán contenidas todas nuestras vistas, css, imágenes y js. 

En la carpeta META-INF encontrarán el fichero MANIFEST.MF y component.xml, en el primero se especifica todas las características relacionadas con el bundle y en el segundo es donde se le configura la región en la que va a estar situado el plugins en el menú de las herramientas así como cuales son las páginas de inicio del mismo yel recurso donde va a estar la internacionalización quedando este ejemplo como se muestra a continuación:

<?xml version="1.0" encoding="UTF-8" ?>
<component xmlns="http://products.wso2.org/carbon">
<menus>
        <menu>
            <id>clustermanager_menu</id>
            <i18n-key>clustermanager.managername</i18n-key>
            <i18n-bundle>com.wso2.clustermanager.mgt.ui.i18n.Resources</i18n-bundle>
            <parent-menu>configure_menu</parent-menu>
            <link>#</link>
            <region>region1</region>
            <order>20</order>
            <style-class>manage</style-class>
            <icon>../clustermanager/images/applications.gif</icon>
            <require-permission>/permission/protected/manage</require-permission>
        </menu>
        <menu>
            <id>clustermanager_configuration</id>
            <i18n-key>clustermanager.configuration</i18n-key>
            <i18n-bundle>com.wso2.clustermanager.mgt.ui.i18n.Resources</i18n-bundle>
            <parent-menu>clustermanager_menu</parent-menu>
            <link>../clustermanager/index.jsp</link>
            <region>region1</region>
            <order>14</order>
            <style-class>manage</style-class>
            <icon>../clustermanager/images/list.gif</icon>
            <require-permission>/permission/protected/manage</require-permission> 
        </menu>
    </menus>
</component>

La tendencia según la implementación que se ha visto y según lo que se propone por los desarrolladores de las herramientas es que en el plugin esté bien separada la interfaz de la lógica de negocio y que la comunicación entre la misma sea por lo general mediante el consumo de Servicios Web, pero en nuestro caso como no existe mucha más lógica que allá que leer y escribir un fichero XML por lo tanto no se hizo necesario esta separación, no obstante si usted cuando lo esté leyendo cree que no está totalmente correcto puede dejar su impresión y siempre serán bien recibidos sus comentarios :-).

Bueno vayamos al grano del asunto.

En nuestra página index.jsp que será la que se visualizará una vez que se haya dado click en el menú de la herramienta es donde se escribe todo el código html para lograr visualizar la información que se desea recoger y mostrar de la configuración que se encuentra en la sección clustering del fichero axis2.xml, para ello es necesario que respetemos las clases CSS que usan las herramientas para lograr mantener el estilo de la vista.

Se creó una clase nombrada Axis2HandlerXML.java que es la encargada de escribir y leer del fichero axis2.xml mediante el uso del DOM y SAX que es bastante sencilla debido al negocio que tiene que resolver.

La información que se recoge en la vista es enviada a un JSP que hace función de Servlet la que interactúa directamente con la clase Axis2HandlerXML.java para almacenar toda la información recogida de la vista y escribirla directamente en el fichero axis2.xml dentro de la sección de clustering, automáticamente se actualiza la vista.

Para evitar que cualquier usuario pueda realizar un cambio en la configuración de los servidores se utiliza el tag <require-permission/> en el fichero component.xml dentro del directorio META-INF, en nuestro caso estos son los permisos que usamos: <require-permission>/permission/protected/manage</require-permission>

Una vez que hayamos realizado todos los cambios en la configuración debemos reiniciar el servidor para que los mismos se hagan efectivos y lograr disfrutar de las ventajas y mejoras que nos brinda la clusterización.

Espero que les haya interesado el desarrollo de este plugins, como ven se puediera automatizar el proceso de configuración de muchas funcionalidades de las herramientas para evitar que introduzcamos errores en los mismos y para facilitar el proceso que en no pocas ocasiones se torna algo engorroso.

Nos vemos pronto ;-)