<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Ángel C. Lázaro</title>
	<atom:link href="http://angellazaro.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://angellazaro.wordpress.com</link>
	<description>               Desarrollo e Ingeniería del Software</description>
	<lastBuildDate>Wed, 23 Nov 2011 12:00:09 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='angellazaro.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Ángel C. Lázaro</title>
		<link>http://angellazaro.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://angellazaro.wordpress.com/osd.xml" title="Ángel C. Lázaro" />
	<atom:link rel='hub' href='http://angellazaro.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Integrando Android y Drupal</title>
		<link>http://angellazaro.wordpress.com/2011/06/18/integrando-android-y-drupal/</link>
		<comments>http://angellazaro.wordpress.com/2011/06/18/integrando-android-y-drupal/#comments</comments>
		<pubDate>Sat, 18 Jun 2011 14:10:58 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=327</guid>
		<description><![CDATA[Desde los inicios de S·dos los mercados de movilidad y gestión de contenidos ha sido dos de los tres grandes ejes del desarrollo del negocio de S·dos, prueba de esta apuesta tecnológica y económica son el desarrollo tanto de numerosas apliacaciones web, como portales de gestión de contenidos, basados principalmente en Drupal, que se han [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=327&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Desde los inicios de S·dos los mercados de movilidad y gestión de contenidos ha sido dos de los tres grandes ejes del desarrollo del negocio de S·dos, prueba de esta apuesta tecnológica y económica son el desarrollo tanto de numerosas apliacaciones web, como portales de gestión de contenidos, basados principalmente en Drupal, que se han desarrollado en estos tres años de vida de S·dos.</p>
<p>En esta continua experiencia de mejora, trabajo e innovación que nos caracteriza, hemos llevado a cabo un amplio trabajo de integración entre aplicaciones web y aplicaciones móviles bajo los paradigmas de desarrollo actuales principalmente basados en la integración de aplicaciones móviles con sistemas externos ad-hoc con el que se comunican para diversas tareas.</p>
<p style="text-align:center;"><img class="aligncenter" src="http://img221.imageshack.us/img221/3486/img001n.png" alt="" width="430" height="152" /></p>
<p>Cuando nos encontramos ante la situación de llevar a cabo la implementación de esta integración contra un sistema basado en un CMS la forma de llevar a cabo la integración cambia, ya que se ha de ser capaz de ofrecer a la aplicación móvil las funcionalidades que nos demande, pero <strong><span style="text-decoration:underline;">bajo el contexto y las reglas que nos marca el CMS</span></strong>.</p>
<p>Cuando hablamos de Drupal, la integración es sencilla (por supuesto si conocemos y comprendemos su arquitectura funcional) gracias a la arquitectura lógica del sistema que basa su escalabilidad funcional en la implementación de métodos gancho y su utilización en módulos de terceras partes.</p>
<p style="text-align:center;"><img class="aligncenter" src="http://img37.imageshack.us/img37/2866/img002e.png" alt="" width="427" height="294" /></p>
<p>Para llevar a cabo este tipo de integraciones en S·dos hemos apostado por utilizar una arquitectura basada en REST a través de peticiones HTTP/GET desde la aplicación Android al portal web Drupal, respondiendo éste en formato JSON.</p>
<p style="text-align:center;"><img class="aligncenter" src="http://img808.imageshack.us/img808/6295/img003r.png" alt="" width="430" height="205" /></p>
<p>Un posible ejemplo de esta arquitectura podrían ser los siguientes fragmentos de código:</p>
<p>Ejemplo de petición Android:</p>
<p><code>public JSONArray getResultados() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;JSONArray jsonArray = new JSONArray();<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Se configura la petición<br />
&nbsp;&nbsp;&nbsp;&nbsp;HttpClient httpClient = new DefaultHttpClient();<br />
&nbsp;&nbsp;&nbsp;&nbsp;HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 10000);<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Se realiza la petición a la url necesaria<br />
&nbsp;&nbsp;&nbsp;&nbsp;HttpPost r = new HttpPost(Config.getUrlBase()+url_menu+idMenu);<br />
&nbsp;&nbsp;&nbsp;&nbsp;HttpParams params = new BasicHttpParams();<br />
&nbsp;&nbsp;&nbsp;&nbsp;List nameValuePairs = new ArrayList(2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.setEntity(new UrlEncodedFormEntity(nameValuePairs));<br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (UnsupportedEncodingException e1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Tratamiento de la excepción<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Se configura la cabecera de la petición<br />
&nbsp;&nbsp;&nbsp;&nbsp;r.setHeader("Content-Type", "application/x-www-form-urlencoded");<br />
&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Se realiza la petición<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpResponse response;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response = httpClient.execute(r);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpEntity resEntityGet = response.getEntity();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String json = new String();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (resEntityGet != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Se obtiene el JSON de respuesta<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;json = EntityUtils.toString(resEntityGet);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSONObject jsonResult = new JSONObject(json);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsonArray = jsonResult.getJSONArray(jsonCampo);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (JSONException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Tratamiento de la excepción<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (ClientProtocolException e2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Tratamiento de la excepción<br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Tratamiento de la excepción<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;return jsonArray;<br />
}</code></p>
<p>Para dar respuesta a esta petición simplemente tendremos que crear una entrada de menú en un módulo Drupal a través del hook_menu:</p>
<p><code>$items['mobile/ejemplo/%'] = array(<br />
'title' =&gt; 'Ejemplo',<br />
'page callback' =&gt; 'ver_ejemplo',<br />
'page arguments' =&gt; array(2),<br />
'access arguments' =&gt; array('access content'),<br />
'type' =&gt; MENU_NORMAL_ITEM,<br />
);</code></p>
<p>y la correspondiente función de que atiende la entrada de menú:</p>
<p><code>function ver_ejemplo($nid){<br />
return drupal_json(array('ejemplo' =&gt; node_load($nid)));<br />
exit();<br />
}</code></p>
<p>Como podemos imaginar una vez sentados estos conceptos la arquitectura se puede extender de la forma que deseemos para dar respuesta a las necesidades de nuestros clientes, permitiendo autenticación, integración con vistas, etc.</p>
<p><strong><em>&#8220;Dime y lo olvido, enséñame y lo recuerdo, involúcrame y lo aprendo&#8221;</em></strong><br />
<em>&#8211; Benjamín Franklin</em></p>
<br />Filed under: <a href='http://angellazaro.wordpress.com/category/desarrollo/'>Desarrollo</a> Tagged: <a href='http://angellazaro.wordpress.com/tag/android/'>Android</a>, <a href='http://angellazaro.wordpress.com/tag/cms/'>CMS</a>, <a href='http://angellazaro.wordpress.com/tag/drupal/'>Drupal</a>, <a href='http://angellazaro.wordpress.com/tag/java/'>Java</a>, <a href='http://angellazaro.wordpress.com/tag/php/'>PHP</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angellazaro.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angellazaro.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angellazaro.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angellazaro.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/327/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=327&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2011/06/18/integrando-android-y-drupal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>

		<media:content url="http://img221.imageshack.us/img221/3486/img001n.png" medium="image" />

		<media:content url="http://img37.imageshack.us/img37/2866/img002e.png" medium="image" />

		<media:content url="http://img808.imageshack.us/img808/6295/img003r.png" medium="image" />
	</item>
		<item>
		<title>Hacia portales OpenCms en integración continua</title>
		<link>http://angellazaro.wordpress.com/2010/07/20/hacia-portales-opencms-en-integracion-continua/</link>
		<comments>http://angellazaro.wordpress.com/2010/07/20/hacia-portales-opencms-en-integracion-continua/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 23:30:39 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Integración Continua]]></category>
		<category><![CDATA[OpenCms]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=303</guid>
		<description><![CDATA[Hace ya muchísimo tiempo que no escribo nada en el blog. La verdad que no ha sido por falta de ganas, si no como suele ocurrir por falta de tiempo. En todo este tiempo he seguido trabajando en el módulo OpenCms Free Balance pero, desde que los amigos de OpenCms Hispano me invitaran como ponente [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=303&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hace ya muchísimo tiempo que no escribo nada en el blog. La verdad que no ha sido por falta de ganas, si no como suele ocurrir por falta de tiempo. En todo este tiempo he seguido trabajando en el módulo <a href="http://code.google.com/p/opencms-free-balance/">OpenCms Free Balance</a> pero, desde que los amigos de OpenCms Hispano me invitaran como ponente a la <a href="http://www.opencmshispano.com/nav/noticias/noticia_0083.html">2ª tarde tecnológica de OpenCms</a>, he estado trabajando en algo que por aquellos días solo conseguí esbozar y que la verdad sea dicha me ha costado mucho más de lo que en un principio pensaba, pero creo que los resultado han merecido la pena: un plugin de maven que permite a los desarrolladores, tras compilar el módulo, desplegarlo en OpenCms automáticamente</p>
<p><a href="http://angellazaro.files.wordpress.com/2010/07/graph.png"><img class="aligncenter size-medium wp-image-318" title="OpenCms integración  continua" src="http://angellazaro.files.wordpress.com/2010/07/graph.png?w=300&#038;h=199" alt="" width="300" height="199" /></a></p>
<p>En un principio esa fue realmente la idea original, para la versión beta, ya que después, dándole una vuelta de turca más en base a mi experiencia en el desarrollo de portales haciendo uso de tecnología OpenCms, se me ocurrió que sería mucho más interesante que el plugin, además permitira el despliegue del módulo en un servidor remoto de forma que hiciera factible la integración continua.</p>
<p>Aunque<a href="http://chuwiki.chuidiang.org/index.php?title=Hacer_un_plugin_para_Maven"> crear un nuevo plugin</a> en Maven es realmente fácil, los mayores problemas han sido:</p>
<ol>
<li>Gestionar todas las dependencias necesarias para la obtención de un objeto CmsObject fuera del contexto de OpenCms.</li>
<li>Obtención del propio objeto CmsObject, en función de la versión de OpenCms que se use el modo de obtención de dicho CmsObject será distinto.</li>
<li>Importación y publicación del módulo dentro del contexto de OpenCms.</li>
</ol>
<p>Solucionar el problema fue fácil aunque muy tedioso ya que el proceso consistió en compilar el módulo ejecutar el plugin y cuando fallaba se busca y declara la dependencia, el resultado final ha sido:</p>
<blockquote><p>&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.tomcat&lt;/groupId&gt;<br />
&lt;artifactId&gt;servlet-api&lt;/artifactId&gt;<br />
&lt;version&gt;6.0.26&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;commons-logging&lt;/groupId&gt;<br />
&lt;artifactId&gt;commons-logging&lt;/artifactId&gt;<br />
&lt;version&gt;1.1.1&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;log4j&lt;/groupId&gt;<br />
&lt;artifactId&gt;log4j&lt;/artifactId&gt;<br />
&lt;version&gt;1.2.16&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;oro&lt;/groupId&gt;<br />
&lt;artifactId&gt;oro&lt;/artifactId&gt;<br />
&lt;version&gt;2.0.8&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;commons-collections&lt;/groupId&gt;<br />
&lt;artifactId&gt;commons-collections&lt;/artifactId&gt;<br />
&lt;version&gt;20040616&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.safehaus.uuid&lt;/groupId&gt;<br />
&lt;artifactId&gt;uuid&lt;/artifactId&gt;<br />
&lt;version&gt;2.0.0&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.dom4j&lt;/groupId&gt;<br />
&lt;artifactId&gt;dom4j&lt;/artifactId&gt;<br />
&lt;version&gt;1.6.1&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.commons.digester&lt;/groupId&gt;<br />
&lt;artifactId&gt;digester&lt;/artifactId&gt;<br />
&lt;version&gt;1.8&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;commons-beanutils&lt;/groupId&gt;<br />
&lt;artifactId&gt;commons-beanutils&lt;/artifactId&gt;<br />
&lt;version&gt;20030211.134440&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;quartz&lt;/groupId&gt;<br />
&lt;artifactId&gt;quartz&lt;/artifactId&gt;<br />
&lt;version&gt;1.5.2&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.htmlparser&lt;/groupId&gt;<br />
&lt;artifactId&gt;htmlparser&lt;/artifactId&gt;<br />
&lt;version&gt;1.6&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.tomcat&lt;/groupId&gt;<br />
&lt;artifactId&gt;jsp-api&lt;/artifactId&gt;<br />
&lt;version&gt;6.0.26&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.lucene&lt;/groupId&gt;<br />
&lt;artifactId&gt;lucene-analyzers&lt;/artifactId&gt;<br />
&lt;version&gt;2.4.1&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.lucene&lt;/groupId&gt;<br />
&lt;artifactId&gt;lucene-core&lt;/artifactId&gt;<br />
&lt;version&gt;2.4.1&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.lucene&lt;/groupId&gt;<br />
&lt;artifactId&gt;lucene-highlighter&lt;/artifactId&gt;<br />
&lt;version&gt;2.4.1&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.lucene&lt;/groupId&gt;<br />
&lt;artifactId&gt;lucene-queries&lt;/artifactId&gt;<br />
&lt;version&gt;2.4.1&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.apache.lucene&lt;/groupId&gt;<br />
&lt;artifactId&gt;lucene-snowball&lt;/artifactId&gt;<br />
&lt;version&gt;2.4.1&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;commons-email&lt;/groupId&gt;<br />
&lt;artifactId&gt;commons-email&lt;/artifactId&gt;<br />
&lt;version&gt;1.1&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;commons-dbcp&lt;/groupId&gt;<br />
&lt;artifactId&gt;commons-dbcp&lt;/artifactId&gt;<br />
&lt;version&gt;1.2.2&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;mysql&lt;/groupId&gt;<br />
&lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;<br />
&lt;version&gt;5.0.7&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;com.alkacon&lt;/groupId&gt;<br />
&lt;artifactId&gt;simapi&lt;/artifactId&gt;<br />
&lt;version&gt;0.9.8&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;commons-codec&lt;/groupId&gt;<br />
&lt;artifactId&gt;commons-codec&lt;/artifactId&gt;<br />
&lt;version&gt;1.3&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;jaxen&lt;/groupId&gt;<br />
&lt;artifactId&gt;jaxen&lt;/artifactId&gt;<br />
&lt;version&gt;1.1.1&lt;/version&gt;<br />
&lt;/dependency&gt;</p></blockquote>
<p>El siguiente problema a que tuve que solucionar fue, como he comentado antes, la obtención de un objeto CmsObject, para ello tuve que apoyarme en el código fuente de varios plugins de eclipse que permiten sincronizar los ficheros físicos con los ficheros de OpenCms, a continuación os dejo algunas de las referencias que me han sido de utilidad:</p>
<ol>
<li><a href="http://sourceforge.net/projects/opencmsmoddev/files/">OpenCms Mod Dev</a></li>
<li><a href="http://www.laughingpanda.org/mediawiki/index.php/OpenCmsVFS">OpenCms VFS</a></li>
</ol>
<p>Y el último problema que tuve que solucionar fue la importación del módulo, importación que para nada es trivial y para solucionarlo una vez más tuve que adentrarme en el código fuente de OpenCms para finalmente encontrar la solución:</p>
<blockquote><p>String importpath = OpenCms.getSystemInfo().getPackagesRfsPath();</p>
<p>importpath = OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(<br />
importpath + &#8220;modules/&#8221; + config.getModuleName());</p>
<p>// Se obtiene el módulo<br />
module = CmsModuleImportExportHandler.readModuleFromImport(importpath);</p>
<p>// check the module dependencies<br />
List dependencies = OpenCms.getModuleManager().checkDependencies(module,<br />
CmsModuleManager.DEPENDENCY_MODE_IMPORT);<br />
if (dependencies.size() &gt; 0) {<br />
// some dependencies not fulfilled<br />
StringBuffer missingModules = new StringBuffer();<br />
Iterator it = dependencies.iterator();<br />
while (it.hasNext()) {<br />
CmsModuleDependency dependency = (CmsModuleDependency) it.next();<br />
missingModules.append(&#8220;  &#8220;).append(dependency.getName()).append(&#8220;, Version &#8220;).append(<br />
dependency.getVersion()).append(&#8220;\r\n&#8221;);<br />
}<br />
System.out.println(&#8220;[ERROR] &#8221; + module.getName() + &#8220;, Version &#8221; + module.getVersion() + missingModules);<br />
}</p>
<p>// check the imported resource types for name / id conflicts<br />
List checkedTypes = new ArrayList();<br />
Iterator i = module.getResourceTypes().iterator();<br />
while (i.hasNext()) {<br />
I_CmsResourceType type = (I_CmsResourceType) i.next();<br />
// first check against the already configured resource types<br />
int externalConflictIndex = OpenCms.getResourceManager().getResourceTypes().indexOf(type);<br />
if (externalConflictIndex &gt;= 0) {<br />
I_CmsResourceType conflictingType = (I_CmsResourceType) OpenCms.getResourceManager()<br />
.getResourceTypes().get(externalConflictIndex);<br />
if (!type.isIdentical(conflictingType)) {<br />
// if name and id are identical, we assume this is a module replace operation<br />
throw new CmsConfigurationException(org.opencms.loader.Messages.get().container(<br />
org.opencms.loader.Messages.ERR_CONFLICTING_MODULE_RESOURCE_TYPES_5,<br />
new Object[] {type.getTypeName(), new Integer(type.getTypeId()), module.getName(),<br />
conflictingType.getTypeName(), new Integer(conflictingType.getTypeId())}));<br />
}<br />
}<br />
// now check against the other resource types of the imported module<br />
int internalConflictIndex = checkedTypes.indexOf(type);<br />
if (internalConflictIndex &gt;= 0) {<br />
I_CmsResourceType conflictingType = (I_CmsResourceType) checkedTypes.get(internalConflictIndex);<br />
throw new CmsConfigurationException(org.opencms.loader.Messages.get().container(<br />
org.opencms.loader.Messages.ERR_CONFLICTING_RESTYPES_IN_MODULE_5,<br />
new Object[] {module.getName(), type.getTypeName(), new Integer(type.getTypeId()),<br />
conflictingType.getTypeName(), new Integer(conflictingType.getTypeId())}));<br />
}<br />
// add the resource type for the next check<br />
checkedTypes.add(type);<br />
}</p>
<p>// Se comprueba si el módulo esta instalado<br />
if(!OpenCms.getModuleManager().hasModule(module.getName())){<br />
OpenCms.getModuleManager().addModule(cmsObject, module);<br />
} else {<br />
OpenCms.getModuleManager().updateModule(cmsObject, module);<br />
}</p>
<p>// reinitialize the resource manager with additional module resource types if necessary<br />
if (module.getResourceTypes() != Collections.EMPTY_LIST) {<br />
OpenCms.getResourceManager().initialize(cmsObject);<br />
}<br />
// reinitialize the workplace manager with additional module explorer types if necessary<br />
if (module.getExplorerTypes() != Collections.EMPTY_LIST) {<br />
OpenCms.getWorkplaceManager().addExplorerTypeSettings(module);<br />
}</p>
<p>// import the module resources<br />
CmsImport cmsImport = new CmsImport(cmsObject,<br />
new CmsShellReport(cmsObject.getRequestContext().getLocale()));<br />
CmsImportParameters parameters = new CmsImportParameters(importpath, &#8220;/&#8221;, true);<br />
cmsImport.importData(parameters);</p>
<p>cmsObject.publishResource(&#8220;/&#8221;);</p></blockquote>
<p>Para la primera versión del módulo, una vez que compruebe el correcto funcionamiento en distintas plataformas el objetivo de esta primera versión estará cumplido, el siguiente paso será que el plugin permita el despliegue remoto de módulos de forma que se permita la integración continua.</p>
<br />Filed under: <a href='http://angellazaro.wordpress.com/category/integracion-continua/'>Integración Continua</a> Tagged: <a href='http://angellazaro.wordpress.com/tag/opencms/'>OpenCms</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angellazaro.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angellazaro.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angellazaro.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angellazaro.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/303/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=303&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2010/07/20/hacia-portales-opencms-en-integracion-continua/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2010/07/graph.png?w=300" medium="image">
			<media:title type="html">OpenCms integración  continua</media:title>
		</media:content>
	</item>
		<item>
		<title>Integrando Hibernate y Maven en un módulo de OpenCms</title>
		<link>http://angellazaro.wordpress.com/2010/04/28/integrando-hibernate-y-maven-en-un-modulo-de-opencms/</link>
		<comments>http://angellazaro.wordpress.com/2010/04/28/integrando-hibernate-y-maven-en-un-modulo-de-opencms/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 21:12:27 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[OpenCms]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=292</guid>
		<description><![CDATA[Una de las tareas que forman parte de la release-beta del módulo opencms-free-balance es llevar a cabo la integración de este módulo con Hibernate para facilitar su interacción con la base de datos, para ejecutar esta tarea he seguido con el enfoque que en GMV seguimos (y que recomiendo encarecidamente) a la hora de trabajar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=292&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Una de las tareas que forman parte de la <a href="http://code.google.com/p/opencms-free-balance/issues/list?can=1&amp;q=label%3AReleaseBeta">release-beta</a> del módulo <a href="http://code.google.com/p/opencms-free-balance/">opencms-free-balance</a> es llevar a cabo la integración de este módulo con Hibernate para facilitar su interacción con la base de datos, para ejecutar esta tarea he seguido con el enfoque que en <a href="http://www.gmv.com">GMV</a> seguimos (y que recomiendo encarecidamente) a la hora de trabajar con este gestor de contenidos y sus módulos, utilizar Maven como herramienta de construcción de dichos módulos.</p>
<p>La utilización de Maven como herramienta de construcción en el proceso de desarrollo de los módulos facilita enormemente tareas habituales como: la <strong>gestión de  dependecias</strong>, <strong>generación del desplegable</strong> en OpenCms, <strong>generación de reportes</strong>, <strong>ejecución de tests</strong>, etc.</p>
<p>Bueno, pues manos a la obra. El primer paso para integrar Hibernate en un módulo de OpenCms es declarar las dependecias necesarias en el <em>pom.xml </em>del módulo, a continuación se deberán declarar en el fichero <em>manifest.xml</em> para que sean incluidas en el directorios <em>WEB-INF/lib</em> de OpenCms. También se tendrá que configurar el fichero <em>hibernate.cfg.xml</em> con los datos de conexión con la base de datos, anotar convenientemente las entidades que interacutarán con la base de datos y por último se tendrá que implementar la interfaz DAO que se haya definido (si es que se ha definido). Adjunto el <a href="http://www.box.net/shared/o0f21ubtj1">módulo</a> para que os sirva como ejemplo/punto de partida (es el proyecto eclipse completo, para generar el instalable, como siempre, ejecutar &#8220;mvn clean install&#8221;).</p>
<p>Esta posible solución es válida en aquellos módulos, como es el caso del módulo opencms-free-balance, que deben ser lo más autocontenidos, fáciles de instalar e independientes. En otros escenarios, en los que se está llevando a cabo un desarrollo a medida, con varios módulos accediendo a la base de datos, es mejor otro tipo de aproximaciones como la propuesta por <a href="http://www.sagasoluciones.com/nav/index.html">Saga</a> con su <a href="http://www.templatesaga.com/nav/descargas/descarga_0004.html">módulo</a> de integración (de propósito general) entre OpenCms e Hibernate.</p>
<blockquote><p>Lo maravilloso de aprender es que nadie puede arrebatárnoslo.</p></blockquote>
<br />Filed under: <a href='http://angellazaro.wordpress.com/category/desarrollo/'>Desarrollo</a> Tagged: <a href='http://angellazaro.wordpress.com/tag/hibernate/'>Hibernate</a>, <a href='http://angellazaro.wordpress.com/tag/maven/'>Maven</a>, <a href='http://angellazaro.wordpress.com/tag/opencms/'>OpenCms</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angellazaro.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angellazaro.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angellazaro.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angellazaro.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/292/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=292&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2010/04/28/integrando-hibernate-y-maven-en-un-modulo-de-opencms/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>
	</item>
		<item>
		<title>Sincronización de instancias de OpenCms</title>
		<link>http://angellazaro.wordpress.com/2010/02/08/sincronizacion-de-instancias-de-opencms/</link>
		<comments>http://angellazaro.wordpress.com/2010/02/08/sincronizacion-de-instancias-de-opencms/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 23:26:44 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[OpenCms]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=269</guid>
		<description><![CDATA[Uno de los temas sobre los que más se habló en la tarde tecnológica de OpenCms fue sobre los problemas que existían a la hora de poner OpenCms en clúster sin contar con el módulo de pago OCEE, pues bien, desde hace algún tiempo vengo trabajando, en mis ratos libres, en un módulo para este [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=269&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Uno de los temas sobre los que más se habló en la <a href="http://angellazaro.wordpress.com/2010/01/14/tarde-tecnologica-opencms/">tarde tecnológica de OpenCms</a> fue sobre los problemas que existían a la hora de poner OpenCms en clúster sin contar con el módulo de pago OCEE, pues bien, desde hace algún tiempo vengo trabajando, en mis ratos libres, en un módulo para este CMS que permita disponer de varias instancias del gestor de contenidos, consumiendo los datos de una base de datos común, de forma que los cambios que realice en una instancia se propaguen a las demás. Por defecto, OpenCms dispone de una serie de funcionalidades de caché que no permiten el comportamiento anterior, dificultando de esta forma la posibilidad de disponer de un clúster de instancias de OpenCms.</p>
<p>Para paliar este problema he desarrollado el módulo &#8220;org.opencms.free.balance&#8221; cuya base de funcionamiento es sencilla, cada vez que se realice una modificación de los contenidos, desde cualquiera de las instancias de OpenCms, todas las demás se actualizan, a través de un servicios web, de forma que el contenido está disponible y listo para ser servido por cualquiera de los nodos.</p>
<p><a href="http://angellazaro.files.wordpress.com/2010/02/balancefreeengine1.png"><img class="aligncenter size-medium wp-image-280" title="Funcionamiento" src="http://angellazaro.files.wordpress.com/2010/02/balancefreeengine1.png?w=300&#038;h=175" alt="" width="300" height="175" /></a>La anatomía del módulo es la siguiente:</p>
<p><a href="http://angellazaro.files.wordpress.com/2010/02/balancefreecomponents1.png"><img class="aligncenter size-medium wp-image-279" title="Balance Free Components" src="http://angellazaro.files.wordpress.com/2010/02/balancefreecomponents1.png?w=300&#038;h=120" alt="" width="300" height="120" /></a></p>
<ol>
<li><strong>admin</strong>: Componente encargado de llevar a cabo la administración de los nodos, en esta primera versión <strong>alpha</strong> sólo CRUD de los nodos del cluster.</li>
<li><strong>action</strong>: Componente encargado de interceptar las acciones que se realizan sobre OpenCms y en función de dicha acción creación, modificiación, etc le pedirá a los demás nodos del clúster que se actualicen para que puedan disponer de los cambios realizados.</li>
<li><strong>client</strong>: Componente que se encarga de realizar la llamada de sincronización del servicio web.</li>
<li><strong>webservice</strong>: Componente que se encarga de atender las peticiones de los clientes y de sincronizar, borrando la caché de OpenCms del servidor que se encuentra alojado.</li>
</ol>
<p>Para llevar a cabo su instalación es necesario, además de desplegar el módulo, <a href="http://angellazaro.wordpress.com/2009/01/18/web-services-sobre-opencms/">instalar un servicio web en el contexto de OpenCms</a>.</p>
<p>He creado un <a href="http://code.google.com/p/opencms-free-balance/">proyecto</a> en Google Code donde os podréis descargar el módulo, por supuesto, cualquiera que se anime a colaborar será bienvenido <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<br />Filed under: <a href='http://angellazaro.wordpress.com/category/desarrollo/'>Desarrollo</a> Tagged: <a href='http://angellazaro.wordpress.com/tag/opencms/'>OpenCms</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angellazaro.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angellazaro.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angellazaro.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angellazaro.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/269/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=269&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2010/02/08/sincronizacion-de-instancias-de-opencms/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2010/02/balancefreeengine1.png?w=300" medium="image">
			<media:title type="html">Funcionamiento</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2010/02/balancefreecomponents1.png?w=300" medium="image">
			<media:title type="html">Balance Free Components</media:title>
		</media:content>
	</item>
		<item>
		<title>Tarde Tecnológica OpenCms</title>
		<link>http://angellazaro.wordpress.com/2010/01/14/tarde-tecnologica-opencms/</link>
		<comments>http://angellazaro.wordpress.com/2010/01/14/tarde-tecnologica-opencms/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 22:57:16 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[OpenCms]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=262</guid>
		<description><![CDATA[Esta tarde he tenido la oportunidad de poder asistir a un evento organizado por OpenCms Hispano e Ingenia titulado &#8220;Tarde Tecnológica OpenCms&#8220;. Respecto al evento y a todo lo que él se ha hablado y tratado sólo puedo tener palabras de alabanza. Ha sido una reunión en la que muchos profesionales del sector que nos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=262&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Esta tarde he tenido la oportunidad de poder asistir a un evento organizado por <a href="http://www.opencmshispano.es/">OpenCms Hispano</a> e <a href="http://www.ingenia.es/">Ingenia</a> titulado &#8220;<a href="http://www.opencmshispano.es/nav/noticias/noticia_0068.html">Tarde Tecnológica OpenCms</a>&#8220;.</p>
<p><img class="alignnone" title="Reunión" src="http://idiomas.practicopedia.com/files/reuniones%20de%20trabajo476_0.jpg" alt="" width="476" height="360" /></p>
<p>Respecto al evento y a todo lo que él se ha hablado y tratado sólo puedo tener palabras de alabanza. Ha sido una reunión en la que muchos profesionales del sector que nos dedicamos al desarrollo web basado en <a href="http://www.opencms.org/en/">OpenCms</a> hemos expuesto nuestras experiencias e impresiones y en la que se han puesto de manifiesto una serie de ideas que pueden dar como resultado, con el esfuerzo de todos, un cambio en la dirección en la que se mueve actualmente la comunidad de <a href="http://www.opencms.org/en/">OpenCms</a>.</p>
<p>A todos los asistentes muchas gracias y en especial a los organizadores del evento, Sergio Raposo y Alejandro Alves, sólo espero que pronto podamos volver a vernos todos y continuar tratando temas tan interesantes y útiles como los que hemos tratado hoy.</p>
<p>Personalmente me ha encantado la idea que Sergio a propuesto de reunirnos para hacer un sprint.</p>
<p>A todos muchas gracias.</p>
<br />Posted in Uncategorized Tagged: Open, OpenCms <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angellazaro.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angellazaro.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angellazaro.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angellazaro.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/262/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/262/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=262&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2010/01/14/tarde-tecnologica-opencms/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>

		<media:content url="http://idiomas.practicopedia.com/files/reuniones%20de%20trabajo476_0.jpg" medium="image">
			<media:title type="html">Reunión</media:title>
		</media:content>
	</item>
		<item>
		<title>Rendimiento en aplicaciones PHP</title>
		<link>http://angellazaro.wordpress.com/2009/10/22/rendimiento-en-aplicaciones-php/</link>
		<comments>http://angellazaro.wordpress.com/2009/10/22/rendimiento-en-aplicaciones-php/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 00:05:01 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[KCacheGrind]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[The Grinder]]></category>
		<category><![CDATA[Xdebug]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=242</guid>
		<description><![CDATA[En esta última semana he comenzado a participar en un nuevo proyecto. Consiste en hacer una auditoría del rendimiento y la calidad del software de una aplicación implementada con tecnología PHP. El problema está en que la aplicación va degradando el servidor de aplicaciones web Apache hasta que este provoca una denegación de servicio y [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=242&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En esta última semana he comenzado a participar en un nuevo proyecto. Consiste en hacer una auditoría del rendimiento y la calidad del software de una aplicación implementada con tecnología PHP. El problema está en que la aplicación va degradando el servidor de aplicaciones web Apache hasta que este provoca una denegación de servicio y es preciso reiniciarlo.</p>
<p>Para esta auditoría se van a utilizar diversas herramientas:</p>
<p>1. Análisis del rendimiento de la aplicación web. En esta parte se localizarán los cuellos de botella en tiempo de ejecución y en definitiva los motivos por los cuales la aplicación consigue degradar el servidor hasta el punto de hacer que provoque la denegación de servicio antes comentada. Para ello se van a utilizar dos herramientas, <a href="http://grinder.sourceforge.net/">The Grinder</a> y <a href="http://kcachegrind.sourceforge.net/html/Home.html">XCacheGrind</a>.</p>
<ul>
<li><strong>The Grinder</strong>. Me la recomendó mi compañero <a href="http://amunizmartin.wordpress.com/">Antonio</a>, y es simplemente espectacular. Es una herramienta basada software libre y su funcionamiento e instalación es muy simple, está basado en una consola central y en uno o varios agentes, cada uno de estos agentes (que son distribuidos entre distintas máquinas físicas) despliega una serie de workers y cada uno de estos workers despliega los hilos que los agentes tengan configurados. Además proporciona un proxy que nos permite realizar las pruebas UI fácilmente con cualquier navegador.</li>
</ul>
<div id="attachment_250" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-250" title="The Grinder" src="http://angellazaro.files.wordpress.com/2009/10/graph.png?w=300&#038;h=216" alt="Esquema de funcionamiento de The Grinder" width="300" height="216" /><p class="wp-caption-text">Esquema de funcionamiento de The Grinder</p></div>
<ul>
<li><strong>XCacheGrind</strong>. Esta herramienta tiene dos variantes WinCacheGrind y KCacheGrind y permiten visualizar gráficamente el consumo de tiempo que cada una de las funciones o scripts PHP ha tardado en ejecutarse y <a href="http://www.xdebug.com/docs/profiler">otra información</a> que puede ser de interés para realizar las tareas de profile. Para ello hace uso de los logs que proporciona <a href="http://www.xdebug.com/">XDebug</a>, que se tendrán que configurar con los siguientes parámetros:</li>
</ul>
<blockquote><p>xdebug.remote_autostart = On<br />
xdebug.remote_enable=On<br />
xdebug.profiler_output_dir = &#8220;/home/aclr/kcachegrind/&#8221;<br />
xdebug.trace_output_dir = &#8220;/home/aclr/kcachegrind/&#8221;<br />
xdebug.profiler_append = On<br />
xdebug.profiler_enable = On<br />
xdebug.auto_trace = On</p></blockquote>
<p>Veamos un ejemplo de la información que obtenemos haciendo uso de estas herramientas:</p>
<blockquote><p>&lt;?php<br />
function escribe($cad){<br />
echo $cad.&#8217;&lt;br/&gt;&#8217;;<br />
}</p>
<p>for($i = 0 ; $i &lt; 100 ; $i++){<br />
for($j = 0; $j &lt; 100 ; $j++){<br />
escribe(&#8220;hola&#8221;);<br />
}<br />
}<br />
?&gt;</p></blockquote>
<p><img class="aligncenter size-medium wp-image-258" title="Distribución de la ejecución" src="http://angellazaro.files.wordpress.com/2009/10/0015.png?w=300&#038;h=160" alt="Distribución de la ejecución" width="300" height="160" /></p>
<p>Como se puede apreciar en esta imagen solo el 9.6% del tiempo consumido en la ejecución es utilizado por la función escribe, el resto, el 99.4% del tiempo de ejecución se ejecuta en el main, es decir, en el bucle, en un caso real una situación análoga a esta nos diría que tenemos que tratar de centrar nuestros esfuerzos de optimización en el main, no en la función escribe.</p>
<p>En próximas entradas intentaré hablar un poco más en profundidad de The Grinder y sobre las herramientas que se utilizarán para el análisis de la calidad del código.</p>
<p>Aunque me gusta terminar mis posts con la cita de alguna frase célebre que trate o evoque sobre el tema del que versa el post, esta vez voy no podrá ser, son las 2:04 y me voy a la cama <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<br />Posted in Desarrollo Tagged: KCacheGrind, PHP, The Grinder, Xdebug <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angellazaro.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angellazaro.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/242/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=242&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2009/10/22/rendimiento-en-aplicaciones-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2009/10/graph.png?w=300" medium="image">
			<media:title type="html">The Grinder</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2009/10/0015.png?w=300" medium="image">
			<media:title type="html">Distribución de la ejecución</media:title>
		</media:content>
	</item>
		<item>
		<title>Comunidad y software libre</title>
		<link>http://angellazaro.wordpress.com/2009/10/12/comunidad-y-software-libre/</link>
		<comments>http://angellazaro.wordpress.com/2009/10/12/comunidad-y-software-libre/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 11:01:25 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Miscelánea]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[software libre]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=227</guid>
		<description><![CDATA[El otro día estaba hablando con una buena amiga de la facultad sobre su proyecto fin de carrera, se trata de un portal web implementado con tecnología Drupal, me preguntaba si conocía algún tipo de software, libre, para hacer pruebas de usabilidad, la verdad que me quedé un poco a cuadros, ya que no tenía [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=227&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>El otro día estaba hablando con una buena amiga de la facultad sobre su proyecto fin de carrera, se trata de un portal web implementado con tecnología Drupal, me preguntaba si conocía algún tipo de software, libre, para hacer pruebas de usabilidad, la verdad que me quedé un poco a cuadros, ya que no tenía idea de qué contestarle.</p>
<p>Cuando llegué a mi casa al curiosidad me pudo y me puse a buscar información acerca de este tema, tras un rato empecé a vislumbrar que para la realización de las pruebas de usabilidad existen dos tipos de herramientas, las herramientas de eyetracking y las herramientas de clicktracking. Mientras que las primeras, las más avanzadas, se basan en recoger dónde mira el ojo cuando está visualizando la información, las segundas recogen dónde ha hecho click el ratón en la página html, ambas, sin embargo, muestran los resultados de una forma muy parecida, utilizando <a href="http://en.wikipedia.org/wiki/Heat_map">heatmaps</a>.</p>
<div class="wp-caption aligncenter" style="width: 460px"><img title="heatmap" src="http://www.techyard.net/wp-content/uploads/2008/08/heatmap.jpg" alt="Ejemplo de heatmap" width="450" height="334" /><p class="wp-caption-text">Ejemplo de heatmap</p></div>
<p>El siguiente paso fue buscar herramientas que proporcionaran las funcionalidades de las que hablaba antes, cuál fue mi sorpresa cuando de repente veo que existe un <a href="http://drupal.org/project/click_heatmap">módulo de Drupal</a> que permite mostrar heatmaps integrándose con la librería de la herramienta <a href="http://www.labsmedia.com/clickheat/index.html">ClickHeat</a>.</p>
<p>Estas son las cosas que a uno le hacen pensar y plantearse cosas. La oferta de gestores de contenidos de software libre es amplísima, Drupal, OpenCms, Joomla, Mambo, Magnolia y un largo etcétera, pero a la hora de elegir uno en ¿qué parámetros debemos basarnos?, pueden ser muchos, rendimiento, escalabilidad, curva de aprendizaje, etc, pero para mí uno indispensable es la comunidad de usuarios que haya alrededor del cms en cuestión, una comunidad activa que ayude a través de foros, faq´s, listas de correos, etc, una comunidad que desarrolle y comparta sus desarrollos.</p>
<p>En mi experiencia con los gestores de contenidos he tenido la oportunidad de trabajar con dos de ellos, OpenCms y Drupal. Independientemente de la tecnología, arquitectura, etc utilizada en cada uno de ellos hay una diferencia entre ellos que veo sumamente clara, y es la comunidad, mientras que en Drupal tenemos una activa comunidad con más de 300 módulos desarrollados, compatibles con la versión 6 del gestor de contenidos, en OpenCms es complicado si quiera encontrar una décima parte de esos módulos.</p>
<p>¿Por qué en una comunidad autónoma, como la nuestra, en la que se ha hecho y se sigue haciendo una apuesta tan fuerte por el software libre son tan pocas las empresas proveedoras que siguen este enfoque y se convierten en meras consumidoras de software libre?</p>
<p>Como he citado en otras ocasiones:</p>
<blockquote><p>El software es como el sexo, es mejor cuando es libre. <a href="http://es.wikipedia.org/wiki/Linus_Torvalds">Linus </a><a href="http://es.wikipedia.org/wiki/Linus_Torvalds">Torvalds</a></p></blockquote>
<br />Posted in Miscelánea Tagged: Drupal, software libre <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angellazaro.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angellazaro.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angellazaro.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angellazaro.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/227/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=227&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2009/10/12/comunidad-y-software-libre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>

		<media:content url="http://www.techyard.net/wp-content/uploads/2008/08/heatmap.jpg" medium="image">
			<media:title type="html">heatmap</media:title>
		</media:content>
	</item>
		<item>
		<title>Software libre, de verdad</title>
		<link>http://angellazaro.wordpress.com/2009/08/03/software-libre-de-verdad/</link>
		<comments>http://angellazaro.wordpress.com/2009/08/03/software-libre-de-verdad/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 23:12:45 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Docbook]]></category>
		<category><![CDATA[OpenCms]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=214</guid>
		<description><![CDATA[Hace algún tiempo comenzamos con el desarrollo de un proyecto utilizando tecnología OpenCms, como fruto de este trabajo hemos liberado cinco nuevos módulos que esperamos sea de utilidad para la comunidad (los módulos están modelados con maven y documentados con docbook): RestrictedVFSWidget Este módulo es una evolución del wdiget de exploración de OpenCms, con él [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=214&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hace algún tiempo <a href="http://www.gmv.es">comenzamos</a> con el desarrollo de un proyecto utilizando tecnología OpenCms, como fruto de este trabajo hemos <a href="http://www.opencmshispano.es/nav/noticias/noticia_0065.html">liberado</a> <a href="http://programame.net/story/liberados-5-nuevos-modulos-opencms">cinco nuevos módulos</a> que esperamos sea de utilidad para la <a href="http://www.opencms-wiki.org/Available_Modules">comunidad</a> (los módulos están <a href="http://amunizmartin.wordpress.com/2008/11/06/modulos-opencms-y-maven/">modelados con maven</a> y documentados con docbook):</p>
<p><span style="text-decoration:underline;"><strong><span>RestrictedVFSWidget</span></strong></span></p>
<p>Este módulo es una evolución del wdiget de exploración de OpenCms, con él se modelará el comportamiento de un árbol de exploración del directorio virtual de OpenCms en el que tan sólo se mostrarán los directorios y aquellos tipos de contenidos que se hayan configurado en la declaración del tipo de contenido que lo use.</p>
<p><span style="text-decoration:underline;"><strong><span>SurveyModule</span></strong></span></p>
<p>Con este módulo se amplía el funcionamiento del módulo Alkacon OAMP Survey Module, de manera que se ofrece la posibilidad de generar las gráficas de los informes en flash mediante Open Flash Chart.</p>
<p><span style="text-decoration:underline;"><strong> Modulo Alfresco</strong></span></p>
<p>El objetivo de este módulo es proporcionarle a los usuarios de OpenCms una herramienta con la que asignar recursos de un gestor documental Alfresco para ser utilizados en el portal. De esta forma se consigue separar la capa de gestión de contenidos de la capa de gestión documental, pudiendo aprovechar todas las funcionalidades que un gestor documental como Alfresco proporciona.</p>
<p><span style="text-decoration:underline;"><strong><span>Georeference</span></strong></span></p>
<p>Este módulo permite llevar a cabo la geolocalización de puntos a través de Google Maps, estableciendo las localizaciones directamente sobre un mapa que se muestra en el formulario de alta/edición de contenidos de OpenCms.</p>
<p><span style="text-decoration:underline;"><strong>Thesaurus</strong></span></p>
<p>El objetivo de este módulo es proporcionarle a los usuarios de OpenCms una herramienta con la que etiquetar los contenidos (noticias, eventos, etc) que se utilicen en el portal.</p>
<blockquote><p><span>El software es como el sexo, es mejor cuando es libre. <a href="http://es.wikipedia.org/wiki/Linus_Torvalds">Linus </a></span><a href="http://es.wikipedia.org/wiki/Linus_Torvalds">Torvalds</a></p></blockquote>
<br />Posted in Desarrollo Tagged: Docbook, OpenCms <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angellazaro.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angellazaro.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angellazaro.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angellazaro.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/214/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=214&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2009/08/03/software-libre-de-verdad/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>
	</item>
		<item>
		<title>Puntos de administración en OpenCms 7.0.5</title>
		<link>http://angellazaro.wordpress.com/2009/05/25/puntos-de-administracion-en-opencms-7-0-5/</link>
		<comments>http://angellazaro.wordpress.com/2009/05/25/puntos-de-administracion-en-opencms-7-0-5/#comments</comments>
		<pubDate>Mon, 25 May 2009 22:17:07 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[OpenCms]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=194</guid>
		<description><![CDATA[Hace ya algo menos de un año que comencé a trabajar con el gestor de contenidos OpenCms 7.0.5, durante este tiempo he desarrollado nuevos tipos de contenidos, widgets personalizados y puntos de administración, para el desarrollo de estas tareas me he servido de muchos recursos online pero sobre todo me ha sido de gran utilidad [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=194&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hace ya algo menos de un año que comencé  a trabajar con el gestor de contenidos OpenCms 7.0.5, durante este tiempo he desarrollado nuevos tipos de contenidos, widgets personalizados y puntos de administración, para el desarrollo de estas tareas me he servido de muchos recursos online pero sobre todo me ha sido de gran utilidad el <a href="http://www.opencmshispano.com:8080/mvnforum/mvnforum/index">foro</a> de la comunidad de <a href="http://www.opencmshispano.es/nav/index.html">OpenCmsHispano</a>, es por ello que he decidido realizar este tutorial cuando el otro día me encontré con este <a href="http://www.opencmshispano.com:8080/mvnforum/mvnforum/viewthread?thread=1176">mensaje</a>, manos a la obra.</p>
<p>Un punto de administración en OpenCms es una entrada en la vista de administración del gestor de contenidos con la que podremos realizar ciertas operaciones, OpenCms trae en su distribución básica una serie de entradas de administración con la que se podrán llevar a cabo tareas de administracion de usuarios, módulos, caché, etc, así como los mecanismos necesarios para extender con nuevas entradas estas funcionalidades de administración</p>
<div id="attachment_204" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-204" title="001" src="http://angellazaro.files.wordpress.com/2009/05/001.png?w=300&#038;h=166" alt="Vista de administración del workplace" width="300" height="166" /><p class="wp-caption-text">Vista de administración del workplace</p></div>
<p>Para crear un nuevo punto de administración en OpenCms deberemos crear la correspondiente estructura de directorios en <strong>/system/workplace/admin </strong>es en este directorio donde se definen los puntos de administración a través de la creación y edición de propiedades de los directorios.</p>
<div id="attachment_205" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-205" title="002" src="http://angellazaro.files.wordpress.com/2009/05/002.png?w=300&#038;h=166" alt="Correspondencia con la zona de administración" width="300" height="166" /><p class="wp-caption-text">Correspondencia con la zona de administración</p></div>
<p>En este tutorial vamos a crear un nuevo punto de administración en OpenCms denominado <strong>&#8220;Personas&#8221; </strong>que nos permitirá hacer CRUD de entidades de tipo persona, para ello he desarrollado un nuevo módulo que he denominado <strong>&#8220;PersonManagement&#8221;</strong>. Como veréis cuando instaléis el módulo (y reincieis el servidor de aplicaciones) el módulo genera un nuevo directorio <strong>/system/workplace/admin</strong>, si accedemos a las propiedades de este directorio veremos que se encuentran editadas las siguientes propiedades:</p>
<ul>
<li><strong>Description</strong>: Establece el texto que se mostrará en la caja <strong>&#8220;Ayuda&#8221;</strong> de la zona de administración.</li>
<li><strong>NavImage</strong>: Establece la imagen que se mostrará en la zona de administración.</li>
<li><strong>NavInfo</strong>: Establece el nombre del grupo al que pertenecerá el nuevo punto de administración.</li>
<li><strong>NavPos</strong>: Establece con un número real (float) la posición que ocupará el icono del nuevo punto de administración.</li>
<li><strong>NavText</strong>: Establece el texto que aparecerá bajo el icono del punto de administración.</li>
<li><strong>Title</strong>: Establece el título del directorio aunque no es de utilidad dentro de la zona de administración.</li>
<li><strong>admintoolhandler-class</strong>: Establece la clase que se ejecutará para hacer la gestión de los permisos de acceso al punto de administración.</li>
<li><strong>default-file</strong>: Establece la página jsp que se ejecutará cuando accedamos a ese directorio.</li>
</ul>
<div id="attachment_206" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-206" title="003" src="http://angellazaro.files.wordpress.com/2009/05/003.png?w=300&#038;h=166" alt="Propiedades del directorio" width="300" height="166" /><p class="wp-caption-text">Propiedades del directorio</p></div>
<p>Si accedemos a este directorio veremos que podemos encontrar tres páginas jsp person_list.jsp (genera el listado de los elementos), person_edit.jsp (genera el formulario de edición de los elementos de tipo persona) y person_new.jsp (genera el formulario de creación de elementos de tipo persona), si accedemos a cada una de estas páginas veremos cómo podemos encontrar un fragmento de código que sigue el siguiente patrón:</p>
<p>&lt;%@page import=&#8221;paquete.de.la.clase.*&#8221;%&gt;<br />
&lt;%<br />
NmbreClase admin = new NmbreClase(pageContext, request, response);<br />
admin.displayDialog();<br />
%&gt;</p>
<p>Como podemos observar para generar el formulario solo necesitamos una clase, que extenderá las correspondientes clase de OpenCms, y que se encargará de generar todo el código html necesario para<br />
generar un listado o un formulario de edición o de alta.</p>
<p>En estas páginas jsp también es necesario editar las propiedades para que el contenido de dichas páginas se muetren correctamente.</p>
<p>También me gustaría haceros un par de recomendaciones para el desarrollo de funcionalidades con OpenCms:</p>
<ul>
<li><a href="http://www.opencms.org/en/development/cvs.html">Código fuente de OpenCms</a>.</li>
<li><a href="http://www.packtpub.com/opencms-7-development/book">El libro OpenCms 7 Development</a>.</li>
</ul>
<p><a href="http://www.box.net/shared/zefb4fp46q">Código del módulo</a></p>
<blockquote><p>La información compartida progresa y mejora, de manera que su valor sólo puede aumentar. El conocimiento acaparado simplemente se detiene. Paul Jones, director de <a href="http://www.ibiblio.org/index.html">ibiblio</a>.</p></blockquote>
<br />Posted in Desarrollo Tagged: OpenCms <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angellazaro.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angellazaro.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angellazaro.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angellazaro.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/194/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=194&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2009/05/25/puntos-de-administracion-en-opencms-7-0-5/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2009/05/001.png?w=300" medium="image">
			<media:title type="html">001</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2009/05/002.png?w=300" medium="image">
			<media:title type="html">002</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2009/05/003.png?w=300" medium="image">
			<media:title type="html">003</media:title>
		</media:content>
	</item>
		<item>
		<title>Openfire y OpenCms se conocen</title>
		<link>http://angellazaro.wordpress.com/2009/04/28/openfire-y-opencms-se-conocen/</link>
		<comments>http://angellazaro.wordpress.com/2009/04/28/openfire-y-opencms-se-conocen/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 21:15:58 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[OpenCms]]></category>
		<category><![CDATA[Openfire]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=182</guid>
		<description><![CDATA[En el proyecto en el que actualmente estoy trabajando tiene la necesidad de incorporar un servicio de mensajería instantánea (IM), como punto de partida mi compañero Manu me recomendó que empezara estudiando la tecnología que había desarrollada alrededor del protocolo Jabber (protocolo libre IM basado en XML). Alrededor de este protocolo hay toda una comunidad [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=182&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En el proyecto en el que actualmente estoy trabajando tiene la necesidad de incorporar un servicio de mensajería instantánea (IM), como punto de partida mi compañero <a href="http://www.manuelrecena.com">Manu</a> me recomendó que empezara estudiando la tecnología que había desarrollada alrededor del protocolo <a href="http://es.wikipedia.org/wiki/Jabber">Jabber</a> (protocolo libre IM basado en XML).</p>
<p>Alrededor de este protocolo hay toda una comunidad de software libre que se dedica al desarrollo tanto de servidores como de clientes <a href="http://es.wikipedia.org/wiki/XMPP">XMPP</a>. Entre todos los servidores que estuve evaluando me decanté por uno que por su extensibilidad, tecnología y comunidad me convenció, <a href="http://www.igniterealtime.org/projects/openfire/index.jsp">Openfire</a>. Se trata de un servidor de código abierto basado en Java, extensible a través de plugins y desarrollado por la comunidad bajo licencia GPL.</p>
<p>Como comentaba antes en el proyecto existía la necesidad de integrar un servidor de mensajería instantánea, la integración de Openfire con <a href="http://www.opencms.org/en/">Opencms</a>, el CMS que estamos utilizando, consistía en la autenticación de los usuarios. Para conseguirlo hemos tenido que hacer dos cosas, una del lado de OpenCms y otra de Openfire.</p>
<p><strong>OpenCms</strong></p>
<p>Hemos desarrollado un <a href="http://angellazaro.wordpress.com/2009/01/18/web-services-sobre-opencms/">módulo de OpenCms que ofrece un servicio web</a> con dos operaciones para realizar la autenticación de usuario, a este servicio web solo hay que pasarle el usuario y la contraseña encriptada, él se encargará de comprobar que el usuario y la contraseña son correctos así como de chequear toda la lógica de negocio, devolviendo un objeto en el que se indica si el proceso ha sido correcto.</p>
<p><strong>Openfire</strong></p>
<p>En este caso hemos <a href="http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/plugin-dev-guide.html">desarrollado un plugin</a> que cuenta con un cliente para el servicio web y que es el encargado de hacer la petición. Para que Openfire realice la autenticación utilizando la clase que hemos desarrollado, y que ha de implementar la interfaz (<span class="n">AuthProvider</span>), en el método de inicialización del plugin hemos de cambiar la propiedad <strong><span class="s">provider.auth.className </span></strong><span class="s">para indicarle que utilice nuestra clase, es sumamente importante que previo a este paso hayamos registrado en el classpath del plugin dicha clase.<br />
</span></p>
<p><span class="s">Una vez hecho esto, OpenCms y Openfire ya se conocen ;-p</span></p>
<blockquote>
<p class="resaltado">No hay lugares remotos. En virtud de los medios de comunicación actuales, todo es ahora. <strong>Herbert Marshall Mcluhan</strong></p>
</blockquote>
<br />Posted in Desarrollo Tagged: OpenCms, Openfire <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angellazaro.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angellazaro.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angellazaro.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angellazaro.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/182/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&amp;blog=4544954&amp;post=182&amp;subd=angellazaro&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2009/04/28/openfire-y-opencms-se-conocen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>
	</item>
	</channel>
</rss>
