Archive for febrero, 2009

Desarrollo OSGi en Eclipse

En todos los ejemplo de OSGi que he estado publicando en este blog he utilizado como contenedor OSGi Apache Felix. Pero también comentamos que Eclipse estaba basado en OSGi y por tanto funciona sobre su motor OSGi Equinox.

Como mi IDE actualmente es Eclipse, voy a tratar el tema de desarrollo OSGi utilizando este magnífico entorno libre. Para ello trasladaré lo hecho en el ejemplo de gestión de dependencias con OSGi y lo probaré sobre Equinox.

Para desarrollar OSGi con eclipse, lo más cómodo es utilizar el PDE (Plugin Development Extension) de Eclipse, ya que realmente los plugins de Eclipse son módulos OSGi. Si no bajamos nuestro eclipse con PDE integrado deberemos instalarlo.

Creamos un nuevo proyecto. En la ventana de selección de wizard seleccionamos dentro de «Plug-in Development» la opción «Plug-in Project». Le damos un nombre al proyecto de forma habitual y selecciono como «Target platform» un framework OSGi standar.

osgi_eclipse1

En la siguiente ventana le damos los datos que van a formar parte del MANIFEST.MF: id, nombre, proveedor, versión. Relleno los campos para que mantenga los valores que en su día teníamos. Dejamos sin marcar la casilla de generar un Activator, ya que tenemos uno ya creado. Con esto podemos dar por concluido el wizard de creación del proyecto.

osgi_eclipse2

Se nos abre el editor especial para el MANIFEST.MF en el que tenemos distintas pestañas como por ejemplo la vista general («overview») o la de ver el MANIFEST en texto:

osgi_eclipse3_640x650 osgi_eclipse4_640x650

Copio o añado los fuentes que tenía en el módulo de logs que utilizamos para ver la gestión de dependencias en OSGi. Podremos ver un error en la compilación debido a que no reconoce las clases OSGi. Sin embargo Eclipse nos sugiere la solución: Añadir como dependencia el paquete org.osgi.framework. Lo podemos añadir mediante la sugerencia de Eclipse, o en la pestaña dependencias de nuestro MANIFEST.MF, en la que podemos ver todos los paquetes exportados.

osgi_eclipse5

Ahora en la pestaña «runtime» podemos añadir los paquetes que exporta nuestro módulo. Seleccionamos el mismo paquete que exportábamos entonces (org.tcymu.osgi.log.logger) y luego en las propiedades de lo exportado ponemos la versión (1.0.1). por último en la pestaña de visión general podemos declarar el activador (LogBundle).

En la misma pestaña de visión general también tenemos un enlace para lanzar el framework. Si lo ejecutamos veremos la traza que sacaba nuestro módulo al arrancar:

osgi> 18-02-2009 18:28:16.47: Arrancando LogBundle

Podemos utilizar el comando ss (similar al ps que vimos en Felix) para ver el estado de los módulos:

osgi_eclipse6

Si tecleamos help veremos la lista completa de comandos, en la que descubrimos que el comando stop seguido por el identificador del módulo detiene ese módulo, y que el comando exit nos sirve para detener completamente la ejecución.

Por último voy a crear un nuevo proyecto de tipo plugin para el módulo de nuestra aplicación. En él copiamos el código fuente del módulo de aplicación tal como lo teníamos en los anteriores ejemplos. Nos aparecerán los errores de dependencias tanto de las clases OSGi como de las clases del módulo de logs. Y vemos que podemos importar tanto los de OSGi como los de nuestro módulo de logs. Tras definir la clase de activación ejecutamos el módulo y todo funciona correctamente, arrancándose también el módulo de logs.

osgi_eclipse7_640x243

Y esto es todo por hoy.

23 febrero 2009 at 8:39 pm 2 comentarios

Herramientas CakePHP: Scaffolding y bake

En esta entrada vamos a ver un par de utilidades que nos ayudan a lanzar casi desde cero nuestra aplicación CakePHP. Me estoy refiriendo al scaffolding y a bake. Nos vamos a servir de la aplicación que desarrollamos en «Mi primera aplicación CakePHP» (parte 1 y parte 2), que era un pequeño gestor de enlaces. Empezamos con el scaffolding, que podemos traducir como andamiaje. Partimos de una instalación de CakePHP limpia en la que he configurado la conexión a la base de datos. En dicha base de datos tengo definidas las tablas para enlaces y comentarios tal como vimos en las entradas nombradas anteriormente. También tomamos los mismos modelos que teníamos entonces: comment.php y link.php. Ahora creamos un controlador vacío salvo la variable scaffold:

<?php
class LinksController extends AppController {
	var $scaffold;
}
?>

Y exactamente igual para los comentarios:

<?php
class CommentsController extends AppController {
	var $scaffold;
}
?>

Y con esto apuntamos nuestro navegador a nuestra aplicación CakePHP (por ejemplo en http://server:port/) seguido por «links» vemos el efecto de scaffolding:

Scaffolding 1

Podemos ver un listado de enlaces, además podemos añadir nuevos enlaces o comentarios o listar estos últimos. Si añadimos algún enlace y nos movemos un poco por las páginas generadas podemos notar que CakePHP ha reconocido la relación entre Link y Comment y en las páginas aparece esa relación.

Scaffolding 2

Scaffolding 3

Como vemos el scaffolding nos puede ayudar enormemente en los pasos iniciales de un proyecto, o para poder introducir datos para probar. Vamos ahora con bake. Bake es una herramienta de línea de comandos, por lo que lo más cómodo para utilizarla es tenerla en el path y por tanto la he añadido. En este caso vamos a crear una aplicación nueva a partir de nuestra base de datos ya creada. Nos situamos en la carpeta en la que queremos crear nuestra aplicación y ejecutamos cake bake appname donde appname es el nombre que queremos dar a nuestra aplicación (testbake en mi caso). CakePHP después de que le confirmemos la ruta de la aplicación procede a copiar el esqueleto de una aplicación en el lugar elegido y acto seguido nos ayuda a configurar el acceso a la base de datos. Si ahora nos situamos en una consola en el directorio raíz de nuestra aplicación (C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\testbake en mi caso) y ejecutamos cake bake vemos el menú de la aplicación.

Bake 1

Vemos opciones para «hornear» (traducción de bake) un proyecto (copia el esqueleto de aplicación tal como acabamos de hacer), la configuración a la base de datos (también lo acabamos de hacer), modelo, controladores y vistas. Empezamos con los modelos, por lo que selecciono la opción adecuada. Puedo ver que CakePHP ha encontrado mis tablas de base de datos. Vamos con el modelo para los enlaces. Vemos que nos pregunta si queremos incluir validación y en caso afirmativo nos aparece un listado para que seleccionemos la validación de cada campo. Después nos pregunta si queremos añadir relaciones. Si respondemos afirmativamente nos detecta la relación existente en la base de datos y nos pide confirmarla:

Bake 2

Finalmente nos pregunta si queremos crear clases de test para nuestro modelo. De momento no voy a crear clases de test. Podemos ver el modelo que ha creado:

 array('maxlength'),
		'url' => array('url')
	);

	//The Associations below have been created with all possible keys, those that are not needed can be removed
	var $hasMany = array(
			'Comment' => array('className' => 'Comment',
								'foreignKey' => 'link_id',
								'dependent' => false,
								'conditions' => '',
								'fields' => '',
								'order' => '',
								'limit' => '',
								'offset' => '',
								'exclusive' => '',
								'finderQuery' => '',
								'counterQuery' => ''
			)
	);

}
?>

Parece bastante aceptable aunque sea como punto de partida. Haremos lo mismo con el modelo de los comentarios y pasamos a los controladores. Si seleccionamos la opción de controladores y le indicamos que queremos crearlo interactivamente, lo primero que nos pregunta es si queremos hacer scaffolding. Si le decimos que sí nos creará el controlador con la variable scaffold tal como hemos visto antes. Si por el contrario le decimos que no nos irá preguntando si queremos añadir métodos comunes (index, add, etc), si vamos a usar algún Helper, Componente o Sesiones. Según lo que le indiquemos nos creará un controlador que nos servirá muy bien como punto de partida. Finalmente vamos con las vistas. Para crear vistas nos pregunta si queremos vistas creadas con scaffolding o sin él. Si es sin scaffolding nos creará el archivo de la vista en el directorio adecuado pero nada más (CakePHP no puede adivinar lo que queremos hacer) y si es con scaffolding nos creará unas vistas que igualmente no pueden ser bastante útiles como punto de partida.

<div class="comments form">
create('Comment');?>
	<fieldset>
 		<legend></legend>
	input('link_id');
		echo $form->input('comment');
	?>
	</fieldset>
end('Submit');?></div>
<div class="actions">
<ul>
	<li>link(__('List Comments', true), array('action'=>'index'));?></li>
	<li>link(__('List Links', true), array('controller'=> 'links', 'action'=>'index')); ?></li>
	<li>link(__('New Link', true), array('controller'=> 'links', 'action'=>'add')); ?></li>
</ul>
</div>

Por último indicar que una vez nos acostumbremos a bake podemos saltarnos los menús, ya que casi todas las acciones tiene un comando más directo. Por ejemplo:

  • cake bake model Link nos llevaría a crear el modelo para los enlaces.
  • cake bake controller Comments scaffold nos llevaría a la creación de un controlador para comentarios con la variable scaffold.

Como conclusión vemos que estas herramientas de CakePHP nos pueden ser muy útiles en el arranque de un nuevo proyecto, aunque después siempre tendremos que tocar todo.

12 febrero 2009 at 7:34 pm 13 comentarios


Mi perfil

View Miguel Orbegozo's profile on LinkedIn

Feedjit

Feeds

Otros…

BlogESfera Directorio de Blogs Hispanos - Agrega tu Blog

Bitacoras.com

Add to Technorati Favorites