<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2078473753998654039</id><updated>2012-01-26T17:08:20.855+01:00</updated><category term='PHP'/><category term='IN2'/><category term='NTLM'/><category term='SCEA'/><category term='Presentación'/><category term='Sun'/><category term='Calidad'/><category term='Portal'/><category term='ECM'/><category term='Office'/><category term='BEA Weblogic'/><category term='OpenOffice'/><category term='Alfresco'/><category term='Windows'/><category term='Liferay'/><category term='Oracle'/><category term='Solr'/><category term='SOA'/><category term='CAS'/><title type='text'>Standard Operating Procedure</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-6193596987810255183</id><published>2011-11-08T23:50:00.000+01:00</published><updated>2011-11-08T23:50:33.052+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Solr'/><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Alfresco 4 y Solr</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;i&gt;Hace poco se ha presentado en sociedad la versión 4.0 Community de Alfresco que incluye el que posiblemente sea el cambio arquitectónico más importante desde la aparición de este ECM: la desvinculación de los índices del motor de gestión documental mediante la utilización de Solr.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La arquitectura de Alfresco desde su primera versión hasta las últimas versiones Enterprise siempre se ha basado en tres componentes fundamenteles: la base de datos, el repositorio de documentos y los índices de Lucene. Los dos primeros componentes, por su naturaleza y por las tecnologías usadas para implementar Alfresco, han estado desvinculados del núcleo de Alfresco de forma que su instalación se podía hacer de forma independiente a la aplicación Alfresco. No ha sido así en el caso de los índices de Lucene, que siempre se deben desplegar en el mismo servidor físico que la aplicación principal de Alfresco.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La principal repercusión de esta arquitectura es que la escalabilidad global de la plataforma estaba condicionada por uno de los elementos fundamentales. Mientras que la base de datos y el repositorio de documentos se podían escalar de forma independiente a la aplicación principal, los índices siempre tenían que crecer al mismo ritmo que las instancias de Alfresco que formarán la plataforma. Aunque existían mecanismos para paliar esta situación algunos inconvenientes eran inevitables, sobre todo en instalaciones en clúster:&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;b&gt;Más espacio en disco ocupado&lt;/b&gt;: los índices completos se deben replicar en todas las instancias de Alfresco. Para un cluster de dos nodos con un repositorio de 40Gb eso representa 8Gb. Para un repositorio de 4Tb estaríamos hablando de casi 800Gb.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Más tráfico de red&lt;/b&gt;: la necesidad de replicar los índices entre los nodos de un clúster incrementa el tráfico de red.Para instalaciones de más de 4 nodos de Alfresco este tráfico supone una cantidad importante y la necesidad de equipos de red dedicados en exclusiva a esta función.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Más costes de licencias&lt;/b&gt;: para incrementar el rendimiento de los índices es necesario utilizar más instancias de Alfresco, lo que implica nuevas licencias para las versiones Enterprise.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Penalización del rendimiento&lt;/b&gt;: las operaciones de indexación de contenidos de texto pueden ser bastante costosas y repercuten en el rendimiento de la aplicación pudiendo causar un aumento de los tiempos de respuesta de las peticiones de los clientes.&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZxGi_4f3iEc/Trhq_huWOVI/AAAAAAAAAMg/Uc8DeWCruw4/s1600/lucene.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-ZxGi_4f3iEc/Trhq_huWOVI/AAAAAAAAAMg/Uc8DeWCruw4/s320/lucene.PNG" width="255" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;La nueva versión de Alfresco ofrece una solución a todos estos inconvenientes y abre una nueva vía para construir implantaciones de Alfresco muchísimo más escalables y con un gran potencial de crecimiento y ahorro de costes.&lt;br /&gt;&lt;br /&gt;La solución consiste en sustituir los índices de Lucene que se han utilizado hasta ahora por un nuevo sistema de indexación basado en &lt;a href="http://lucene.apache.org/solr/"&gt;&lt;b&gt;Apache Solr&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Apache Solr es la plataforma de búsquedas corporativas de Apache Lucene. Sus características principales incluyen potentes búsquedas de texto completo, resaltadao de resultados, búsqueda por facetas, clustering dinámico, integración con bases de datos, documentos ricos (por ejemplo, Word, PDF), manipulación y búsquedas geoespaciales. Solr es altamente escalable, proporcionando búsquedas distribuidas y replicación de índices, y el motor de búsqueda y navegación de muchos de los sitios de internet más grandes del mundo.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Dentro de la arquitectura de Alfresco la inclusión de soporte para Solr quiere decir que la función de los índices ya no está forzosamente vinculada a cada instancia de Alfresco sino que se delega en un sistema separado que se gestiona de forma independiente. A priori, este enfoque ofrece interesantes ventajas:&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;b&gt;Reduce la carga de los servidores de Alfresco&lt;/b&gt;: las costosas operaciones de indexación ahora se realizarán en un servidor a parte por lo que los servidores de Alfresco dispondrán de mayor capacidad para servir peticiones.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;b&gt;Mayor escalabilidad&lt;/b&gt;: se puede dar mayor potencia a la herramienta de indexación y búsqueda cuando se necesite, sin tener que aumentar el número de servidores de Alfresco.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;b&gt;Reducción de costes&lt;/b&gt;: se puede conseguir mayor eficiencia con menos licencias de Alfresco y reaprovechando la infraestructura de búsquedas corporativa.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;b&gt;Reducción del espacio&lt;/b&gt;: en caso de tener un cluster, los índices pueden estar en una única ubicación y no replicados en todos los servidores de Alfresco.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;b&gt;Mayor fiabilidad en los clústers&lt;/b&gt;: al tener unos índices compartidos por las diferentes instancias de Alfresco se reduce el riesgo de sufrir problemas de sincronización y de corrupción de índices.&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-rdrzPXgH054/TrmyDEYAHlI/AAAAAAAAAMo/hVMWoy1rEuk/s1600/solr.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-rdrzPXgH054/TrmyDEYAHlI/AAAAAAAAAMo/hVMWoy1rEuk/s320/solr.PNG" width="256" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Además de todas estas ventajas, la gente de Alfresco también ha pensado en todos aquellos que están contentos con Lucene o que tienen alguna dependencia de esta solución y por eso ha mantenido el soporte a Lucene. Esto quiere decir que el uso de Solr o de Lucene es una decisión de los implantadores de Alfresco para que puedan escoger la solución que mejor se ajuste a las necesidades de cada uno. De esta forma aumenta la riqueza que el producto ofrece a sus usuarios.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-6193596987810255183?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/6193596987810255183/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=6193596987810255183' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6193596987810255183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6193596987810255183'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2011/11/alfresco-4-y-solr.html' title='Alfresco 4 y Solr'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ZxGi_4f3iEc/Trhq_huWOVI/AAAAAAAAAMg/Uc8DeWCruw4/s72-c/lucene.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-1449558062173202118</id><published>2011-07-20T18:07:00.000+02:00</published><updated>2011-07-20T18:07:38.181+02:00</updated><title type='text'>Integración de Alfresco y Liferay</title><content type='html'>&lt;style&gt;&lt;!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:0cm; line-height:115%; font-size:11.0pt; font-family:"Calibri","sans-serif";}h1 {mso-style-link:"Título 1 Car"; margin-right:0cm; margin-left:0cm; font-size:24.0pt; font-family:"Times New Roman","serif"; font-weight:bold;}h3 {mso-style-link:"Título 3 Car"; margin-right:0cm; margin-left:0cm; font-size:13.5pt; font-family:"Times New Roman","serif"; font-weight:bold;}h5 {mso-style-link:"Título 5 Car"; margin-right:0cm; margin-left:0cm; font-size:10.0pt; font-family:"Times New Roman","serif"; font-weight:bold;}p {margin-right:0cm; margin-left:0cm; font-size:12.0pt; font-family:"Times New Roman","serif";}pre {mso-style-link:"HTML con formato previo Car"; margin:0cm; margin-bottom:.0001pt; font-size:10.0pt; font-family:"Courier New";}span.Ttulo1Car {mso-style-name:"Título 1 Car"; mso-style-link:"Título 1"; font-family:"Times New Roman","serif"; font-weight:bold;}span.Ttulo3Car {mso-style-name:"Título 3 Car"; mso-style-link:"Título 3"; font-family:"Times New Roman","serif"; font-weight:bold;}span.Ttulo5Car {mso-style-name:"Título 5 Car"; mso-style-link:"Título 5"; font-family:"Times New Roman","serif"; font-weight:bold;}span.HTMLconformatoprevioCar {mso-style-name:"HTML con formato previo Car"; mso-style-link:"HTML con formato previo"; font-family:"Courier New";}span.code-tag {mso-style-name:code-tag;}span.code-quote {mso-style-name:code-quote;}span.code-keyword {mso-style-name:code-keyword;}span.code-comment {mso-style-name:code-comment;}span.code-object {mso-style-name:code-object;}.MsoPapDefault {margin-bottom:10.0pt; line-height:115%;}@page WordSection1 {size:595.3pt 841.9pt; margin:70.85pt 3.0cm 70.85pt 3.0cm;}div.WordSection1 {page:WordSection1;} /* List Definitions */ ol {margin-bottom:0cm;}ul {margin-bottom:0cm;}--&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="WordSection1"&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;a href="" name="PortletDocLibdeAlfrescoparaLiferay-DocLi"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 24pt;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;El portlet DocLib de Alfresco proporciona todas las funcionalidades del componente document library de Alfresco Share dentro de un portal. Este portlet se ofrece en tres modalidades: acceso a todo el repositorio de Alfresco, acceso a las document libraries de los sites de los que se es miembro o acceso a la document library de un site en concreto.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;a href="" name="PortletDocLibdeAlfrescoparaLiferay-Funci"&gt;&lt;/a&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 13.5pt;"&gt;Funcionalidades&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Estos portlets incluyen casi todas las funcionalidades del Share aunque con las siguientes excepciones:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;No existe la acción "Ver enAlfresco Explorer" para los espacios.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;En la vista de detalles, no semuestra la sección "Compartir".&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Los nombres de los usuarios noestán enlazados a las páginas de sus perfiles.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Al no mostrarse la cabecera de la aplicación Share, no hay acceso a la barra de herramientas, a otras páginas de los sites ni a los dasboards de la aplicación.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;a href="" name="PortletDocLibdeAlfrescoparaLiferay-Insta"&gt;&lt;/a&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 13.5pt;"&gt;Instalación&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;El siguiente procedimiento de instalación asume las siguientes condiciones:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Alfresco está instalado y funcionando. La versión probada es la 3.4 Enterprise pero también debería funcionar con las versiones Community.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Liferay está instalado y funcionando. La versión probada es la 6 EE pero también se ha probado con éxito es la 6 EE SP1 y 6.0.5 GA.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Las modificaciones indicadas se han de hacer con Alfresco y Liferay detenidos.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Tanto Liferay como Alfresco están instalados en Tomcat.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Configuración de Liferay&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Si Liferay y Alfresco están en la misma máquina pero en servidores de aplicaciones distintos, hay que cambiar los puertos usados por el Tomcat de Liferay para evitar conflictos. Localizar y modificar el siguiente fichero &amp;lt;LIFERAY_HOME&amp;gt;/tomcat/conf/server.xml como sigue:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;lt;Server port="8105" shutdown="SHUTDOWN"&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;lt;Connector port="8180" protocol="HTTP/1.1"&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connectionTimeout="20000"&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; redirectPort="8443" URIEncoding="UTF-8" /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;lt;Connector port="8109" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Configuración de Alfresco&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;En el Alfresco hay que añadir los siguientes elementos en el fichero &amp;lt;ALFRESCO_HOME&amp;gt;/tomcat/shared/classes/alfresco-global.properties.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;authentication.chain=alfrescoNtlm1:alfrescoNtlm,external1:external&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;external.authentication.proxyUserName=&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Advertencia: La autenticación necesaria para el portlet es incompatible con el mecanismo de autenticación passthru.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="" name="PortletDocLibdeAlfrescoparaLiferay-Despl"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Desplegar la aplicación Share en Liferay&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Copiar el fichero share.war de la instancia de Alfresco en el directorio deploy del Liferay.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="" name="PortletDocLibdeAlfrescoparaLiferay-Confi"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Configurar la aplicación Share en Liferay&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Localizar y modificar el fichero &amp;lt;LIFERAY_HOME&amp;gt;/tomcat/conf/catalina.properties con la siguiente línea:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;shared.loader=${catalina.home}/shared/classes,${catalina.home}/shared/lib/*.jar&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Crear la carpeta &amp;lt;LIFERAY_HOME&amp;gt;/tomcat/shared/classes/alfresco/web-extension y añadir un fichero llamado shared-config-custom.xml con el siguiente contenido:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9IBlTkp-vPc/Tib9IEx8UGI/AAAAAAAAAL8/xxtjCpH0rT8/s1600/doclib-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-9IBlTkp-vPc/Tib9IEx8UGI/AAAAAAAAAL8/xxtjCpH0rT8/s1600/doclib-01.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Nota: en caso de que el Alfresco no esté instalado en la misma máquina que el Liferay o esté instalado en un puerte diferente al 8080, hay que modificar los endpoints para que apunten a la ubicación correcta.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="" name="PortletDocLibdeAlfrescoparaLiferay-Inici"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Iniciar Alfresco y Liferay&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Arrancar primero la instancia de Alfresco y a continuación la de Liferay. Para que los portlets desplieguen correctamente es necesario que el Alfresco esté arrancado.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Añadir los portlets a una página de Liferay&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Los portlets de Alfresco están disponibles bajo la categoría Alfresco del menú Añadir Aplicación de Liferay. Cada uno de los portlets se ha de desplegar en su propia página y no puede haber dos o más portlets en la misma página.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Es necesario que en Alfresco y en Liferay existan los mismos usuarios por lo que es aconsejable que exista algún tipo de sincronización entre ambos repositorios de usuarios y un SSO entre sus sesiones.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;a href="" name="PortletDocLibdeAlfrescoparaLiferay-Conte"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 24pt;"&gt;Contextualización&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;El portlet de acceso al repositorio por defecto da acceso a todos los espacios del repositorio. En el ámbito de una integración Liferay-Alfresco más extensa es interesante que el portlet detecte automáticamente en qué comunidad de Liferay está ubicado y muestre directamente el espacio de Alfresco correspondiente a esa comunidad.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;El enfoque adoptado para la contextualización del portlet ha sido el siguiente: añadimos una preferencia al portlet con un valor por defecto. Al instanciar el portlet, si la preferencia tiene el valor por defecto, éste mostrará el espacio de la comunidad donde esté ubicado el portlet. En caso de que el portlet esté ubicado en una página personal de usuario, mostrará la carpeta personal del usuario en Alfresco. Si la preferencia del portlet contiene un path de un espacio en Alfresco, este path será el que se mostrará.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 13.5pt;"&gt;Modificar la definición del portlet&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;El primer paso es modificar el fichero de definición del porlet (portlet.xml) para añadir la preferencia y los parámetros de inicio del portlet:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-qNPBw09Ldek/Tib8RT0NyJI/AAAAAAAAAL4/9gUtG8QG9XE/s1600/doclib-02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-qNPBw09Ldek/Tib8RT0NyJI/AAAAAAAAAL4/9gUtG8QG9XE/s1600/doclib-02.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;También hay que hacer un cambio en el fichero liferay-portlet.xml para determinar el ámbito de las preferencias que acabamos de definir:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;lt;portlet&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;portlet-name&amp;gt;ShareRepoBrowser&amp;lt;/portlet-name&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;preferences-unique-per-layout&amp;gt;true&amp;lt;/preferences-unique per-layout&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;user-principal-strategy&amp;gt;screenName&amp;lt;/user-principal-strategy&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;lt;/portlet&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 13.5pt;"&gt;Creación de la página de edición de las preferencias&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;A continuación hay que crear una página en Alfresco Share que permita editar la preferencia que hemos añadido en el apartado anterior. La definición de la página será la siguiente:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-r6S7BvGz21U/Tib6aflNjvI/AAAAAAAAAL0/twIvkHW_VSc/s1600/doclib-03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-r6S7BvGz21U/Tib6aflNjvI/AAAAAAAAAL0/twIvkHW_VSc/s1600/doclib-03.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Esta página estará basada en una platilla donde haremos referencia al webscript que permitirá la definición de la preferencia:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-bwdNXzUkAXc/Tib6SJMjqiI/AAAAAAAAALw/AJi8ar0vFwk/s1600/doclib-04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-bwdNXzUkAXc/Tib6SJMjqiI/AAAAAAAAALw/AJi8ar0vFwk/s1600/doclib-04.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;a href="" name="PortletDocLibdeAlfrescoparaLiferay-Creac"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 13.5pt;"&gt;Creación del webscript de edición de las preferencias&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;El webscript de edición de la preferencia presenta un formulario con un campo de texto donde se puede entrar un path de Alfresco. La acción del formulario apuntará de nuevo al portlet para grabar la preferencia.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;La definición del web script será:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-VfHvy5dAaVA/Tib5otB0axI/AAAAAAAAALs/bGUtxbaldpA/s1600/doclib-05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-VfHvy5dAaVA/Tib5otB0axI/AAAAAAAAALs/bGUtxbaldpA/s1600/doclib-05.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;El controlador del webscript será muy sencillo y sólo lo utilizaremos para capturar el estado del portlet:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ykshjXuynJA/Tib5ivFBzVI/AAAAAAAAALo/wN6_tzb57v8/s1600/doclib-06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-ykshjXuynJA/Tib5ivFBzVI/AAAAAAAAALo/wN6_tzb57v8/s1600/doclib-06.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;La plantilla de visualización será de tipo html:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-t6isJw1UMXw/Tib5APtnYgI/AAAAAAAAALk/f5V3tt-615U/s1600/doclib-07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-t6isJw1UMXw/Tib5APtnYgI/AAAAAAAAALk/f5V3tt-615U/s1600/doclib-07.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;En esta plantilla es importante el elemento &lt;i&gt;prefSiteId&lt;/i&gt; que contiene el valor de la preferencia en el portal.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;La presentación del formulario requiere unos estilos para que se visualice correctamente: Estos estilos ya los lleva Alfresco por defecto:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-BhVQV_2Jpw0/Tib42LSNrDI/AAAAAAAAALg/LmbtLxYdPhA/s1600/doclib-08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-BhVQV_2Jpw0/Tib42LSNrDI/AAAAAAAAALg/LmbtLxYdPhA/s1600/doclib-08.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Este webscript se ha de completar con los ficheros de internacionalización que sean necesarios.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;a href="" name="PortletDocLibdeAlfrescoparaLiferay-Modif"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 13.5pt;"&gt;Modificar implementación del portlet doclib&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;La clase que implementa el portlet se llama ProxyPortlet y se puede encontrar en el fichero alfresco-share-3.4.0.jar de la aplicación share.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;En la definición de constantes añadiremos:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-of_2NcGTIEw/Tib3_j5CPOI/AAAAAAAAALc/pZQwJf_0vIk/s1600/doclib-09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-of_2NcGTIEw/Tib3_j5CPOI/AAAAAAAAALc/pZQwJf_0vIk/s1600/doclib-09.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="WordSection1"&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;En el método init hay que incluir:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/--n0na2k6JA4/Tib32IqWR8I/AAAAAAAAALY/HphxTVO0co8/s1600/doclib-10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/--n0na2k6JA4/Tib32IqWR8I/AAAAAAAAALY/HphxTVO0co8/s1600/doclib-10.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;El método doView lo modificaremos para que localice una preferencia llamada param y, en caso de que aparezca, sustiuirla por el valor de la comunidad en la que se encuentra la instacia del portlet. Este cambio lo hacemos en el bucle que recorre las preferencias del portlet:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-aXwxf8AuxyU/Tib26mw96-I/AAAAAAAAALU/yb2ST4iRhIM/s1600/doclib-11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-aXwxf8AuxyU/Tib26mw96-I/AAAAAAAAALU/yb2ST4iRhIM/s1600/doclib-11.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="WordSection1"&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;a href="" name="PortletDocLibdeAlfrescoparaLiferay-Ajust"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 13.5pt;"&gt;Ajustes finales&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;Hay dos elementos del código de Alfresco Share que impiden que la contextualización funciona tal como está definida.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;El primero es el tratamiento de la URLs que hace la plantilla del webscript de la documentlibrary porque necesita que los parámetros le lleguen por la window.location. Para solucionar este problema hay que comentar en la plantilla &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;documentlibrary.inc.ftl&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt; el siguiente condicional:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; if (loc.hash === "" &amp;amp;&amp;amp; loc.search !== &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;"")&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt;"&gt;El segundo elemento es un estilo CSS que colisiona con los estilos de Liferay. Este estilo se encuentra en el fichero reset-fonts-grids.css y hay que borrarlo de dicho fichero:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;body{text-align:center;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;a href="" name="PortletDocLibdeAlfrescoparaLiferay-Estru"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 13.5pt;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-1449558062173202118?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/1449558062173202118/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=1449558062173202118' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/1449558062173202118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/1449558062173202118'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2011/07/integracion-de-alfresco-y-liferay.html' title='Integración de Alfresco y Liferay'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-9IBlTkp-vPc/Tib9IEx8UGI/AAAAAAAAAL8/xxtjCpH0rT8/s72-c/doclib-01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-7684542207160663802</id><published>2011-04-21T14:13:00.019+02:00</published><updated>2011-05-18T10:58:10.945+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Soluciones de backup y restore para Alfresco</title><content type='html'>&lt;div style="text-align: justify;"&gt;Uno de los requisitos habituales que piden las organizaciones cuando están estudiando implantar una herramienta de gestión documental, como &lt;a href="http://www.alfresco.com/"&gt;Alfresco&lt;/a&gt;, es que la gestión de los &lt;span style="font-style: italic;"&gt;backups &lt;/span&gt;de los contenidos sea lo más sencilla posible.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La gestión de los &lt;span style="font-style: italic;"&gt;bakups &lt;/span&gt;tiene dos vertientes de interés:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;La definición de una política de &lt;span style="font-style: italic;"&gt;backup &lt;/span&gt;y &lt;span style="font-style: italic;"&gt;restore &lt;/span&gt;de todo el repositorio de contenidos. Normalmente vinculada a la estrategia de &lt;span style="font-style: italic;"&gt;Disaster Recovery&lt;/span&gt; del sistema.&lt;/li&gt;&lt;li&gt;La definición de una estrategia para la recuperación de contenidos individuales "perdidos" durante la operativa habitual del sistema.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;En el caso particular de Alfresco, no hay herramientas concretas proporcionadas por el fabricante para ninguna de estas dos tareas. Lo máximo de lo que se dispone es de un conjunto de recomendaciones o &lt;span style="font-style: italic;"&gt;best practices&lt;/span&gt; para conseguir estos objetivos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Full backups&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un &lt;span style="font-style: italic;"&gt;backup&lt;/span&gt; completo de Alfresco implica tres elementos: el repositorio de contenidos, la base de datos y los índices de Lucene.&lt;br /&gt;&lt;br /&gt;De los tres elementos mencionados los más importantes son el repositorio de contenidos y la base de datos. Estos dos elementos se han de guardar conjuntamente y recuperar también juntos. Restaurar un elemento sin estar sincronizado con el otro implica acabar con un repositorio corrupto. Los índices no son tan importantes porque siempre se pueden recuperar a partir de la información de la base de datos y el repositorio.&lt;br /&gt;&lt;br /&gt;La mejor estrategia de &lt;span style="font-style: italic;"&gt;backup&lt;/span&gt; consiste en detener el Alfresco y hacer el &lt;span style="font-style: italic;"&gt;backup&lt;/span&gt; de cada componente usando las herramientas proporcionadas por los fabricantes de cada sistema. Llamaremos a esta estrategia &lt;span style="font-style: italic; font-weight: bold;"&gt;cold bakcup&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;En el caso de que no se pueda detener el servicio de Alfresco para hacer la copia se tendrá que proceder a una copia en caliente del sistema. Llamaremos a esta estrategia &lt;span style="font-style: italic; font-weight: bold;"&gt;hot backup&lt;/span&gt;. Esta solución es más delicada y depende sobre todo de la capacidad del sistema de base de datos de realizar copias seguras (respetando la transaccionalidad del sistema). En esta solución el orden en el que se guardan los elementos es fundamental y se debe respetar para garantizar una copia consistente de los datos. El orden es el siguiente:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Asegurarse de que el &lt;span style="font-style: italic;"&gt;backup&lt;/span&gt; automático de los índices se ha completado. Ha de existir la carpeta &lt;span style="font-weight: bold;"&gt;backup-lucene-indexes&lt;/span&gt; en el directorio apuntado por &lt;span style="font-weight: bold;"&gt;dir.root&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Hacer la copia de seguridad de la base de datos utilizando las herramientas proporcionadas por el fabricante del RDBMS.&lt;/li&gt;&lt;li&gt;Inmediatemente después de guardar la base de datos, hay que copiar los subdirectorios del directorio &lt;span style="font-weight: bold;"&gt;dir.root&lt;/span&gt;. Esta operación se puede hacer con rsync, xcopy, robocopy o cualquier otra herramienta de copia.&lt;/li&gt;&lt;/ol&gt;La razón de este orden es que los elementos de base de datos que se hayan añadido después de guardar los índices, se pueden regenerar mediante una reindexación (AUTO o FULL) de los índices de Lucene. Los contenidos que se hayan añadido al repositorio después de que se haya guardado la base de datos se consideraran fuera del backup y podrán entrar en el siguiente (si se guardara antes el repositorio que la base de datos, podrían aparecer elementos huérfanos que son más difíciles de recuperar).&lt;br /&gt;&lt;br /&gt;La operación de restore consiste en detener el Alfresco y restaurar la copia de la base de datos y la copia del sistema de ficheros. Al arrancar de nuevo el Alfresco, puede ser necesario modificar el parámetro index.recovery.mode y ponerlo a FULL o a AUTO para que regenere los índices que falten.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Restore de ficheros únicos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cuando un contenido de Alfresco se pierde por el motivo que sea (aunque lo más seguro sea por negligencia del usuario) se puede recuperar de diversas formas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Si el documento tiene activado el versionado, se puede recuperar la versión anterior del historial de versiones y guardarla como la versión actual. Esta es una buena práctica para documentos de trabajo con actualizaciones frecuentes.&lt;/li&gt;&lt;li&gt;Si el documento ha sido borrado accidentalmente, se puede recuperar de la papelera de reciclaje de Alfresco. Esta papelera sólo es accesible desde Alfresco Explorer. Los usuarios o administradores pueden acceder a ella en su Profile.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Si el documento no está versionado y no está en la papelera (porque se ha borrado de ahí) hay que recurrir a los back ups de base de datos y file system.&lt;/li&gt;&lt;/ul&gt;Alfresco no proporciona ninguna herramienta para recuperar un archivo único de una copia de backup. La única opción "oficial" es restaurar las copias en un entorno independiente/nuevo de Alfresco y recuperar el fichero de dicho entorno. Esta solución es poco práctica cuando el volumen del repositorio es muy grande porque no siempre se dispondrá del espacio y tiempo necesarios para recuperar el file system completo en un nuevo entorno.&lt;br /&gt;&lt;br /&gt;La solución al problema consiste en explorar directamente la base de datos de Alfresco y obtener la referencia al documento buscado para poder recuperar el archivo directamente del dispositivo de backup donde esté almacenado. Para ello, el único elemento que se ha de recuperar es la base de datos de Alfresco. Este elemento es más fácil de restaurar porque ocupa mucho menos espacio que el file system.&lt;br /&gt;&lt;br /&gt;A partir de la información de un contenido almacenada en la base de datos se puede reconstruir el path del archivo conrrespondiente a dicho contenido. Los datos que se necesitan para hacer esta recuperación son el nombre del fichero y la última fecha en la que el contenido estaba correctamente almacenado en el repositorio. La consulta* que se ha de ejecutar para recuperar la ubicación de un fichero llamado 'demo.txt' sería:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;select&lt;/span&gt; a.node_id, db.content_url&lt;/span&gt;&lt;span style=" color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;br /&gt;from  &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;alfresco.ALF_NODE_PROPERTIES a,&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;alfresco.ALF_QNAME b,&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;alfresco.ALF_NAMESPACE c,&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;alfresco.ALF_NODE_PROPERTIES ab,&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;alfresco.ALF_QNAME bb,&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;alfresco.ALF_NAMESPACE cb,&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;alfresco.ALF_CONTENT_URL db&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;where&lt;/span&gt; a.STRING_VALUE=&lt;span style="color: rgb(204, 51, 204);"&gt;'demo.txt' &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; a.QNAME_ID = b.ID&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; b.NS_ID = c.ID&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; a.NODE_ID = ab.NODE_ID&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; ab.QNAME_ID = bb.ID&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; bb.NS_ID= cb.ID&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; ab.LONG_VALUE = db.ID&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; b.LOCAL_NAME = &lt;span style="color: rgb(204, 51, 204);"&gt;'name'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; c.URI = &lt;span style="color: rgb(204, 51, 204);"&gt;'http://www.alfresco.org/model/content/1.0'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; bb.LOCAL_NAME = &lt;span style="color: rgb(204, 51, 204);"&gt;'content'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; cb.URI = &lt;span style="color: rgb(204, 51, 204);"&gt;'http://www.alfresco.org/model/content/1.0'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Esta consulta devuelve el identificador interno del nodo correspondiente al contenido y la url de la ubicación del fichero en el sistema de ficheros.&lt;br /&gt;&lt;br /&gt;La estructura de la url de la ubicación del fichero del ejemplo es la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;store://2011/2/22/16/21/e7067340-9ca6-4e5b-b53b-b17dfaecf1b7.bin&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;store:/&lt;/span&gt; hace referencia al almacén del fichero.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;/2011/2/22/16/21&lt;/span&gt;  es el path donde está el fichero a partir del directorio raíz del alf_data contentstore.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;e7067340-9ca6-4e5b-b53b-b17dfaecf1b7.bin&lt;/span&gt; es el nombre del fichero en el disco. Este nombre se puede substituir por el nombre original (p.e. demo.txt) y así se recuperaría el archivo perdido.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;En el caso de que la consulta devuelva más de un registro, correspondientes a las diferentes versiones del documento, se puede utilizar el valor de la columna NODE_ID para recuperar la entrada adecuada a la versión buscada. La siguiente columna es un ejemplo de como recuperar la etiqueta de la versión:&lt;br /&gt;&lt;br /&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Tabla normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0cm 5.4pt 0cm 5.4pt;  mso-para-margin:0cm;  mso-para-margin-bottom:.0001pt;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:"Times New Roman";  mso-fareast-theme-font:minor-fareast;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;select&lt;/span&gt; a.string_value&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;from&lt;/span&gt; alfresco.ALF_NODE_PROPERTIES a,&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;alfresco.ALF_QNAME b,&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;alfresco.ALF_NAMESPACE c&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;where&lt;/span&gt; a.NODE_ID = 540&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; a.QNAME_ID = b.ID&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; b.NS_ID = c.ID&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; b.LOCAL_NAME = &lt;span style="color: rgb(204, 51, 204);"&gt;'versionLabel'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;and&lt;/span&gt; c.URI = &lt;span style="color: rgb(204, 51, 204);"&gt;'http://www.alfresco.org/model/content/1.0'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:webdings;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;A partir de la versión se puede recuperar el fichero correcto.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;*Las consultas de este artículo están probadas en una versión 3.4.1 Enterprise. &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-7684542207160663802?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/7684542207160663802/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=7684542207160663802' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7684542207160663802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7684542207160663802'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2011/04/soluciones-de-backup-y-restore-para.html' title='Soluciones de backup y restore para Alfresco'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-2009946991379107860</id><published>2011-04-18T12:12:00.000+02:00</published><updated>2011-04-18T12:12:00.740+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><category scheme='http://www.blogger.com/atom/ns#' term='Liferay'/><title type='text'>Porlet de tareas de Alfresco para Liferay</title><content type='html'>&lt;div style="text-align: justify;"&gt;En la versión 3.4 de Alfresco se ha incluido un portlet JSR-168 llamado Doclib portlet que está preparado para ser desplegado en el portal Liferay. Este portlet está basado en Alfresco Share y tres funcionalidades de acceso al repositorio de Alfresco:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Repository browser: permite navegar por todo el repositorio de Alfresco usando las credenciales del usuario autenticado en el portal.&lt;/li&gt;&lt;li&gt;Site Document Library: se puede configurar para mostrar la document library de un site concreto de Alfresco Share.&lt;/li&gt;&lt;li&gt;My Document Libraries: permite acceder a todas las document libraries de los sites a los que pertenece el usuario autenticado en el portal.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;La parte de gestión documental queda muy bien cubierta por estas funcionalidades, pero se hecha en falta alguna de las utilidades incorporadas en esta versión de Alfresco como, por ejemplo, la gestión de tareas. Por suerte, Alfresco es una aplicación fácil de ampliar y se puede conseguir disponer de un portlet de tareas de Alfresco integrado en un portal Liferay.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;El primer paso consiste en incluir la definición del nuevo portlet en los ficheros de porltets incluídos en Alfresco Share. Empezamos por el liferay-portlet.xml, donde hay que añadir:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;portlet&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&amp;lt;portlet-name&amp;gt;ShareMyTasks&amp;lt;/portlet-name&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&amp;lt;user-principal-strategy&amp;gt;screenName&amp;lt;/user-principal-strategy&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&amp;lt;/portlet&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;A continuación editamos el fichero liferay-display.xml e incluimos lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;portlet id="ShareMyTasks"&amp;gt;&amp;lt;/portlet&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Por último hay que editar el fichero portlet.xml para añadir:&lt;br /&gt;&lt;span style="font-size:85%;"&gt; &lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;br /&gt;&amp;lt;portlet&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;description&amp;gt;Alfresco Share: My Tasks&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/description&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;portlet-name&amp;gt;ShareMyTasks&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/portlet-name&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;portlet-class&amp;gt;org.alfresco.web.portlet.ProxyPortlet&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/portlet-class&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;init-param&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;name&amp;gt;viewScriptUrl&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/name&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;value&amp;gt;/page/my-tasks&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/value&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/init-param&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;supports&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;mime-type&amp;gt;text/html&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/mime-type&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;portlet-mode&amp;gt;VIEW&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/portlet-mode&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/supports&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;portlet-info&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;title&amp;gt;Share: My Tasks&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/title&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;short-title&amp;gt;My Tasks&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/short-title&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/portlet-info&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;security-role-ref&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;role-name&amp;gt;administrator&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/role-name&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/security-role-ref&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;security-role-ref&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;role-name&amp;gt;guest&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/role-name&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/security-role-ref&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;security-role-ref&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;role-name&amp;gt;power-user&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/role-name&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/security-role-ref&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;security-role-ref&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;role-name&amp;gt;user&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/role-name&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/security-role-ref&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/portlet&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Estos ficheros se encuentran en la carpeta WEB-INF de la aplicación Share. Cuidado que esta aplicación Share es la que se despliega en el portal, no la que se despliega junto con el repositorio de Alfresco.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;A continuación hay que modificar la plantilla de visualización de la página de la lista de tareas para eliminar la barra de cabecera de Alfresco y dejar únicamente los componentes relacionados con la lista de tareas.  Esta plantilla se llama my-tasks.ftl y se puede encontrar en la carpeta WEB-INF/classes/alfresco/templates/org/alfresco . El código que hay que comentar o eliminar es el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;@region id="header" scope="global" protected=true/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Por último hay que modificar el fichero web.xml de la aplicación Share para incluir la definición de la implementación del nuevo portlet añadiendo los siguientes elementos. En la sección de servlets:&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;servlet-name&amp;gt;ShareMyTasks&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/servlet-name&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;servlet-class&amp;gt;com.liferay.portal.kernel.servlet.PortletServlet&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/servlet-class&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;init-param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;param-name&amp;gt;portlet-class&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/param-name&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;param-value&amp;gt;org.alfresco.web.portlet.ProxyPortlet&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/param-value&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/init-param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;load-on-startup&amp;gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/load-on-startup&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;/servlet&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;y en la sección de servlet-mappings esto:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;        &amp;lt;servlet-name&amp;gt;ShareMyTasks&amp;lt;/servlet-name&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &amp;lt;url-pattern&amp;gt;/ShareMyTasks/*&amp;lt;/url-pattern&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;/servlet-mapping&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Una vez hechos todos los cambios hay que volver a desplegar la aplicación Share en Liferay para que reconozca el nuevo portlet. Una vez recargada la aplicación, el nuevo portlet estará listo para ser usado.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-VAzYixjxN44/TZSPzaUYzwI/AAAAAAAAAKI/Xhv_P7fIopc/s1600/pantallazo_mytasks.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 279px;" src="http://4.bp.blogspot.com/-VAzYixjxN44/TZSPzaUYzwI/AAAAAAAAAKI/Xhv_P7fIopc/s400/pantallazo_mytasks.JPG" alt="" id="BLOGGER_PHOTO_ID_5590251150874562306" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-2009946991379107860?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/2009946991379107860/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=2009946991379107860' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/2009946991379107860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/2009946991379107860'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2011/04/porlet-de-tareas-de-alfresco-para.html' title='Porlet de tareas de Alfresco para Liferay'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-VAzYixjxN44/TZSPzaUYzwI/AAAAAAAAAKI/Xhv_P7fIopc/s72-c/pantallazo_mytasks.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-2439961685829911402</id><published>2011-04-11T13:26:00.000+02:00</published><updated>2011-04-11T13:26:00.464+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><category scheme='http://www.blogger.com/atom/ns#' term='Office'/><title type='text'>Bug en la edicion online de Alfresco usando Office 2010</title><content type='html'>&lt;div style="text-align: justify;"&gt;En la versión 3.4.0 de &lt;a href="http://www.alfresco.com/"&gt;Alfresco &lt;/a&gt;Enterprise hay un bug en la edición online de documentos de Office cuando se utiliza la suite de programas MSOffice 2010. Este bug hace que se pierda el &lt;span style="font-style: italic;"&gt;content type&lt;/span&gt; de los documentos editados cuando se guardan los cambios hechos sobre el documento.&lt;br /&gt;&lt;br /&gt;Este no es un error excesivamente grave ya que es fácil de subsanar volviendo a asignar manualmente el &lt;span style="font-style: italic;"&gt;content type&lt;/span&gt; al documento. De todas formas obligar a los usuarios a hacer esta asignación cada vez que editan un documento es bastante poco práctico. Además, si se pierde el &lt;span style="font-style: italic;"&gt;content type&lt;/span&gt; de un documento, hay un efecto secundario en determinados tipos de ficheros (por ejemplo los documentos de MSOffice 2007) que hace que la siguiente vez que se vaya a editar un documento el sistema no sepa como abrirlo al desconocer el &lt;span style="font-style: italic;"&gt;content type&lt;/span&gt; del que se trata.&lt;br /&gt;&lt;br /&gt;Este problema estará resuelto en la versión 3.4.2. Mientras tanto, hay un posible workaround para evitar la pérdida del content type cuando se guardan los cambios de documento editado online.&lt;br /&gt;&lt;br /&gt;Lo primero es crear un script con el siguiente código:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;if (document.hasAspect("cm:workingcopy") &amp;amp;&amp;amp; document.properties["cm:workingCopyMode"]=="onlineEditing") {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   var ref = document.properties["cm:source"];&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   if (ref.mimetype != document.mimetype) {&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      document.mimetype = ref.mimetype;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      document.save();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La perdida del content type se produce al guardar los cambios, y esto siempre se hace sobre la copia de trabajo. Por este motivo, voy a buscar el content type al documento original y lo actualizo en la copia de trabajo en el caso de que se haya perdido.&lt;br /&gt;&lt;br /&gt;A continuación hay que crear una regla en el espacio raíz del repositorio que aplique a todos los items de cualquier tipo que sean modificados en el repositorio, que ejecute el script anterior y que tenga efecto en todas las subcarpetas del espacio raíz.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-2439961685829911402?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/2439961685829911402/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=2439961685829911402' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/2439961685829911402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/2439961685829911402'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2011/04/bug-en-la-edicion-online-de-alfresco.html' title='Bug en la edicion online de Alfresco usando Office 2010'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-6347995789635751038</id><published>2011-04-04T12:00:00.003+02:00</published><updated>2011-04-07T16:25:18.243+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Carga de modelos en Alfresco</title><content type='html'>&lt;div style="text-align: justify;"&gt;Una de los inconvenientes que siempre he encontrado a como &lt;a href="http://www.alfresco.com/"&gt;Alfresco &lt;/a&gt;trata los modelos documentales ad hoc es la forma de crearlos y cargarlos.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Tener que crear un fichero XML con el modelo, sin ningún tipo de ayuda visual o guía interactiva, hace que la creación de modelos sea una tarea más próxima al desarrollo que a la configuración y por lo tanto más difícil de asumir por perfiles de negocio.&lt;br /&gt;&lt;br /&gt;El despliegue del modelo se puede hacer de dos formas, desde el classpath, cosa que obliga a reiniciar la aplicación para obtener los cambios o desde el repositorio, desplegando en fichero del modelo en el espacio &lt;span style="font-style: italic;"&gt;Data Dictionary &amp;gt; Models&lt;/span&gt; . Este segundo método es dinámico ya que permite incorporar modelos al repositorio sin necesidad de reiniciar la aplicación.&lt;br /&gt;&lt;br /&gt;El inconveniente que simpre le vi a este segundo método es que, a pesar de que el modelo sí se puede cargar dinámicamente, su representación en el cliente web (definida en el fichero web-client-config-custom.xml del extension) sí que obligaba a reiniciar la aplicación.&lt;br /&gt;&lt;br /&gt;Gracias a este &lt;a href="http://blyx.com/2010/06/04/alfresco-hack-las-consolas-escondidas-de-alfresco/"&gt;post &lt;/a&gt;del gran Toni de la Fuente he visto que ya no es necesario hacerlo así. Existe una forma completamente dinámica de incorporar modelos al repositorio y de verlos en el cliente web sin necesidad de reiniciar la aplicación. Los pasos a seguir son los siguientes:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;Crear el modelo en un fichero con extensión .xml. Por ejemplo &lt;span style="font-style: italic;"&gt;my-model.xml&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Copiar el fichero my-model.xml en el espacio &lt;span style="font-style: italic;"&gt;Company Home &amp;gt; Data Dictionay &amp;gt; Models&lt;/span&gt; . Si el modelo es válido, a los metadatos del fichero se le añadirá uno llamado &lt;span style="font-style: italic;"&gt;Model Active&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Activar el modelo marcando el checkbox del metadato &lt;span style="font-style: italic;"&gt;Model Active&lt;/span&gt;. A partir de este momento los elementos definidos en el modelo ya se pueden utilizar en el repositorio.&lt;/li&gt;&lt;li&gt;Modificar el fichero &lt;span style="font-style: italic;"&gt;web-client-config-custom.xml&lt;/span&gt; de la carpeta &lt;span style="font-style: italic;"&gt;extension &lt;/span&gt;e incluir la representación del modelo creado en el paso 1.&lt;/li&gt;&lt;li&gt;Acceder a la consola del webclient en la siguiente URL: &lt;span style="font-style: italic;"&gt;http://&lt;alfresco_host&gt;serverhost/alfresco/faces/jsp/admin/webclientconfig-console.jsp&lt;/alfresco_host&gt;&lt;/span&gt; . Para acceder a esta consola es necesario tener el usuario administrador de Alfresco.&lt;/li&gt;&lt;li&gt;Escribir el comando &lt;span style="font-style: italic;"&gt;reload &lt;/span&gt;en la caja de comandos y pulsar el botón &lt;span style="font-style: italic;"&gt;Submit&lt;/span&gt;. El resultado debe ser algo parecido a la siguiente pantalla:&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-UKlLoHp_8UE/TZGn0ty27WI/AAAAAAAAAKA/nV39kdCFznI/s1600/pantalla_webclient_console.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 301px;" src="http://4.bp.blogspot.com/-UKlLoHp_8UE/TZGn0ty27WI/AAAAAAAAAKA/nV39kdCFznI/s400/pantalla_webclient_console.JPG" alt="" id="BLOGGER_PHOTO_ID_5589433136631442786" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;Una vez realizados todos los pasos el modelo estará listo para ser usado desde el cliente web de Alfresco y sin necesidad de reiniciar la aplicación. Esto es una gran ventaja ya que permite ampliar la funcionalidad  del gestor documental de una forma más cómodo y con un menos impacto sobre el uso de la aplicación.&lt;br /&gt;&lt;br /&gt;Ahora sólo falta conseguir el &lt;a href="http://wiki.alfresco.com/wiki/2010_Roadmap#Model_Management"&gt;editor visual&lt;/a&gt; de metadatos.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-6347995789635751038?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/6347995789635751038/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=6347995789635751038' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6347995789635751038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6347995789635751038'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2011/04/carga-de-modelos-en-alfresco.html' title='Carga de modelos en Alfresco'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-UKlLoHp_8UE/TZGn0ty27WI/AAAAAAAAAKA/nV39kdCFznI/s72-c/pantalla_webclient_console.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-7471865937869460603</id><published>2011-03-25T08:28:00.004+01:00</published><updated>2011-03-31T16:32:41.391+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IN2'/><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>IN2, EMEA partner of the year</title><content type='html'>&lt;div style="text-align: justify;"&gt;Estos días se está celebrando en Orlando el KickOff 2011 de &lt;a href="http://www.alfresco.com/"&gt;Alfresco&lt;/a&gt;. En este evento se están presentando las principales novedades preparadas para este año en las nuevas versiones de Alfresco ECM.&lt;br /&gt;&lt;br /&gt;Entre las muchas mejoras que han incluído en su producto podemos encontrar la utilización de Solr para la compartición de índices, la inclusión de Activiti como motor de procesos o el social content management. También se han presentado mejoras en el cliente web Share, como un nuevo panel de administración, la posibilidad de personalizar los temas de los sites o el modelador de procesos de Activiti.&lt;br /&gt;&lt;br /&gt;También se ha hablado del nuevo programa de formación y certificación oficial del que tendremos más novedades muy pronto.&lt;br /&gt;&lt;br /&gt;Y también se han entregado los premios a los mejores partners mundiales y este año &lt;a href="http://www.in2.es/"&gt;IN2&lt;/a&gt;, la empresa con la que colaboro desde hace 10 años, ha conseguido la distinción como mejor partner EMEA del año 2010. Este premio me hace especial ilusión porque desde IN2 llevamos apostando muchos años por Alfresco y hemos hecho un trabajo constante para que dar a conocer las virtudes de un producto y de una forma de hacer software, el open source, que nos gusta y en el que creemos firmemente. Este premio es un reconocimiento a toda la gente que nos hemos esforzado para conseguir un trabajo bien hecho.&lt;br /&gt;&lt;br /&gt;Os dejo una &lt;a href="http://ow.ly/i/9wMe"&gt;foto &lt;/a&gt;del premio, cortesía de nuestro compañero &lt;a href="http://fegor.blogspot.com/"&gt;FëGoR &lt;/a&gt;que, afortunado él,  está cubriendo el evento en vivo y en directo.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-7471865937869460603?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/7471865937869460603/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=7471865937869460603' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7471865937869460603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7471865937869460603'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2011/03/in2-emea-partner-of-year.html' title='IN2, EMEA partner of the year'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-6069789964347948315</id><published>2011-01-05T15:01:00.006+01:00</published><updated>2011-01-05T16:40:25.464+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><category scheme='http://www.blogger.com/atom/ns#' term='Calidad'/><title type='text'>Auditar con Alfresco</title><content type='html'>&lt;div style="text-align: justify; font-style: italic;"&gt;Una de las funcionalidades que más habitualmente se pide a un sistema gestor ECM es la capacidad de auditar las acciones realizadas sobre el repositorio de documentos y la obtención de estadísticas sobre los movimientos realizados en lo documentos almacenados.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Alfresco ECM incluye un framework para crear una pista de auditoría que permita recopilar la información necesaria para obtener estadísticas e informes sobre los movimientos en el repositorio de documentos. Este framework se aprovecha de la arquitectura Spring de la aplicación para utilizar un conjunto de interceptores que permiten controlar los servicios de Alfresco a nivel de método. La configuración de la auditoría se hace mediante un fichero XML donde se definen cuales serán los métodos que se auditarán.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Activación y configuración de la auditoría&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La auditoría de Alfresco viene desactivada por defecto. Para activar la pista de auditoría hay que añadir las siguientes líneas al fichero &lt;span style="font-weight: bold;"&gt;alfresco-global.properties&lt;/span&gt; (versión 3.2 y superiores).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:times new roman;" &gt;audit.enabled=true&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:times new roman;" &gt;audit.useNewConfig=false&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Además se tiene que habilitar la configuración del servicio en el fichero &lt;span style="font-weight: bold;"&gt;tomcat/webapps/alfresco/WEB-INF/classes/alfresco/auditConfig.xml&lt;/span&gt; de la siguiente forma:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&amp;lt;Audit xmlns="http://www.alfresco.org/model/audit/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" &lt;span style="font-weight: bold;"&gt;enabled="true"&lt;/span&gt; auditInternal="false" mode ="all"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;La configuración de qué servicios y métodos se van auditar también se hace en el fichero auditConfig.xml. Por cada servicio se crea un bloque donde se indican cuales son los métodos a auditar. Por ejemplo:&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt; &lt;span style="color: rgb(0, 0, 153);"&gt;    &lt;service name="ContentService" mode="none"&gt;&lt;/service&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 153);"&gt;        &lt;method name="getWriter" mode="all"&gt;&lt;/method&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 153);"&gt;        &lt;method name="getReader" mode="all"&gt;&lt;/method&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 153);"&gt;        &lt;method name="transform" mode="none"&gt;&lt;/method&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 153);"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;    &amp;lt;Service name="ContentService" mode="none"&amp;gt;&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;Method name="getWriter" mode="all"/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;Method name="getReader" mode="all"/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;Method name="transform" mode="none"/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;/Service&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;En este elemento se indica que se quieren auditar los métodos &lt;span style="font-style: italic;"&gt;getWriter&lt;/span&gt; y &lt;span style="font-style: italic;"&gt;getReader&lt;/span&gt; del &lt;span style="font-style: italic;"&gt;ContentService&lt;/span&gt;. En cambio el método &lt;span style="font-style: italic;"&gt;transform&lt;/span&gt; no se auditará.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Si se quieren auditar todos los métodos de un servicio hay que darle el valor &lt;span style="font-style: italic;"&gt;all&lt;/span&gt; al atributo &lt;span style="font-style: italic;"&gt;mode&lt;/span&gt; del elemento &lt;span style="font-style: italic;"&gt;Service&lt;/span&gt;. Así:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;Service name="ContentService" mode="all"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;     &amp;lt;/Service&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Consideraciones&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La información de la auditoría se guarda en base de datos y es bastante cuantiosa, por este motivo hay que estudiar bien qué es lo que se quiere auditar antes de habilitarlo. Si el uso que se le va a dar al Alfresco es bastante elevado es mejor auditar sólo aquello que realmente se vaya a explotar de alguna forma.&lt;br /&gt;&lt;br /&gt;Podeís encontrar más información en la &lt;a href="http://wiki.alfresco.com/wiki/Audit_Configuration"&gt;wiki&lt;/a&gt; de Alfresco o en este interesante &lt;a href="http://blog.atolcd.com/?p=217"&gt;artículo&lt;/a&gt; (en francés).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Audit Surf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Precisamente leyendo uno de esos artículos descubrí una interesante utilidad para monitorizar la actividad de un Alfresco. Esta utilidad se llama Audit Surf y está disponible en la &lt;a href="http://forge.alfresco.com/projects/auditsurf/"&gt;forja &lt;/a&gt;de Alfresco.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_AskmZuxH5XI/TSSKn2Iz10I/AAAAAAAAAJw/XhWhpIxiJQQ/s1600/auditsurf2.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 201px;" src="http://1.bp.blogspot.com/_AskmZuxH5XI/TSSKn2Iz10I/AAAAAAAAAJw/XhWhpIxiJQQ/s400/auditsurf2.jpg" alt="" id="BLOGGER_PHOTO_ID_5558720257234032450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Esta utilidad es una aplicación Surf, que se despliega en el mismo servidor de aplicaciones donde está desplegado Alfresco Share. La aplicación presenta las siguientes funcionalidades:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Gráficos: presenta de forma gráfica información de conexiones de usuarios, creación de usuarios y workflows y estadísticas sobre creaciones, modificaciones y lecturas de documentos.&lt;/li&gt;&lt;li&gt;Cuadro de mandos: presenta una vista única con información sobre actividad de ficheros tal como los más leídos y modificados, las últimas incorporaciones y modificaciones. También da información sobre usuarios conectados y añadidos.&lt;/li&gt;&lt;li&gt;Monitorización: presenta información en tiempo real sobre el estado del servidor, de los repositorios y de los índices.&lt;/li&gt;&lt;li&gt;Exportación: permite generar un fichero CSV, XML o JSON con información de auditoría filtrada por fechas y por indicadores.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_AskmZuxH5XI/TSSKm4A0QjI/AAAAAAAAAJo/Y_K4zJmdLXg/s1600/auditsurf1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_AskmZuxH5XI/TSSKm4A0QjI/AAAAAAAAAJo/Y_K4zJmdLXg/s400/auditsurf1.jpg" alt="" id="BLOGGER_PHOTO_ID_5558720240557507122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Esta herramienta me parece una muy buena solución para controlar la actividad del repositorio y obtener buenas estadísticas de uso de una instalación de Alfresco.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-6069789964347948315?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/6069789964347948315/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=6069789964347948315' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6069789964347948315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6069789964347948315'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2011/01/auditar-con-alfresco.html' title='Auditar con Alfresco'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_AskmZuxH5XI/TSSKn2Iz10I/AAAAAAAAAJw/XhWhpIxiJQQ/s72-c/auditsurf2.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-6538971037509377136</id><published>2010-12-28T17:41:00.004+01:00</published><updated>2010-12-28T18:46:50.189+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Importación masiva de documentos en Alfresco</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;em&gt;Una de las cuestiones habituales en los proyectos de implantación  de un gestor documental es la carga inicial de documentos o la  migración de los mismos desde el sistema documental anterior. En el caso  de Alfresco hay varias alternativas para encarar este problema.&lt;/em&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;Los clientes web de Alfresco ofrecen un conjunto de herramientas para  la gestión documental muy amplio y cómodo para los usuarios pero  presentan una importante carencia cuando se trata de cargar grandes  volúmenes de documentos. Alfresco Explorer sólo permite la importación  de ficheros .acp, que es un formato propio de Alfresco y sólo se puede  generar desde otro sistema Alfresco. Alfresco Share ofrece un mecanismo  de upload de múltiples ficheros pero no es práctico para mucho ficheros no para estructuras más complejas (carpetas).&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;La solución habitual para cargar una gran cantidad de documentos en Alfresco  es utilizar alguna de las interfaces de acceso proporcionadas por el servidor JLAN que lleva incorporado.  Normalmente, en sistemas Windows, se opta por la interfaz CIFS o por la  WebDAV, y en otros &lt;em&gt;&lt;/em&gt;sistemas se utiliza FTP. Estas soluciones permiten utilizar estratégias más finas para la  carga de documentos pero requieren de un esfuerzo de desarrollo  considerable y en algunos casos el rendimiento puede no ser el mejor.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Hay una tercera vía que es la utilización de herramientas de importación como &lt;a href="http://www.tsgrp.com/Open_Source/OpenMigrate/open-migrate.jsp" _cke_saved_href="http://www.tsgrp.com/Open_Source/OpenMigrate/open-migrate.jsp"&gt;OpenMigrate&lt;/a&gt; o &lt;a href="http://code.google.com/p/alfresco-bulk-filesystem-import/" _cke_saved_href="http://code.google.com/p/alfresco-bulk-filesystem-import/"&gt;alfresco-bulk-filesystem-import&lt;/a&gt;.  Detrás de este nombre tan largo se encuentra una solución sencilla y  elegante que permite cargar documentos y metadatos de una forma  eficiente y con poco coste.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;alfresco-bulk-filesystem-import&lt;/strong&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Esta herramienta se distribuye como un fichero AMP de Alfresco por lo que instalarla es muy &lt;em&gt;&lt;/em&gt;sencillo. Es suficiente con:&lt;/p&gt;&lt;p&gt;   1. Descargarse el módulo adecuado a la versión de Alfresco y copiarlo en &lt;alfresco_home&gt;/amps&lt;/alfresco_home&gt;&lt;/p&gt;&lt;p&gt;   2. Ejecutar el comando &lt;em&gt;apply_amps&lt;/em&gt; en la raíz del Alfresco.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Este  módulo permite cargar toda un estructura de ficheros (documentos y  carpetas) de un disco en un espacio de Alfresco, respetando la  estructura original. Además permite también cargar metadatos asociados a  los documentos importados. Cómo funciona esta carga de metadatos es  bien sencillo. Primero hay que crear un fichero de metadatos para cada  documento que se vaya a importar. Este fichero se ha de llamar  exactamente igual que el fichero del documento añadiendo la extensión  .metadata.properties. Por ejemplo, si el documento se llama &lt;em&gt;my_document.docx&lt;/em&gt; el &lt;em&gt;&lt;/em&gt;fichero de metadatos se tendrá que llamar &lt;em&gt;my_document.docs.metadata.properties&lt;/em&gt;.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;La  estrucutra interna del fichero de metadatos sigue la estructura de los  fichero de propieades de Java. Primero hay que incluir una referencia al  tipo que queremos que tenga el documento cuando se cargue, luego la  lista de aspectos que hay que añadir al documento y por último cada una  de las propiedades que queramos añadir, siempre respetando el formato de  QName. Por ejemplo:&lt;/p&gt;&lt;p&gt;type=cm:content&lt;br /&gt;aspects=kb:article&lt;br /&gt;kb\:articletype=FAQ&lt;br /&gt;kb\:status=Draft&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Este  ejemplo importa un documento de tipo cm:content, le añade el aspecto  kb:article e informa dos propiedades kb:articletype y kb:status.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Hay  algunas limitaciones a la hora de definir metadatos como que no están  soportadas las propiedades multivaluadas o las asociaciones y que el  formato de las fechas ha de cumplir el estándar ISO8601.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;La  ejecución del módulo se hace a través de un webscript que está  disponible en la URL  http://&lt;alfresco_domain&gt;/alfresco/service/bulk/import/filesystem .  Este webscript tiene tres parámetros:&lt;/alfresco_domain&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;- Import directory: que es  el directorio donde se encuentra la estructura de ficheros que hay que  importar. Ha de ser un directorio local al Alfresco.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;- Target  space: que es el espacio de Alfresco donde se va a importar la  documentación. El webscript lleva incorporado una ayuda contextual que  facilita la elección del espacio destino.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;- Update existing files:  que es un flag que indica si está permitido modificar documentos en  caso de que ya existan en la carpeta destino.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;El resultado de la  importación se muestra como un cuadro resumen que informa del número de  documentos y carpetas creados, el tiempo empleado y los fallos, si los  hubiera.&lt;em&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_AskmZuxH5XI/TRoh9q8-ydI/AAAAAAAAAJg/5jwZ_m4kq3g/s1600/bulk.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 228px;" src="http://1.bp.blogspot.com/_AskmZuxH5XI/TRoh9q8-ydI/AAAAAAAAAJg/5jwZ_m4kq3g/s400/bulk.jpg" alt="" id="BLOGGER_PHOTO_ID_5555790433700727250" border="0" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-6538971037509377136?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/6538971037509377136/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=6538971037509377136' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6538971037509377136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6538971037509377136'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2010/12/importacion-masiva-de-documentos-en.html' title='Importación masiva de documentos en Alfresco'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_AskmZuxH5XI/TRoh9q8-ydI/AAAAAAAAAJg/5jwZ_m4kq3g/s72-c/bulk.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-7000702085726531252</id><published>2010-09-12T23:23:00.006+02:00</published><updated>2010-09-13T00:07:19.870+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Novedades de Alfresco 3.3 - WCM</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;La versión 3.3 de Alfresco ya lleva unos meses disponible y en esta serie de artículos me gustaría repasar algunas de las novedades incluídas en ella. Empezaré por las mejoras incluídas en el módulo de Web Content Management.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Alfresco incorporó el módulo de WCM hace ya varios años y su uso se ha extendido en tres áreas concretas:&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Aplicaciones web: aplicaciones personalizadas basadas en frameworks populares (Java, Spring+Surf, PHP,...) y en los servicios de contenidos de Alfresco.&lt;/li&gt;&lt;li&gt;Publicación simplificada: para descargas en masa, pequeños cambios, despliegues rápidos y aceleración del tiempo de ejecución de Alfresco.&lt;/li&gt;&lt;li&gt;Intranets y portales: servicios de contenidos centralizados para agilizar la colaboración, contenidos sociales, búsquedas,...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;En esta última &lt;span style="font-style: italic;"&gt;release&lt;/span&gt; han añadido un conjunto de funcionalidades demandadas desde hace tiempo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Nuevo editor web&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este nuevo editor permite la edición de contenidos en el contexto donde se publican. Esta funcionalidad está destinada a que los usuarios no técnicos sean capaces de editar los contenidos directamente en la página donde se muestram avitando así que dichos usuarios tengan que conocer la estructura interna de los contenidos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://4.bp.blogspot.com/_AskmZuxH5XI/TI1ME4oVnkI/AAAAAAAAAIw/xuVlPFLIPns/s1600/novedades_alf_p1_1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 234px;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/TI1ME4oVnkI/AAAAAAAAAIw/xuVlPFLIPns/s400/novedades_alf_p1_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5516148765403487810" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;La nueva forma de edición contextual es un complemento a la edición actual de manera que los diferentes perfiles implicados en la creación de contenidos y maquetación para las aplicaciones publicadas mediante WCM puedan trabajar de la forma que les sea más cómoda: editando en línea, descargando el contenido y editándolo &lt;span style="font-style: italic;"&gt;offline&lt;/span&gt; o vía CIFS.&lt;br /&gt;&lt;br /&gt;La edición de cada componente se hace mediante un editor HTML que proporciona las herramientas más frecuentes para la creación de contenidos HTML avanzados.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_AskmZuxH5XI/TI1MFctw8VI/AAAAAAAAAI4/e9MNDno2tzc/s1600/novedades_alf_p1_2.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 203px;" src="http://1.bp.blogspot.com/_AskmZuxH5XI/TI1MFctw8VI/AAAAAAAAAI4/e9MNDno2tzc/s400/novedades_alf_p1_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5516148775089926482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;El editor está basado en tecnología javascript y forma parte de un framework de edición extensible con funcionalidades diseñadas ad-hoc para los gestores de las aplicaciones.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Servicio de transferencia y publicación&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este nuevo servicio permite la publicación de contenidos y el despliegue de aplicaciones a servidores remotos. Entre las características de este transferencia destacan:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La publicación de documentos durante la ejecución sin necesidad de parar las aplicaciones accedidas por los usuarios finales.&lt;/li&gt;&lt;li&gt;El mantenimiento de las estructuras y de las relaciones entre contenidos.&lt;/li&gt;&lt;li&gt;Configuración de la seguridad y del acceso a los contenidos.&lt;/li&gt;&lt;li&gt;Contenido dinámico y búsquedas de contenidos personalizadas.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Nueva API de presentación&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El objetivo de esta API es fomentar el concepto de contenido como unidad de información independiente de su representación de forma que un mismo contenido pueda ser visualizado por tantos canales como sea necesario, cada uno de ellos con su propio sistema de representación.&lt;br /&gt;&lt;br /&gt;Esta API permite definir formatos automáticos para los diferentes canales de entrega y la manipulación de contenido flexible a través de conversiones en cadena.&lt;br /&gt;&lt;br /&gt;Las transformaciones para la presentación de los contenidos se pueden hacer mediante plantillas XSLT, un formato estándar de transformación XML muy extendido en los mundos web y J2EE. También se pueden usar plantillas Freemarker, una tecnología intergada en Alfresco tanto en su vertiente WCM como DM.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-7000702085726531252?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/7000702085726531252/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=7000702085726531252' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7000702085726531252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7000702085726531252'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2010/09/novedades-de-alfresco-33-wcm.html' title='Novedades de Alfresco 3.3 - WCM'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_AskmZuxH5XI/TI1ME4oVnkI/AAAAAAAAAIw/xuVlPFLIPns/s72-c/novedades_alf_p1_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-580117360757983018</id><published>2010-07-29T10:36:00.004+02:00</published><updated>2010-09-12T23:23:50.010+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IN2'/><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Webinar de novedades de Alfresco 3.3</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www2.alfresco.com/e/1234/-1234-2010-07-15-I7AHX/I7L2G/256983464"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 380px; height: 400px;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/TFE-yMVQXJI/AAAAAAAAAIg/Gd75Cwl_jik/s400/image001.gif" alt="" id="BLOGGER_PHOTO_ID_5499245652020845714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a title="http://www2.alfresco.com/e/1234/-1234-2010-07-15-I7AHX/I7L2G/256983464" href="http://www2.alfresco.com/e/1234/-1234-2010-07-15-I7AHX/I7L2G/256983464" target="_blank"&gt;&lt;span title="http://www2.alfresco.com/e/1234/-1234-2010-07-15-I7AHX/I7L2G/256983464" style="color: rgb(31, 73, 125); text-decoration: none;font-family:'Calibri','sans-serif';font-size:11pt;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-580117360757983018?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/580117360757983018/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=580117360757983018' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/580117360757983018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/580117360757983018'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2010/07/novedades-de-alfresco-33.html' title='Webinar de novedades de Alfresco 3.3'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_AskmZuxH5XI/TFE-yMVQXJI/AAAAAAAAAIg/Gd75Cwl_jik/s72-c/image001.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-5003099607610412107</id><published>2010-06-08T00:01:00.004+02:00</published><updated>2010-06-08T01:13:02.485+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Herramientas de scanner para Alfresco</title><content type='html'>&lt;div align="justify"&gt;Uno de los requerimientos más habituales que aparecen cuando se inicia la instalación de un gestor documental en una organización acostumbrada a trabajar con mucho material en formato papel es la posibilidad de incorporar documentos escaneados directamente al gestor documental.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;Alfresco ofrece algunas alternativas interesantes para resolver este tema que se pueden ajustar a las diferentes necesidades de las organizaciones interesadas  en implantar Alfresco.&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Kofax Release Script&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;Esta es quizás la solución más antigua que ofrece Alfresco para resolver el problema y se basa en la suite de productos de escaneo de Kofax. El script en si es gratuito pero los sistemas de Kofax tiene coste de licencia. Mediante la API de webservices de Alfresco, este script permite subir documentos escaneados mediante Kofax a un espacio de Alfresco y mapear la información capturada por Kofax al modelo de contenidos de Alfresco.&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Micro Strategies: Integración con Kofax&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;Esta es &lt;a href="http://www.microstrat.com/ecm"&gt;otra&lt;/a&gt; suite de pago que permite la captura de documentos mediante Kofax y su incorporación directa a Alfresco. Además de las funciones de escaneo también indorpora la integración con otras aplicaciones de negocio como Oracle Financials y Google Search Appliance.&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;OA Solutions &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;Esta &lt;a href="http://www.oasolutions.ca/"&gt;empresa canadiense &lt;/a&gt;proporciona una solución de pago que permite escanear documentos directamente en Alfresco usando dispositivos de red multi función (escaners, impresoras, fax). Esta solución tiene una potente capacidad de detección y extracción de metadatos. Además proporciona un cliente flash para gestionar la calidad del escaneo y otras funcionalidades como el zoom, paginación automática, scroll,...&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Capturesco&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;Esta es una &lt;a href="http://forge.alfresco.com/forum/forum.php?forum_id=817"&gt;solución &lt;/a&gt;open source que permite capturar documentos e imágenes usando escaneres o cámaras digitales y subirlos directamente a Alfresco. Esta solución utiliza la API de webservices de Alfresco desde un cliente C# y tiene un cliente para escanear escrito en VB.net.&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Otras soluciones&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;Alfresco proporciona un gran número de interfaces e implementa varios protocolos que se pueden usar para cubrir esta funcionalidad:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;SharePoint Protocol: cualquier herramienta que pueda utilizar el protocolo SharePoint para escanear documentos directamente en SharePoint (como Fujitsu Scansanp), también se puede utilizar para scanear directamente en Alfresco porque, desde la versión 3.0, también implementa este protocolo.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Email Server: muchas herramientas de escaneo permiten enviar los documentos escaneados por mail. Alfresco implementa un servidor de email que permite la incorporación de documentos utilizando el protocolo SMTP y definiendo alias de email para los espacios del repositorio.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;CIFS: al publicar el repositorio mediante esta interfaz, los documentos escaneados con cualquier herramienta se pueden guardar directamente en Alfresco.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt;Una vez más, la flexibilidad de Alfresco queda patente en el amplio abanico de soluciones disponibles que existen para resolver un problema común de la gestión documental.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-5003099607610412107?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/5003099607610412107/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=5003099607610412107' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/5003099607610412107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/5003099607610412107'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2010/06/herramientas-de-scanner-para-alfresco.html' title='Herramientas de scanner para Alfresco'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-3624485116502117355</id><published>2010-04-12T00:06:00.005+02:00</published><updated>2010-04-12T00:56:09.931+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Alfresco Web Scripts</title><content type='html'>&lt;div style="text-align: justify;"&gt;Alfresco incluyó en su versión 2.1 el framework de web scripts, una API basada en tecnología RESTful que proporcionó una forma fácil, rápida y potente de interactuar con el repositorio de contenidos y de integrar Alfresco con otros sistemas. Desde entonces Alfresco ha seguido apostanto por esta solución y la ha convertido en la principal herramienta de desarrollo e integración de su última versión.&lt;br /&gt;&lt;br /&gt;Cada web script está vinculado a un método HTTP y a una URL y puede devolver resultados en múltiples formatos, desde HTML hasta JSON, pasando por XML o RSS.&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tipos de web scripts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Hay dos tipos de web scripts:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Web scripts de datos: que devuelven información en cualquier formato, como CSV, XML u objetos JS. Estos web scripts permiten hacer llamadas a Alfresco desde otras aplicaciones u otras extensiones de Alfresco. Por ejemplo, el componente de OpenSearch está construido como una serie de web scripts.&lt;/li&gt;&lt;li&gt;Web scripts de interfaz de usuario: permiten construir dinámicamente interfaces de usuario dentro del cliente de Alfresco o en otras aplicaciones. Se pueden crear componentes ricos, cada uno con su propia apariencia. Estos web scripts pueden funcionar de forma independiente o combinados con web scripts de datos.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Componentes de un web script&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Los componentes básicos de los web scripts son tres, aunque no son todos obligatorios:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Descripción: es un fichero XML que describe la URL que iniciará el script. Entre los datos que se pueden informar están el nombre, la descripción y las necesidades de autentiación y transaccionalidad del script. Este componente es obligatorio.&lt;/li&gt;&lt;li&gt;Script de ejecución: es un fichero Javascript que será el encargado de ejecutar la lógica del script. El script tiene acceso a todos los argumentos de la URL, los servicios del repositorio y la mayoría de los objetos de la API Javascript de Alfresco. Esto es posible porque ALfresco utiliza Mozilla Rhino para Java que permite a los fichero JS acceder a los objetos java utilizando una notación simple de beans. Este componente no es obligatorio.&lt;/li&gt;&lt;li&gt;Plantillas de salida: pueden ser varias, para diferentes formatos de salida. Son plantillas de freemaker que construyen la salida del script en los formatos deseados. La respuesta de la URL se construye a partir de una de las plantillas proporcionadas al web scripts y se escoge la adecuada en función de tipo de contenido especificado en la petición. Las plantillas tienen acceso a todos los argumentos de la URL y los puntos de acceso habituales al repositorio de Alfresco. Cómo mínimo ha de existir una plantilla por web script.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;La forma que tienen estos componentes de interactuar es la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_AskmZuxH5XI/S8JTRUA_onI/AAAAAAAAAIQ/UNBVWZmtaLI/s1600/WebScriptArchitecture.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 356px;" src="http://1.bp.blogspot.com/_AskmZuxH5XI/S8JTRUA_onI/AAAAAAAAAIQ/UNBVWZmtaLI/s400/WebScriptArchitecture.jpg" alt="" id="BLOGGER_PHOTO_ID_5459017255222223474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;La URL con la petición llega al Web Script REST dispatcher.&lt;/li&gt;&lt;li&gt;El dispathcer localiza el Web Script adecuado para la URL, se autentica si es necesario y ejecuta el script. En caso de no localizar el web script o no conseguir autenticarse, devuelve un código de error HTTP.&lt;/li&gt;&lt;li&gt;Desde el script se tiene acceso a todos los servicios del repositorio de contenidos para buscar, modificar, borra y crear información.&lt;/li&gt;&lt;li&gt;El resultado del script se renderiza utilizando las plantillas freemaker proporcionadas al Web Script y según el tipo de respuesta solicitado o con el formato por defecto en caso de que no se indique el tipo de respuesta preferido.&lt;/li&gt;&lt;li&gt;El dispatcher envía la respuesta renderizada utilizando el mismo protocolo de la petición.&lt;/li&gt;&lt;li&gt;El cliente del web script recibe la respuesta en el formato de la petición.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Java-backed web scripts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En ocasiones los scripts y las plantillas no son suficiente para implementar la funcionalidad requerida. En estos casos es posible recurrir a un bean de Java definido en el contexto de Spring de Alfresco. Estos beans pueden tomar el control de la ejecución o trabajar conjuntamente con el script y las plantillas.&lt;br /&gt;&lt;br /&gt;La definición de estos beans en el contexto de Spring está estrechamente ligada con el fichero de descripción del Web Script y, como cualquier otro bean de Spring de Alfresco, otros servicios del nucleo de Alfresco pueden utilizarse en el bean mediante inyección de dependecias.&lt;br /&gt;&lt;br /&gt;En definitiva, este framework supone una herramienta muy potente y flexible para abrir el repositorio de Alfresco utilizando estándares al alcance de cualquier equipo de desarrollo&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-3624485116502117355?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/3624485116502117355/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=3624485116502117355' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3624485116502117355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3624485116502117355'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2010/04/alfresco-web-scripts.html' title='Alfresco Web Scripts'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_AskmZuxH5XI/S8JTRUA_onI/AAAAAAAAAIQ/UNBVWZmtaLI/s72-c/WebScriptArchitecture.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-1988726473716202619</id><published>2010-01-27T09:00:00.001+01:00</published><updated>2010-01-27T09:00:05.815+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='CAS'/><title type='text'>PHP y CAS</title><content type='html'>El sistema de web SSO &lt;a href="http://www.jasig.org/cas"&gt;CAS&lt;/a&gt; es uno de los más extendidos entre la comunidad Open Source. Originalmete creado por la Universidad de Yale sirve para proporcionar a las aplicaciones un modo fiable de autenticar usuarios.&lt;br /&gt;&lt;br /&gt;Existen muchos clientes de CAS para integrarse con aplicaciones de diferentes tecnologías como Java, .Net, Perl, Apache y PHP. Para este último caso, el cliente se llama &lt;a href="http://www.ja-sig.org/wiki/display/CASC/phpCAS"&gt;phpCAS&lt;/a&gt;. Este cliente ofrece un forma fácil de proteger cualquier aplicación escrita en PHP.&lt;br /&gt;&lt;br /&gt;Los requisitos para instalar phpCAS son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; CURL 7.5+&lt;/li&gt;&lt;li&gt;PHP 4.3.1+, PEAR DB&lt;/li&gt;&lt;li&gt;Apache 2.0.44+&lt;/li&gt;&lt;/ul&gt;Con las últimas versiones de Apache 2.2.x y PHP 5.x el cliente es muy fácil de usar porque tdos estos componentes ya están incluídos.&lt;br /&gt;&lt;br /&gt;Un ejemplo de la forma más básica de usar del cliente phpCAS para proteger una aplicación es la siguiente:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;include_once('CAS.php');&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;phpCAS::setDebug();&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;phpCAS::client(CAS_VERSION_2_0,'my_cs_server',443,'/cas');&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;// no SSL validation for the CAS server&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;phpCAS::setNoCasServerValidation();&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;&lt;br /&gt;// force CAS authentication&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;phpCAS::forceAuthentication();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;// at this step, the user has been authenticated by the CAS server&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;// and the user's login name can be read with phpCAS::getUser().&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;// logout if desired&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;if (isset($_REQUEST['logout'])) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    phpCAS::logout();&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;echo phpCAS::getUser();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En este ejemplo es importante destacar la forma de crear el cliente, donde se usa el nombre del servidor de CAS, el puerto del servicio CAS y la URI de CAS ('/cas'). En este último caso la URI ha de corresponder a la aplicación y nunca a la página de login ('/cas/login').&lt;br /&gt;&lt;br /&gt;Ahora bien, este ejemplo puede no funcionar porque hay un problema a la hora de crear la sesión de la aplicación. Si se usa este ejemplo, la creación de la sesión de usuario está implícita en la creación del cliente. En muchos casos este comportamiento puede no ser el deseado ya que se pierde el control sobre la sesión o no se crea bien. Para solucionarlo hay que modificar el ejemplo de la siguiente forma:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;include_once('CAS.php');&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; session_start();&lt;/span&gt;&lt;br /&gt;phpCAS::setDebug();&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; phpCAS::client(CAS_VERSION_2_0,'my_cs_server',443,'/cas',false);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;// no SSL validation for the CAS server&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;phpCAS::setNoCasServerValidation();&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;&lt;br /&gt;// force CAS authentication&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;phpCAS::forceAuthentication();&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;"&gt;&lt;br /&gt;// at this step, the user has been authenticated by the CAS server&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;// and the user's login name can be read with phpCAS::getUser().&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;"&gt;&lt;br /&gt;// logout if desired&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;if (isset($_REQUEST['logout'])) {&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;"&gt;    phpCAS::logout();&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;echo phpCAS::getUser();&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Con estos dos cambios, la sesión se crea de forma explícita y se le informa al cliente de CAS de que no ha de crear una nueva.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-1988726473716202619?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/1988726473716202619/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=1988726473716202619' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/1988726473716202619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/1988726473716202619'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2010/01/php-y-cas.html' title='PHP y CAS'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-3654783115642145033</id><published>2010-01-15T20:15:00.000+01:00</published><updated>2010-01-17T17:16:04.145+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IN2'/><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Caso de éxito : Publicación de documentación para la CMT</title><content type='html'>&lt;div style="text-align: justify;"&gt;El pasado més de Octubre, una de las principales empresas españolas proveedoras de servicios de telecomunicaciones, puso en marcha su portal para la publicación de la documentación de sus centros de servicios. Dicho portal ha sido desarrollado por &lt;a href="http://www.in2.es/"&gt;IN2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Octubre de este año era la fecha límite para que las empresas proveedoras de servicios de telecomunicaciones hicieran pública la información relativa a los centros de coubicación e interconexión. Nuestro cliente, al ser la principal empresa de este tipo en España, estaba obligado a publicar una gran cantidad de información en formato de documentos digitales e imagenes dentro de un plazo de tiempo muy ajustado.&lt;br /&gt;&lt;br /&gt;Para el desarrollo del portal, esta empresa solicitó los servicios de IN2, con quien ya había trabajado en otros proyectos relacionados con gestión documental y calidad de desarrollo de aplicaciones J2EE.  In2 aceptó el reto de realizar este proyecto en un plazo de 6 a 8 semanas para cumplir con el requerimiento legal de la CMT.&lt;br /&gt;&lt;br /&gt;La solución propuesta por IN2 consistió en el desarrollo de una aplicación web para la publicación de la documentación y la implementación sobre &lt;a href="http://www.alfresco.com/"&gt;Alfresco&lt;/a&gt; de los principales elementos de gestión documental.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_AskmZuxH5XI/S1M3cNBG2mI/AAAAAAAAAIE/jko8JUF24ik/s1600-h/oar2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/S1M3cNBG2mI/AAAAAAAAAIE/jko8JUF24ik/s400/oar2.jpg" alt="" id="BLOGGER_PHOTO_ID_5427742933581748834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;La aplicación web se ha desarrollado usando tecnologías J2EE, en concreto una combinación de struts, spring e hibernate. La aplicación consta de dos partes:&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;Una parte pública donde se ofrece la información de los centros y la descarga de la documentación en formato digital, además de la parte pública de la gestión de usuarios de la aplicación.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Una parte privada que hace backoffice de la aplicación donde los usuarios administradores gestionan la información de los centros y la administración de usuarios de la aplicación.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Toda la aplicación está asegurada usado spring security.&lt;br /&gt;&lt;br /&gt;La parte de gestión documental se ha montado sobre el &lt;a href="http://standardoperationprocedure.blogspot.com/2009/03/caso-de-exito-abertis-telecom.html"&gt;gestor documental&lt;/a&gt; corporativo, Alfresco. Se han definido nuevos tipos de documentos para almacenar los metadatos relativos a los documentos y se ha creado un workflow jbpm para la aprobación y publicación de la documentación en la web. La integración de la aplicación web con Alfresco se ha hecho a través de los webservices que Alfresco proporciona.&lt;br /&gt;&lt;br /&gt;El desarrollo de la aplicación se llevó a cabo en el plazo previsto y se publicó dentro del plazo legal previsto por la CMT, proporcionando al público información sobre más de 400 centros y más de 15.000 documentos e imágenes.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-3654783115642145033?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/3654783115642145033/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=3654783115642145033' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3654783115642145033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3654783115642145033'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2010/01/caso-de-exito-publicacion-de.html' title='Caso de éxito : Publicación de documentación para la CMT'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_AskmZuxH5XI/S1M3cNBG2mI/AAAAAAAAAIE/jko8JUF24ik/s72-c/oar2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-7752904251527416488</id><published>2009-07-19T14:08:00.006+02:00</published><updated>2009-07-19T17:35:34.941+02:00</updated><title type='text'>Alfresco 3.2 ya está aquí</title><content type='html'>Alfresco, en su proceso de mejora continua de su producto ECM, ha publicado recientemente la versión 3.2 Community de Alfresco que ya está disponible para su &lt;a href="http://wiki.alfresco.com/wiki/Download_Community_Edition"&gt;descarga &lt;/a&gt;y evaluación.&lt;br /&gt;&lt;br /&gt;Esta nueva versión incluye algunas mejoras muy interesantes que merece la pena destacar.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Mejoras en el cliente Share.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Alfresco ha expresado su intención de seguir con la evolución de la plataforma surf y el cliente Share como línea de trabajo futura. En esta nueva versión, el cliente Share ha sido mejorado y por fin incluye algunas de las características que se echaban de menos en las versiones anteriores. De las nuevas funcionalidades de Share, destacaría las siguientes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Soporte para tipos, aspectos y metadatos  personalizdos.&lt;/li&gt;&lt;li&gt;Nuevos formularios para la edición de metadatos.&lt;/li&gt;&lt;li&gt;Una consola para la creación y gestión de usuarios y grupos.&lt;/li&gt;&lt;li&gt;Nuevos dashlets de previsualización de imágenes, contenidos en edición y documentos favoritos.&lt;/li&gt;&lt;li&gt;Personalización de temas.&lt;/li&gt;&lt;li&gt;Asignación de grupos de sites.&lt;/li&gt;&lt;li&gt;Previsualización de documentos a pantalla completa.&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_AskmZuxH5XI/SmM7pc9hUQI/AAAAAAAAAHQ/ym4fmOSt9mA/s1600-h/alfresco32_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 243px;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/SmM7pc9hUQI/AAAAAAAAAHQ/ym4fmOSt9mA/s400/alfresco32_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5360193564835926274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;2. Cliente para dispositivos móviles.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta nueva versión incluye un cliente penado para ser usado por dispositivos móviles, como teléfonos inteligentes. Este nuevo cliente es más sencillo y da acceso a algunas de las funcionalidades básicas de Alfresco Share como :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Navegación por sites.&lt;/li&gt;&lt;li&gt;Revisión de tareas.&lt;/li&gt;&lt;li&gt;Inicio de workflows.&lt;/li&gt;&lt;li&gt;Acceso a la biblioteca de documentos.&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_AskmZuxH5XI/SmM7pkqgFNI/AAAAAAAAAHY/75bUJ11bELk/s1600-h/alfresco32_2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/SmM7pkqgFNI/AAAAAAAAAHY/75bUJ11bELk/s400/alfresco32_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5360193566903637202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Simplificación de la configuración del servidor.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El equipo de Alfresco ha hecho una revisión de los mecanismos de configuración de Alfresco simplificando los mecanismos de autenticación y sincronización de usuarios. Este cambio es muy de agradecer ya que éste era uno de los puntos más complicados y de mayor fuente de problemas que tenía Alfresco.&lt;br /&gt;&lt;br /&gt;Otras mejoras incluyen la configuración de los File Servers (CIFS, FTP,NFS) y la integración con otras aplicaciones como OpenOffice o ImageMagick.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. Mejor soporte a estándares como CMIS e IMAP.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En su apuesta por la integración y el cumplimiento de estándares, Alfresco incorpora en esta nueva versión una implementación más completa del protocolo CMIS cumpliendo con la versión 0.61 de dicho protocolo.&lt;br /&gt;&lt;br /&gt;Otro protocolo incorporado en la última versión es IMAP. Gracias a esta nueva integración los clientesd e correo que cumplan con este protocolo pueden navegar y ver documentos del repositorio de Alfresco. También se pueden guardar mail directamente en el repositorio, incluyendo la extracción de metadatos y de ficheros adjuntos a los mails.&lt;br /&gt;&lt;br /&gt;5. Mejoras en el repositorio.&lt;br /&gt;&lt;br /&gt;Se han hecho otras muchas mejoras directamente en el repositorio como:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Actualizar la versión del indexador Lucene a la 2.4.1, la versión más reciente (Marzo 2009) de este popular indexador.&lt;/li&gt;&lt;li&gt;Actualizar el motor de procesos jBPM a la versión 3.3.1.&lt;/li&gt;&lt;li&gt;Mejoras en las búsquedas incluyendo el lenguaje de consultas de CMIS.&lt;/li&gt;&lt;li&gt;Optimización de la operación de copia.&lt;/li&gt;&lt;li&gt;Purga de contenidos para eliminarlos directamente del sistema de ficheros.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Mis primeras pruebas con esta versión me han dejado una sensación muy positiva. Habrá que esperar a la versión Enterprise, pero las mejoras que han incorporado en esta nueva versión hacen evolucionar al producto en la línea correcta y cubren algunas de las necesidades de muchos usuarios que hasta el momento no estaban contempladas y que permitirán a Alfresco seguir siendo un jugador de primera línea en el competitivo mercado de los gestores documentales empresariales.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-7752904251527416488?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/7752904251527416488/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=7752904251527416488' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7752904251527416488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7752904251527416488'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2009/07/alfresco-32-ya-esta-aqui.html' title='Alfresco 3.2 ya está aquí'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_AskmZuxH5XI/SmM7pc9hUQI/AAAAAAAAAHQ/ym4fmOSt9mA/s72-c/alfresco32_1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-1963275103401957624</id><published>2009-06-29T23:29:00.009+02:00</published><updated>2009-07-01T18:57:28.950+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='NTLM'/><title type='text'>Alfresco y NTLM</title><content type='html'>&lt;div style="text-align: justify;"&gt;Uno de los requisitos más habituales cuando se instala una herramienta en el ámbito de una empresa es la integración de la seguridad corporativa con la de la nueva aplicación. En muchos escenarios el requisito consiste en establecer un mecanismo de Single Sing-On entre la seguridad de la red corporativa y la nueva aplicación, de forma que los usuarios sólo tengan que autenticarse cuando inician su sesión de sistema operativo y puedan acceder al resto de aplicaciones sin tener que volver a proporcionar su usuario y contraseña.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.alfresco.com/"&gt;Alfresco&lt;/a&gt; es una aplicación que, por sus características de aplicación de ámbito corporativo, es idónea para una integración como la descrita anteriormente. Así mismo, Windows es el sistema operativo más extendido entre los ordenadores personales de las empresas. Por este motivo, las útlimas versiones de Alfresco vienen preparadas para poder hacer esta integración de forma fácil con un mínimo de configuración.&lt;br /&gt;&lt;br /&gt;En este detallado &lt;a href="http://wiki.alfresco.com/wiki/3.0_Configuring_NTLM"&gt;artículo&lt;/a&gt;, se describen los pasos necesarios para habilitar la autenticación mediante NTLM en modo passthru. El apartado dedicado a la activación de los filtros de autenticación en el fichero web.xml es claro y no necesita más explicaciones. La configuración de la autenticación passthru con NTLM necesita algunas aclaraciones.&lt;br /&gt;&lt;br /&gt;La definición del SSO con ntlm se hace en el fichero ntlm-authentication-context.xml situado en el directorio de extensiones de Alfresco. En este caso es un controlador de dominio el encargado de realizar la auteticación y proporcionar la lista de usuarios disponibles en Alfresco. Es necesario configurar el bean authenticationComponent con los valores adecuados para que reconozca al servidor de dominio. Por ejemplo:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 204);font-family:courier new;font-size:78%;"  &gt;   &amp;lt;bean id="authenticationComponent"&lt;br /&gt;       class="org.alfresco.repo.security.authentication.ntlm.NTLMAuthenticationComponentImpl"&lt;br /&gt;       parent="authenticationComponentBase"&gt;&lt;br /&gt;     &amp;lt;property name="useLocalServer"&gt;&lt;br /&gt;         &amp;lt;value&gt;false&amp;lt;/value&gt;&lt;br /&gt;     &amp;lt;/property&gt;&lt;br /&gt;     &amp;lt;property name="servers"&gt;&lt;br /&gt;         &amp;lt;value&gt;drake.in2.es,IN2\drake&amp;lt;/value&gt;&lt;br /&gt;     &amp;lt;/property&gt;&lt;br /&gt;     &amp;lt;property name="personService"&gt;&lt;br /&gt;         &amp;lt;ref bean="personService" /&gt;&lt;br /&gt;     &amp;lt;/property&gt;&lt;br /&gt;     &amp;lt;property name="nodeService"&gt;&lt;br /&gt;         &amp;lt;ref bean="nodeService" /&gt;&lt;br /&gt;     &amp;lt;/property&gt;&lt;br /&gt;     &amp;lt;property name="transactionService"&gt;&lt;br /&gt;         &amp;lt;ref bean="transactionComponent" /&gt;&lt;br /&gt;     &amp;lt;/property&gt;&lt;br /&gt;     &amp;lt;property name="guestAccess"&gt;&lt;br /&gt;         &amp;lt;value&gt;false&amp;lt;/value&gt;&lt;br /&gt;     &amp;lt;/property&gt;&lt;br /&gt; &amp;lt;/bean&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;La propiedad servers es la usada para definir el controlador de dominio. Es importante destacar que hay que proporcionar el dominio del servidor para que el SSO tenga efecto. En caso contrario aparecerá este mensaje de error cuando se intente acceder al Alfresco mediante SSO:&lt;span style="color: rgb(255, 0, 0);font-family:courier new;font-size:85%;"  &gt;&lt;span style="display: block; padding-left: 6em; text-indent: -1em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;font-size:85%;"  &gt;&lt;span style="display: block; padding-left: 6em; text-indent: -1em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;font-size:85%;"  &gt;&lt;span style="display: block; padding-left: 6em; text-indent: -1em;"&gt;&lt;span&gt;net.sf.acegisecurity.&lt;wbr&gt;AuthenticationServiceException&lt;wbr&gt;: Failed to open passthru auth session&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Si además del cliente web de Alfresco se quiere utilizar CIFS para acceder a los contenidos, también hay que aplicar una configuración concreta. De los diferentes mecanismos de autenticación disponibles (alfresco, passthru o enterprise), el más adecuado es passthru usando el mismo servidor de dominio que el usado en el caso anterior. En este caso no hace falta especificar el dominio de los usuarios. Por ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;      &amp;lt;authenticator type="passthru"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         &amp;lt;Server&gt;drake.in2.es&amp;lt;/Server&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &amp;lt;/authenticator&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un detalle que hay que tener en cuenta con esta configuración es que sólo funciona si el sistema operativo del cliente envía las credenciales de autenticación usando NTLMv1. Si el sistema sólo usa NTLMv2, no será posible hacer el SSO ya que las caracterísitcas de este protocolo lo impiden.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;En Windows se puede modificar este comportamiento siguiendo estos pasos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Desde el panel de control (vista clásica), abrir Herramientas Administrativas -&gt; Política de seguridad Local.&lt;/li&gt;&lt;li&gt;En la ventana de Política de seguridad local, seleccionar la carpeta Políticas Locales y luego Opciones de Seguridad.&lt;/li&gt;&lt;li&gt;En la lista de opciones de seguridad, seleccionar 'Network Security : nivel de autenticación del controlador LAN'.&lt;/li&gt;&lt;li&gt;Cambiar el valor por defecto por 'Enviar LM &amp;amp; NTLM - usar seguridad de sesión NTLMv2 si se negocia'.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Con estas configuraciones de Alfresco y Windows se consigue un acceso transparente a Alfresco solo con haber iniciado una sesión de red corporativa.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-1963275103401957624?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/1963275103401957624/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=1963275103401957624' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/1963275103401957624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/1963275103401957624'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2009/06/alfresco-y-ntlm.html' title='Alfresco y NTLM'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-5836047076862432456</id><published>2009-05-29T09:16:00.016+02:00</published><updated>2009-06-05T15:42:31.119+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Diez formas de integrarse con Alfresco</title><content type='html'>En este blog hemos comentado otra veces las virtudes de &lt;a href="http://www.alfresco.com/"&gt;Alfresco&lt;/a&gt; como ECM. Uno de los puntos que siempre se destaca de esta solución es la gran capacidad de integración que tiene el producto con otros sistemas y la gran variedad de interficies de acceso que proporciona para trabajar con él. Vamos a hacer un repaso de las diez opciones más importantes y de los componentes que participan en cada una de ellas.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_AskmZuxH5XI/SikgNQMZO4I/AAAAAAAAAHI/LtDj-U-J2-4/s1600-h/ALF1_Alfresco.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 232px;" src="http://2.bp.blogspot.com/_AskmZuxH5XI/SikgNQMZO4I/AAAAAAAAAHI/LtDj-U-J2-4/s400/ALF1_Alfresco.jpg" alt="" id="BLOGGER_PHOTO_ID_5343837844909144962" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;1. SOAP&lt;/span&gt;&lt;div style="text-align: justify;"&gt;Es un estándar abierto basado en XML pensado para la integración de aplicaciones. Típicamente funciona sobre http y existen herramientas de desarrollo para casi cualquier lenguaje, incluyendo toolkits muy potentes para .NET y Java.  Alfresco proporciona de serie una capa de web services que cubren la mayor parte de la funcionalidad requerida para trabajar con el repositorio documental.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. CMIS&lt;/span&gt;&lt;br /&gt;Es el estándar de servicios de interoperabilidad entre gestores de contenidos. Es una iniciativa bastante reciente pero que cuenta con el apoyo de las principales empresas fabricantes de CM, como IBM, EMC, Microsoft o la propia Alfresco. También está basado en web services. Desde su versión 3.0, Alfresco incorpora una implementación de CMIS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. JCR&lt;/span&gt;&lt;br /&gt;Es la implementación de Alfresco del estándar JSR-170, que define los repositorios de contenidos en Java. Alfresco cumple con los niveles 1 y 2 de este estándar. En el caso de Alfresco el acceso al repositorio mediante esta API se hace mediante beans de Spring.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. AJAX/Mashups/Webscripts&lt;/span&gt;&lt;br /&gt;Alfresco incorpora una API de Webscripts basada en tecnología REST, que consiste en llamadas HTTP que interactuan con el repositorio de contenidos. El resultado de estas llamadas se puede devolver en gran variedad de formatos como HTML, JSON, RSS y otros formatos web, lo que facilita mucho la integración de servicios de Alfresco con otras aplicaciones web. Esta integración está muy orientada al mundo del web 2.0 y es una de las grandes apuestas de Alfresco para el futuro.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_AskmZuxH5XI/SikOelpFkDI/AAAAAAAAAG4/u3qVcFeT5-M/s1600-h/ALF1_FB_DocLib_FrontPage.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 177px;" src="http://3.bp.blogspot.com/_AskmZuxH5XI/SikOelpFkDI/AAAAAAAAAG4/u3qVcFeT5-M/s400/ALF1_FB_DocLib_FrontPage.jpg" alt="" id="BLOGGER_PHOTO_ID_5343818351515111474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5. Java Foundation API&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Esta API proporciona todos los servicios para interactuar con el repositorio de contenidos. En realidad lo que se proporciona es un conjunto de interfaces que representan funcionalidades del repositorio. Las implementaciones de estas interfaces están proporcionadas por bean de Spring Framework. Es la API más extensa para interactuar con Alfresco pero tiene la importante restricción de que sólo se puede usar por clientes que corran en el mismo proceso de el repositorio&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6. OpenSearch&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;OpenSearch es una colección de formatos para compartir resultados de búsquedas cuya ejecución está soportada vía peticiones HTTP. Alfresco expone su motor de búsquedas a través de OpenSearch de forma que otras aplicaciones pueden consultar y obtener documentos del repositorio. Alfresco Explorer incluye un componente en para agregar a las búsquedas otros motores que cumplan con estos formatos.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7. WCM&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;El Web Content Management permite integrar un amplia abánico de recursos externos al repositorio como XForms, recursos REST, PHP, JSF, Ruby o Struts. Además se puede integrar con portales corporativos que cumplan el estándar JSR-168.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_AskmZuxH5XI/SikOeWTZmgI/AAAAAAAAAGw/sdbFw1LmgCE/s1600-h/alf1_wcm.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 206px;" src="http://2.bp.blogspot.com/_AskmZuxH5XI/SikOeWTZmgI/AAAAAAAAAGw/sdbFw1LmgCE/s400/alf1_wcm.png" alt="" id="BLOGGER_PHOTO_ID_5343818347397618178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;8. BPEL Workflows&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Este lenguaje permite definir workflows que relacionen diferentes sistemas con capacidad de integrar la interacción humana. Los eventos del workflow se pueden comunicar con Alfresco a través de webservices de forma que las funcionalidades del gestor de contenidos estarán disponibles para ser usadas en cualquier paso del proceso.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;9. Portal&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Es posible integrar la funcionalidad de Alfresco en servidores de portal como Liferay. Hay diferentes formas de hacerlo. Una de ellas es usar la API REST de Alfresco y publicando los webscripts como portlets. Se pueden aprovechar los web scripts existentes y que cubren gran parte de la funcionalidad del gestor documental o bien se pueden desarrollar nuevos web scritps para cubrir funcionalidades concretas. Otra aproximación posible es usar los servicios CMIS para obtener respuestas en XML y formatearlas usando plantillas XSLT&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;10. Protocolo Sharepoint&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En sus últimas versiones, Alfresco incluye una implementación del protocolo Sharepoint para comunicarse con las aplicaciones del paquete ofimático Office de Microsoft. De esta forma los usuarios de las aplicaciones de Office pueden compartir documentos como si estuvieran usando espacios de Sharepoint de forma totalmente transparente para ellos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_AskmZuxH5XI/SikOecbwY1I/AAAAAAAAAGo/JXlZ3463Qbk/s1600-h/alf1_sharepoint-protocol-support.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_AskmZuxH5XI/SikOecbwY1I/AAAAAAAAAGo/JXlZ3463Qbk/s400/alf1_sharepoint-protocol-support.png" alt="" id="BLOGGER_PHOTO_ID_5343818349043278674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Alfresco ha demostrado ser una solución adecuada para implementar la gestión documental completa de cualquier empresa, proporcionando un servicio transversal disponible para la integración con la gran mayoría de los sistemas de la empresa.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-5836047076862432456?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/5836047076862432456/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=5836047076862432456' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/5836047076862432456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/5836047076862432456'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2009/05/diez-formas-de-integrarse-con-alfresco.html' title='Diez formas de integrarse con Alfresco'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_AskmZuxH5XI/SikgNQMZO4I/AAAAAAAAAHI/LtDj-U-J2-4/s72-c/ALF1_Alfresco.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-2783244601686401875</id><published>2009-04-28T12:00:00.001+02:00</published><updated>2009-04-28T12:00:01.066+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Oracle compra Sun</title><content type='html'>&lt;div style="text-align: justify;"&gt;Esta semana ha saltado una noticia que seguro que alterará el actual panorama del software Open Source : Oracle comprará Sun.&lt;br /&gt;&lt;br /&gt;Esta compra supone para Oracle posicionarse como un gigante de la industria informática, comparable a IBM. La adquisición de Sun, abrirá para Oracle nuevos segmentos de negocio con los que hasta el momento no había tenido nada que ver como los servidores, redes, microelectrónica y sistemas operativos. En este sentido, la compra no la veo como un intento de constituir un  monopolio sino como la creación de un nuevo competidor capaz de ofrecer un stack completo que abarque desde la plataforma hardware hasta las aplicaciones de negocio pasando por el sistema operativo, la base de datos y el servidor de aplicaciones.&lt;br /&gt;&lt;br /&gt;Otra cuestión es como se va a efectuar la fusión de los diferentes productos de Sun con los de Oracle y el &lt;span style="font-style: italic;"&gt;roadmap&lt;/span&gt; que van a seguir. Este punto suele ser bastante delicado y provoca periodos de incertidumbre sobre el futuro de algunos productos que a la larga puede ser perjudicial para la propia empresa. Un ejemplo de esto que también tiene a Oracle como protagonista, es la fusión de las suites de aplicaciones de BEA Systems, que empezó el año pasado y aun hoy en día no está del todo clara.&lt;br /&gt;&lt;br /&gt;Es precisamente esta incertidumbre la que genera las dudas más difíciles de responder. ¿Ahora que Oracle había pensado abandonar los servidores de aplicaciones OC4j y adoptar Weblogic, donde encajará Glassfish? ¿Mantendrá Oracle soporte para JRockit y JDK o fusionará ambas JVM? ¿Cual será el futuro de MySQL? Éstas y otras muchas dudas de este estilo seguro que rondan por la cabeza de miles de usuarios y clientes de Oracle y Sun .&lt;br /&gt;&lt;br /&gt;Al margen de estas cuestiones más comerciales quizás hay otra de mayor alcance, ¿qué será de Java? Hasta la fecha, Java ha sido uno de los pilares del mundo Open Source sobre el cual se han construido infinidad de aplicaciones, librerías y otras soluciones y del cual existe una amplísima comunidad de desarrolladores y contribuidores que ha permitido a Java convertirse en la tecnología estrella del mundo de las aplicaciones web empresariales. Con el cambio de dueño, ¿se mantendrá este apoyo? ¿Seguirán las empresas que tanto han apostado por Java, como IBM, contribuyendo y desarrollando en una tecnología cuyo futuro está manos de una competidora directa?&lt;br /&gt;&lt;br /&gt;Hasta la fecha, la evolución de Java estaba en manos de una empresa comercial como Sun, que casi siempre ha mostrado una vocación bastante abierta a la hora de permitir que otras empresas contribuyeran a la misma. Oracle, por su parte, lleva muchos años apostando por esta tecnología pero con una aproximación más propietaria (¿ADF?) a pesar de haber hecho algunas contribuciones a la comunidad.&lt;br /&gt;&lt;br /&gt;Aun falta tiempo para que estas dudas y otras se aclaren. Habrá que esperar a que Oracle haga públicos sus planes, como enfocará la fusión y la reacción del resto de empresas. En mi opinión, las principales víctimas serán NetBeans, Glassfish y MySQL, que son los productos que más entran en conflicto con los de Oracle. Creo que Java seguirá evolucionando como siempre y a lo mejor nos llevamos alguna sorpresa agradable al respecto. Esperemos...&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-2783244601686401875?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/2783244601686401875/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=2783244601686401875' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/2783244601686401875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/2783244601686401875'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2009/04/oracle-compra-sun.html' title='Oracle compra Sun'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-3810598507089893543</id><published>2009-04-08T12:51:00.007+02:00</published><updated>2009-04-08T13:44:47.927+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenOffice'/><title type='text'>Alfresco y OpenOffice</title><content type='html'>&lt;div style="text-align: justify;"&gt;El gestor documental Alfresco nació con la vocación de ser un referente tecnológico en el mundo de los gestores documentales y ser el estandarte de una nueva generación de productos open source para la empresa actual. Con este objetivo, el equipo de desarrollo de Alfresco centró sus esfuerzos en conseguir una implementación puntera del repositorio y aprovechó un conjunto de tecnologías open source ya existentes, probadas y de gran aceptación para acabar de construir el producto que es hoy en día.&lt;br /&gt;&lt;br /&gt;Una gran ventaja de este enfoque es que la responsabilidad de ciertas acciones que realiza Alfresco recae en software bien probado y que no se ha "reinventado la rueda" para hacer algo que ya hacía un producto consolidado en el mercado. La arquitectura de Alfresco es lo suficientemente abierta y flexible como para delegar estas tareas en aplicaciones de terceros como puedan ser ImageMagik u &lt;a href="http://www.openoffice.org/"&gt;OpenOffice&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;La parte negativa de esto es que cuando falla alguna de las tareas ejecutadas por aplicaciones externas, cuesta saber si el error está en Alfresco o en la aplicación. Recientemente, nos hemos encontrado con un caso de este tipo que implicaba OpenOffice.&lt;br /&gt;&lt;br /&gt;En una instalación de Alfresco de uno de nuestros clientes, tienen una regla en un espacio que hace la conversión a PDF de determinados tipos de ficheros. Esta regla acostumbraba a ir bien hasta cierto momento en el que dejaba de funcionar y cesaba la conversión a PDF. Había que reiniciar la aplicación para que la regla volviera a funcionar y  siempre acababa por fallar.&lt;br /&gt;&lt;br /&gt;Después de muchas pruebas, Bea, compañera de &lt;a href="http://www.in2.es/"&gt;IN2&lt;/a&gt;, encontró la causa del problema y la solución. La conversión a PDF dejaba de funcionar porque OpenOffice se quedaba sin memoria para ejecutar la transformación. La solución a este problema está en modificar la configuración inicial de OpenOffice para aumentar el máximo de memoria caché permitida.&lt;br /&gt;&lt;br /&gt;Este parámetro de ha de definir en el fichero &lt;span lang="EN-US"&gt;&lt;span style="font-weight: bold;"&gt;Common.xcu&lt;/span&gt; de OpenOffice, que se suele encontrar en &lt;span style="font-style: italic;"&gt;&lt;openoffice_home&gt;&lt;/openoffice_home&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;/Data/settings/user/registry/data/org/openoffice/Office. &lt;/span&gt;Para definir la memoria que se permite usar hay que añadir el siguiente bloque antes del final del fichero:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;lt;oor:component-data xmlns:oor="...&amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;p class="MsoListParagraph" style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt;  &amp;lt;node oor:name="Cache"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt;    &amp;lt;node oor:name="GraphicManager"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph" style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt;      &amp;lt;prop oor:name="ObjectCacheSize" oor:type="xs:int"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph" style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt;                                      &lt;span style=""&gt;&amp;lt;value&amp;gt;20971520&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph" style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt;     &amp;lt;/prop&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph" style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt;     &amp;lt;prop oor:name="TotalCacheSize" oor:type="xs:int"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph" style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt;                                     &lt;span style=""&gt;&amp;lt;value&amp;gt;134217728&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph" style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt;    &amp;lt;/prop&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph" style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt; &amp;lt;/node&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListParagraph" style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt; &amp;lt;/node&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&amp;lt;/oor:component-data&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Con estos valores hay suficiente para tratar la mayoría de las transformaciones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-3810598507089893543?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/3810598507089893543/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=3810598507089893543' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3810598507089893543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3810598507089893543'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2009/04/alfresco-y-openoffice.html' title='Alfresco y OpenOffice'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-1986350789658315698</id><published>2009-03-15T14:05:00.004+01:00</published><updated>2009-03-15T14:54:54.782+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IN2'/><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>2ª Edición del curso de Alfresco en La Llacuna</title><content type='html'>&lt;span style="font-style: italic;"&gt;Este fin de semana ha tenido lugar la segunda edición del curso de &lt;a href="http://www.alfresco.com/"&gt;Alfresco&lt;/a&gt; en La Llacuna. Dentro del plan de formación continua de IN2, las jornadas de La Llacuna sirven para estar al día de las tecnologías más utilizadas por IN2 y para fomentar el trabajo en equipo.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Hace unos meses tuvo lugar &lt;a href="http://standardoperationprocedure.blogspot.com/2008/07/curso-de-alfresco.html"&gt;el primer curso de Alfresco&lt;/a&gt; en La Llacuna y esta semana hemos celebrado el segundo. Mientras que el primero estuvo centrado en la instalación, configuración e integración del producto, este segundo curso ha estado orientado a la personalización y extensión de Alfresco.&lt;/div&gt;&lt;br /&gt;El temario dado comprendía los siguientes puntos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Preparación del entorno de desarrollo.&lt;/li&gt;&lt;li&gt;Extensión del modelo documental.&lt;/li&gt;&lt;li&gt;Adaptación del cliente web para el nuevo modelo documental.&lt;/li&gt;&lt;li&gt;Tratamiento automático de contenidos: acciones y behaviours.&lt;/li&gt;&lt;li&gt;Extensión del cliente web: botones y diálogos.&lt;/li&gt;&lt;li&gt;Webscripts.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;El curso ha tenido un marcado carácter práctico y los participantes han tenido que resolver ejercicios de cada uno de los puntos del temario. Además hemos tenido la posibilidad de explicar experiencias reales que nos hemos encontrado en los diferentes proyectos realizados con Alfresco por IN2.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_AskmZuxH5XI/Sb0HxyPVYlI/AAAAAAAAAFw/h-G5zx-wQtY/s1600-h/IMG_2609.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/Sb0HxyPVYlI/AAAAAAAAAFw/h-G5zx-wQtY/s400/IMG_2609.JPG" alt="" id="BLOGGER_PHOTO_ID_5313411687248126546" border="0" /&gt;&lt;/a&gt;Además de aprender, el curso también ha servido para que los colaboradores de IN2 podamos  conocernos mejor, compartir nuestras experiencias y fomentar el trabajo en equipo.&lt;br /&gt;&lt;br /&gt;Este año he tenido la suerte de compartir este curso con un gran grupo de gente con la que me lo he pasado muy bien: Óscar, Javi, Jordi, Milton, Pedro, Jesús, Fabio, Marta, &lt;a href="http://downloadsrc.blogspot.com/"&gt;Raquel &lt;/a&gt;y Lenin. Además he tenido la suerte (o privilegio) de compartir la labor de profesor con Xavi, que ha hecho un gran trabajo y ha compartido con nosotros su gran experiencia con Alfresco.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_AskmZuxH5XI/Sb0HxxAjTZI/AAAAAAAAAFo/4lE3t0F3E54/s1600-h/IMG_2600.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_AskmZuxH5XI/Sb0HxxAjTZI/AAAAAAAAAFo/4lE3t0F3E54/s400/IMG_2600.JPG" alt="" id="BLOGGER_PHOTO_ID_5313411686917688722" border="0" /&gt;&lt;/a&gt;Como colofón del curso, tuvimos una actividad de trabajo en grupo que sirvió para relajarnos después de las clases y explorar las posibilidades del trabajo en equipo. Fué una sesión con momentos muy divertidos y nos reimos mucho.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_AskmZuxH5XI/Sb0HycpnMYI/AAAAAAAAAF4/z3OQ4lSG4Ew/s1600-h/IMG_2615.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/Sb0HycpnMYI/AAAAAAAAAF4/z3OQ4lSG4Ew/s400/IMG_2615.JPG" alt="" id="BLOGGER_PHOTO_ID_5313411698632634754" border="0" /&gt;&lt;/a&gt;Espero que el curso haya resultado útil a mis compañeros y que haya disfrutado de estas jornadas en compañía del grupo. Ojalá que podamos seguir con esta iniciativa y que el año que viene podamos celebrar la tercera edición del curso.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-1986350789658315698?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/1986350789658315698/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=1986350789658315698' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/1986350789658315698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/1986350789658315698'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2009/03/2-edicion-del-curso-de-alfresco-en-la.html' title='2ª Edición del curso de Alfresco en La Llacuna'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_AskmZuxH5XI/Sb0HxyPVYlI/AAAAAAAAAFw/h-G5zx-wQtY/s72-c/IMG_2609.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-4316351063490152038</id><published>2009-03-12T08:00:00.002+01:00</published><updated>2009-03-17T00:14:18.583+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IN2'/><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Caso de éxito: Operador de telecomunicaciones</title><content type='html'>&lt;div style="text-align: justify;"&gt;Esta semana se ha dado por concluido el proyecto de migración de la gestión documental de uno de los principales operadores de telecomunicaciones.&lt;br /&gt;&lt;br /&gt;Esta empresa forma parte de un  grupo líder europeo en gestión de infraestructuras, con una fuerte presencia en los sectores de autopistas, aeropuertos, telecomunicaciones, aparcamientos y parques logísticos. actualmente cuenta con presencia en 17 países y tiene una plantilla de casi 11.000 empleados.&lt;br /&gt;&lt;br /&gt;Dentro del grupo, nuestro cliente era la empresa encargada de las infraestructuras y servicios de telecomunicaciones, siendo la principal red de difusión de radio y televisión de España. También es una importante operadora de servios por satélite.&lt;br /&gt;&lt;br /&gt;Esta empresa tenía parte de su gestión documental externalizada de forma que no tenía mucho control sobre la forma que se trataba y almacenaba dicha información. Con el objetivo de tener un mayor control sobre esta información y de no depender de terceros para la gestión de información tan sensible, se decidió integrar esta gestión documental en sus propios sistemas.&lt;br /&gt;&lt;br /&gt;Aquí fué donde IN2, gracias a su amplia experiencia en proyectos con el gestor documental Alfresco, empezó su colaboración con el operador de telecomunicaciones para conseguir los objetivos mencionados.&lt;br /&gt;&lt;br /&gt;El proyecto consistió en configurar y parametrizar el gestor documental corporativo Alfresco  para que pudiera soportar la gestión de la documentación y toda su información asociada. Se creó un nuevo modelo documental y se añadieron acciones especiales para la extracción de metainformación para incorporarla a los documentos. También se realizó la migración de toda la documentación almacenada en la antigua herramienta de gestión documental al Alfresco.&lt;br /&gt;&lt;br /&gt;El resultado, ha permitido a nuestro cliente tomar el control de su documentación  y ampliar las posibilidades de explotación de toda la información almacenada.&lt;br /&gt;&lt;br /&gt;Gracias al esfuerzo de Xavi y Mónica y la guía de Porfi y Josefí, el proyecto ha sido un éxito notable y el cliente ha expresado su satisfacción con el resultado. Enhorabuena a todos.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-4316351063490152038?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/4316351063490152038/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=4316351063490152038' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/4316351063490152038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/4316351063490152038'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2009/03/caso-de-exito-abertis-telecom.html' title='Caso de éxito: Operador de telecomunicaciones'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-3434077468195720282</id><published>2009-03-10T00:15:00.003+01:00</published><updated>2009-03-10T00:55:08.352+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='SCEA'/><title type='text'>Primera parte de SCEA, ¡ aprobada !</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hace unos meses empecé a prepararme, junto a otros compañeros de IN2, para la certificación de Sun Certified Enterprise  Architect for Java EE (SCEA). Es la certificación de más alto nivel de las que ofrece Sun dentro del marco de tecnología Java, y está compuesta por dos exámenes y un trabajo práctico.&lt;br /&gt;&lt;br /&gt;La semana pasada me presenté al primer examen y.. ¡ lo aprobé a la primera !&lt;br /&gt;&lt;br /&gt;De momento ya somos dos los que hemos aprobado este examen, ya que &lt;a href="http://emmersonmiranda.blogspot.com/2009/02/scea-50-parte1-aprobada-en-busca-de-la.html"&gt;Emmerson lo aprobó antes&lt;/a&gt;, y espero que el resto de compañeros también lo aprueben pronto.&lt;br /&gt;&lt;br /&gt;Han sido dos meses de estudio, recopilando y leyendo material diverso sobre arquitectura, patrones y tecnologías Java. Han sido dos meses de quedarnos los viernes por la tarde haciendo exámenes e intercambiando opiniones. Al final el esfuerzo ha valido la pena.&lt;br /&gt;&lt;br /&gt;Leer el material de Sun me ha hecho pensar en la &lt;a href="http://standardoperationprocedure.blogspot.com/2008/12/el-arquitectos-de-software-de-in2.html"&gt;una entrada&lt;/a&gt; que escribí hace unos meses, donde daba una visión de lo que podría definirse como un arquitecto de software. En ese marco, la visión que tiene Sun de lo que debería ser un arquitecto de software encaja más con ese perfil de técnico avanzado o especialista dentro de una organización. Es una visión legítima de lo que debería ser un arquitecto pero, desde mi punto de vista, demasiado orientada a la tecnología y alejada del negocio.&lt;br /&gt;&lt;br /&gt;Las nuevas tendencias, con SOA al frente, hacen que esta visión de lo que es un arquitecto de software esté quedando un poco obsoleta, o mejor dicho, un poco limitada, ya que las responsabilidades que puede adopatar un arquitecto son mucho más amplias.&lt;br /&gt;&lt;br /&gt;De cualquier forma, yo voy a seguir esforzándome para obtener la certificación completa ya que aprender algo nuevo siempre está bien y en el fondo la tecnología me sigue gustando mucho.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-3434077468195720282?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/3434077468195720282/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=3434077468195720282' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3434077468195720282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3434077468195720282'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2009/03/primera-parte-de-scea-aprobada.html' title='Primera parte de SCEA, ¡ aprobada !'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-3142468965304982640</id><published>2009-02-15T23:09:00.008+01:00</published><updated>2009-02-16T15:32:33.250+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IN2'/><title type='text'>Caso de éxito: CRM Protocolo</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Ya está en producción el último fruto de la colaboración entre IN2 y Fira de Barcelona. Se trata de la aplicación de CRM de Protocolo o, como se la conocido durante su desarrollo, Protocolo VIP.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Fira de Barcelona, con más de 70 años de historia, cuenta hoy en día con la mayor superficie firal de España (365.000 m2 brutos para exposición) y una de  las primeras de Europa&lt;span style="font-weight: bold;"&gt;. &lt;/span&gt;&lt;strong&gt;Con una cartera de 80 salones, reúne 40.500 empresas directas y  representadas y recibe 3,5 millones de visitantes. 15 de sus salones son  referentes europeos, figurando entre los tres primeros de la   especialidad&lt;/strong&gt;. Lidera los salones industriales - profesionales  españoles, su aportación anual a la economía es de unos 2.500 millones de euros  y contribuye a crear 41.000 puestos de trabajo.&lt;br /&gt;&lt;br /&gt;Dada la naturaleza del negocio de Fira de Barcelona, las actividades protocolarias y de representación son sumamente importantes, por lo que es necesario contar con una herramienta de ayuda a la gestión y mantenimiento de la información relativa de todas las autoridades de los diferentes salones y organismos que componen Fira de Barcelona.&lt;br /&gt;&lt;br /&gt;Hasta el momento esta gestión se hacía mediante la herramienta CRM de SAP, pero el alto coste de mantenimiento de esta solución, tanto económico como tecnológico, hizo que se buscara una alternativa más económica y flexible. Se evaluaron diferentes opciones y se acabó deciendo desarrollar una aplicación a medida usando tecnología JavaEE.&lt;br /&gt;&lt;br /&gt;IN2, con su gran experiencia en el desarrollo de aplicaciones con esta tecnología, participó en el proyecto desde una fase muy temprana, y contribuyó en el análisis y diseño del nuevo sistema, así como en toda la fase de desarrollo e implantación.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_AskmZuxH5XI/SZl3lO2IpxI/AAAAAAAAAFQ/qdtj4iOIIwo/s1600-h/ClipBoard-5web.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 216px;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/SZl3lO2IpxI/AAAAAAAAAFQ/qdtj4iOIIwo/s400/ClipBoard-5web.jpg" alt="" id="BLOGGER_PHOTO_ID_5303401517729490706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;El objetivo de la aplicación es disponer de una herramienta de fácil uso que proporcione potentes prestaciones de búsqueda para obtener la máxima información útil de los VIPs de Fira de Barcelona. También ha de permitir realizar el mantenimiento de la información de los VIPs y de las relaciones con las organizaciones a las que representan, así como de la información relativa a la comunicación institucional con Fira de Barcelona. Complementariamente, también debe dar soporte al mantenimiento de información común al negocio de Fira de Barcelona.&lt;br /&gt;&lt;br /&gt;El resultado han sido dos aplicaciones con arquitectura de tres capas, donde se ha aplicado &lt;span style="font-weight: bold;"&gt;Hibernate &lt;/span&gt;y el patrón DAO para la capa de persistencia, &lt;span style="font-weight: bold;"&gt;Spring Framework&lt;/span&gt; para la capa de servicios y &lt;span style="font-weight: bold;"&gt;Spring MVC&lt;/span&gt; para la presentación. Además se ha utilizado Spring Security para la autenticación y librerías POI para la generación de documentos compatibles con Microsoft Office. En combinación con estas aplicaciones se ha dotado a Fira de Barcelona de una capa de servicios de acceso a datos que podrá ser usada por otras aplicaciones de la empresa.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_AskmZuxH5XI/SZl3lNjBA6I/AAAAAAAAAFI/3oHSWT5BOgA/s1600-h/ClipBoard-2web.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 216px;" src="http://1.bp.blogspot.com/_AskmZuxH5XI/SZl3lNjBA6I/AAAAAAAAAFI/3oHSWT5BOgA/s400/ClipBoard-2web.jpg" alt="" id="BLOGGER_PHOTO_ID_5303401517380862882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Gracias al esfuerzo de Naiara, Albert y Victor el nuevo CRM de Protocolo de Fira está listo. Ahora Fira de Barcelona cuenta con una herramienta que cubre todas sus necesidades, basada en una tecnología actual  y con una arquitectura flexible que permitirá añadir nuevas funcionalidades cuando sea necesario.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-3142468965304982640?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/3142468965304982640/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=3142468965304982640' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3142468965304982640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3142468965304982640'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2009/02/caso-de-exito-crm-protocolo.html' title='Caso de éxito: CRM Protocolo'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_AskmZuxH5XI/SZl3lO2IpxI/AAAAAAAAAFQ/qdtj4iOIIwo/s72-c/ClipBoard-5web.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-2254780923617548097</id><published>2009-01-26T01:00:00.000+01:00</published><updated>2009-01-26T01:00:25.267+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>Tipos de proyectos SOA</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hay muchas formas de clasificar los proyectos dependiendo de los parámetros que se tengan en cuenta. Esto también es aplicable a los proyectos SOA.&lt;br /&gt;&lt;br /&gt;Esta clasificación pretende catalogar las formas más comunes de adoptar SOA por parte de una empresa. Hay tres posibles acercamientos:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Orientado a proyecto.&lt;/li&gt;&lt;li&gt;Orientado a sistemas.&lt;/li&gt;&lt;li&gt;Corporativo.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Orientado a proyecto&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este tipo de acercamiento corresponde al escenario en el que un departamento de una empresa decide solucionar una necesidad de negocio aplicando técnicas y tecnologías de SOA.&lt;br /&gt;&lt;br /&gt;En muchos casos la solución consiste en definir algunos procesos de negocio e implantarlos mediante un BPM, o bien, habilitar la comunicación de dos sistemas mediante webservices y un service bus.&lt;br /&gt;&lt;br /&gt;En estos casos el resultado inmediato suele ser satisfactorio y se obtiene un beneficio rápido. A fin de cuentas las tecnologías usadas por SOA tienen mucho ámbitos de aplicación, son fiables y dan buen rendimiento.&lt;br /&gt;&lt;br /&gt;El problema radica en que no se está haciendo una verdadera implantación de SOA ya que no tiene un alcance corporativo, sólo implica a un departamento, y no se ha hecho pensando en las necesidades de toda la empresa. Como consecuencia de esta aproximación, los problemas de flexibilidad e interacción entre sistemas permanecerán.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Orientado a sistemas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En este caso el promotor del proyecto suele ser el departamento de IT, que busca una solución para comunicar los diferentes sistemas usados por la compañía.&lt;br /&gt;&lt;br /&gt;Esta aproximación puede parecer que tiene una alcance corporativo pero tampoco es un proyecto SOA ya que se trata de un proyecto estrictamente tecnológico. El objetivo de una buena implantación de SOA en una empresa es alinear el negocio con la tecnología .&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Orientado a la empresa&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta es la implantación ideal de SOA. Estos proyectos están promovidos por la dirección de la empresa y tienen un alcance corporativo que afecta a todos los departamentos.&lt;br /&gt;&lt;br /&gt;En estos escenarios la dirección y el departamento IT van coordinados y forman el gobierno SOA, pieza imprescindible para el éxito de cualquier implantación SOA.&lt;br /&gt;&lt;br /&gt;Este enfoque quizás sea el que tarde más en obtener beneficios, pero a la larga es el que más se beneficia de las ventajas proporcionadas por SOA, como la flexibilidad, capacidad de adaptación y crecimiento y ahorro de costes (a largo plazo).&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-2254780923617548097?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/2254780923617548097/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=2254780923617548097' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/2254780923617548097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/2254780923617548097'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2009/01/tipos-de-proyectos-soa.html' title='Tipos de proyectos SOA'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-5072152205082029239</id><published>2008-12-29T11:00:00.000+01:00</published><updated>2008-12-29T16:44:01.357+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Libros sobre Alfresco</title><content type='html'>&lt;div style="text-align: justify;"&gt;Recientemente he leído dos libros  sobre Alfresco que me han parecido bastante interesantes porque son una buena referencia para la gente que quiera desarrollar sobre Alfresco.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_AskmZuxH5XI/SVisJPv9CuI/AAAAAAAAAFA/tQhQY2ouK7A/s1600-h/libro_alfresco1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 250px; height: 320px;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/SVisJPv9CuI/AAAAAAAAAFA/tQhQY2ouK7A/s320/libro_alfresco1.jpg" alt="" id="BLOGGER_PHOTO_ID_5285163437565741794" border="0" /&gt;&lt;/a&gt;El libro &lt;span style="font-weight: bold;"&gt;'Alfresco&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; - ECM Implementation'&lt;/span&gt;, de &lt;span style="font-weight: bold;"&gt;Munwar Shariff&lt;/span&gt;, es una introducción bastante completa al desarrollo sobre Alfresco. Afronta los temas desde la perspectiva de un usuario con poca experiencia en Alfresco y sigue un guión que va desde la instalación y configuración básica de Alfresco hasta la personalización del cliente web y workflows.&lt;br /&gt;&lt;br /&gt;Es especialmente interesante toda la parte de instalación y configuración del producto ya que aporta un buen conjunto de buenas prácticas para la definición de la gestión documental con Alfresco.&lt;br /&gt;&lt;br /&gt;También dedica bastante atención a la implementación de la seguridad, la gestión documental y la búsqueda, así como a las diferentes opciones disponibles en el cliente web para manejar estos elementos.&lt;br /&gt;&lt;br /&gt;La parte de personalización del modelo documental y del cliente web es introductoria y da una visión de lo más básico que se puede hacer pero para el nivel del libro ya está bien.&lt;br /&gt;&lt;br /&gt;Como curiosidad, incluye un capítulo dedicado a la gestión de imágenes y a la integración con fuentes OCR y otros escaners que da consejos muy prácticos sobre este tema, incluyendo ejemplos con fabricantes concretos como Kofax o eCopy.&lt;br /&gt;&lt;br /&gt;En resumen, este es un buen libro para empezar a administrar y configurar Alfresco y tener una visión general de lo que se puede llegar a hacer a nivel de personalización e integración de la herramienta.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_AskmZuxH5XI/SViqoKOIi3I/AAAAAAAAAE4/ZGV_Pj_zrZQ/s1600-h/libro_afresco2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 246px; height: 320px;" src="http://3.bp.blogspot.com/_AskmZuxH5XI/SViqoKOIi3I/AAAAAAAAAE4/ZGV_Pj_zrZQ/s320/libro_afresco2.jpg" alt="" id="BLOGGER_PHOTO_ID_5285161769634401138" border="0" /&gt;&lt;/a&gt; El otro libro es &lt;span style="font-weight: bold;"&gt;'&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Alfresco Developer Guide'&lt;/span&gt;, de &lt;span style="font-weight: bold;"&gt;Jeff P&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;otts&lt;/span&gt;. Éste libro profundiza más en los temas de personalización y extensión de Alfresco además de dedicar capítulos enteros a los Web Scripts, los Workflows avanzados y al WCM de Alfresco.&lt;br /&gt;&lt;br /&gt;Aunque este libro sea más complejo y entre en más detalle, su estilo es claro y fácil de seguir y los ejemplos propuestos son muy completos y útiles.&lt;br /&gt;&lt;br /&gt;Incluye capítulos para la extensión del modelo documental, la personalización del cliente web y el manejo automático de contenidos. Además proporciona dos completas referencias para la configuración y la API de Alfresco.&lt;br /&gt;&lt;br /&gt;En definitiva este libro es una guía bastante completa para aquellos que quieran profundizar en la extensión de Alfresco y las posibilidades que ofrece esta herramienta.&lt;br /&gt;&lt;br /&gt;Estos dos libros vienen a demostrar el interés que existe por Alfresco y las enormes posibilidades que ofrece este completo ECM.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-5072152205082029239?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/5072152205082029239/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=5072152205082029239' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/5072152205082029239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/5072152205082029239'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/12/libros-sobre-alfresco.html' title='Libros sobre Alfresco'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_AskmZuxH5XI/SVisJPv9CuI/AAAAAAAAAFA/tQhQY2ouK7A/s72-c/libro_alfresco1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-7216037335351548436</id><published>2008-12-24T11:00:00.001+01:00</published><updated>2009-01-20T20:44:18.214+01:00</updated><title type='text'>¡Feliz Navidad!</title><content type='html'>&lt;div&gt;Como dice el villancico, esta noche es Nochebuena y mañana Navidad, así que me gustaría felicitar a todo el mundo por estas fiestas y desear un fliz año nuevo 2009.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;img id="BLOGGER_PHOTO_ID_5281918567969343042" style="margin: 0px auto 10px; display: block; width: 400px; height: 187px; text-align: center;" alt="" src="http://1.bp.blogspot.com/_AskmZuxH5XI/SU0k8-haRkI/AAAAAAAAAEU/yoQzsa0Hbf0/s400/navidad2009.jpg" border="0" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-7216037335351548436?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/7216037335351548436/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=7216037335351548436' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7216037335351548436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7216037335351548436'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/12/feliz-navidad.html' title='¡Feliz Navidad!'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_AskmZuxH5XI/SU0k8-haRkI/AAAAAAAAAEU/yoQzsa0Hbf0/s72-c/navidad2009.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-7159375394476749391</id><published>2008-12-15T17:07:00.000+01:00</published><updated>2008-12-16T00:29:18.297+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IN2'/><title type='text'>El arquitecto de software de IN2</title><content type='html'>&lt;div style="text-align: justify;"&gt;A principios de Diciembre, nos reunimos en la &lt;a href="http://www.arcsllacuna.com/"&gt;Llacuna &lt;/a&gt;los componentes del gabinete de arquitectura de IN2 para establecer las líneas generales de actuación para el próximo año.&lt;br /&gt;&lt;br /&gt;Esta vez, nos reunimos: &lt;a href="http://www.danielflores.org/"&gt;Daniel Flores&lt;/a&gt;, como director de tecnología de IN2, &lt;a href="http://bcngeeks.net/blogs/bcngeek/default.aspx"&gt;José Luís Latorre&lt;/a&gt; y &lt;a href="http://bcngeeks.net/blogs/the_metallian/default.aspx"&gt;Luis Felipe Fernández&lt;/a&gt; por parte del mundo Microsoft y .Net, y &lt;a href="http://asdelivered.blogspot.com/"&gt;José Luis Carrasco&lt;/a&gt;, &lt;a href="http://hazlosimple.blogspot.com/"&gt;Juan Carlos Fernández&lt;/a&gt; y un servidor por parte de Java y el mundo Open Source. También estuvo presente el departamento de capital humano con &lt;a href="http://gmonreal.blogspot.com/"&gt;Gabriel Monreal&lt;/a&gt; a la cabeza.&lt;br /&gt;&lt;br /&gt;Uno de los temas que se trataron durante la reunión fue la definición del rol de los arquitectos dentro de la organización. Fue una discusión interesante y obtuvimos algunas conclusiones que me gustaría comentar.&lt;br /&gt;&lt;br /&gt;Para empezar la definición de lo que es un arqutiecto de software es algo un tanto difuso, y se suele concretar en función de las necesidades de la organización donde el arquitecto desempeñará sus funciones. Así pues es importante conocer cuales son las atribuciones de un arquitecto.&lt;br /&gt;&lt;br /&gt;La principal responsabilidad de un arquitecto software es la de ser el referente tecnológico de los proyectos, definir las líneas de diseño y ser responsable de las arquitecturas aplicadas. Además de los aspectos técnicos, un arquitecto ha de representar el papel del enlace entre los equipos de desarrollo y los gestores del proyecto, encargándose de proporcionar las guías de calidad, buenas prácticas y documentación que garanticen el cumplimiento de la arquitectura del proyecto. A todo esto, la incorporación de nuevas estrategías  de las TI, como SOA, han incorporado un amplio rango de funciones a la figura del arquitecto.&lt;br /&gt;&lt;br /&gt;En  grandes empresas u organizaciones, con proyectos de amplio alcance, los arquitectos pueden permitirse la especialización en algunas de las areas mencionadas. Incluso para la empresa, esta especialización es beneficiosa ya que facilita la distribución de tareas entre los diferentes arquitectos. En estos casos, los arquitectos se pueden convertir en técnicos  de alto nivel o en elementos de gestión con una visión técnica, según sus responsabilidades.&lt;br /&gt;&lt;br /&gt;En una organización de menor envergadura, la figura del arquitecto ha de adquirir más funciones y por ello ha de cubrir más áreas dentro de los proyectos y de la misma empresa. Este arquitecto más 'todoterreno' debería tener las siguientes habilidades:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Una visión horizontal de la tecnología, que le permita conocer un amplio rango de tecnologías y la integración entre ellas.&lt;/li&gt;&lt;li&gt;Un dominio de la solución tecnológica, que le permita ser un referente técnico en los proyectos en los que participe.&lt;/li&gt;&lt;li&gt;Un conocimiento de la empresa, de los puntos fuertes adquiridos en proyectos anteriores y de las estrategias de negocio a seguir.&lt;/li&gt;&lt;li&gt;Una visión de mercado, que le permita adelantar tendencias y adquirir nuevas tecnologías útiles para la empresa.&lt;/li&gt;&lt;li&gt;Una buena capacidad de comunicación, para poder transmitir de forma clara sus puntos de vistas a desarrolladores, gestores y clientes.&lt;/li&gt;&lt;li&gt;Una capacidad de trabajar y hacer equipo para que sea referente y guía de sus compañeros.&lt;/li&gt;&lt;li&gt;Conocimientos para evaluar los costes y los riesgos de los proyectos en los que participa.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Es precisamente este tipo de arquitecto el que interesa a IN2, una persona que por su perfil y sus funciones está más implicado con la empresa y con sus compañeros, además de aportar la visión tecnológica inherente a su papel.&lt;br /&gt;&lt;br /&gt;Este podría ser el resumen de las conclusiones obtenidas durante la reunión sobre este tema. Fue un debate muy interesante donde profundizamos en  muchos de los aspectos mencionados y donde se plantearon ideas que ojalá podamos poner en práctica durante el próximo año.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-7159375394476749391?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/7159375394476749391/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=7159375394476749391' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7159375394476749391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7159375394476749391'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/12/el-arquitectos-de-software-de-in2.html' title='El arquitecto de software de IN2'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-3265148281211021468</id><published>2008-11-14T04:00:00.000+01:00</published><updated>2008-11-13T18:59:01.633+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Alfresco Enterprise 3.0 ya está aquí</title><content type='html'>A principios de este mes, &lt;a href="http://www.alfresco.com/"&gt;Alfresco &lt;/a&gt;lanzó la esperada nueva versión de su ECM, renovado y ampliado con nuevas funcionalidades y una nueva apariencia.&lt;br /&gt;&lt;br /&gt;Entre las nuevas funcionalidades destacan:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Alfresco Share&lt;/li&gt;&lt;li&gt;Soporte al protocolo de SharePoint de Microsoft&lt;/li&gt;&lt;li&gt;La primera implementación de CMIS&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Alfresco Share&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;La principal novedad de esta nueva versión es Alfresco Share, un nuevo web client orientado al trabajo colaborativo. Construido sobre la plataforma de desarrollo Surf y siguiendo las directrices de la web 2.0, este nuevo cliente incorpora a la gestión documental de Alfresco algunas utilidades muy interesantes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Creación de comunidades virtuales.&lt;/li&gt;&lt;li&gt;Feeds de actividades, tareas, eventos,...&lt;/li&gt;&lt;li&gt;Blogs, wikis, foros.&lt;/li&gt;&lt;li&gt;Búsqueda ampliadas.&lt;/li&gt;&lt;li&gt;Visualizador de documentos en Flash&lt;/li&gt;&lt;li&gt;Y mucho más...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SharePoint Protocol&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La nueva versión de Alfresco incorpora soporte al protocolo SharePoint que permite integrar los programas de Office con Alfresco de igual forma que lo hacen con SharePoint. Esta nueva funcionalidad lleva un paso más allá la integración de Alfresco con los productos de la popular suite de Microsoft.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CMIS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Alfresco 3.0 incluye la primera implementación comercial de este prometedor estándar del que ya &lt;a href="http://standardoperationprocedure.blogspot.com/2008/09/cmis-un-estndar-esperado.html"&gt;hablé hace unas semanas&lt;/a&gt;. Alfresco es uno de los fabricantes de ECM que más se ha implicado en el desarrollo de esta solución y proporciona en esta nueva versión una plataforma para desarrollar y probar aplicaciones.&lt;br /&gt;&lt;br /&gt;En definitiva, esta nueva versión es una buena noticia para toda la comunidad de Alfresco, y permite a Alfresco a mantenerse en la cresta de la ola de la tecnología de gestión documental de alto nivel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-3265148281211021468?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/3265148281211021468/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=3265148281211021468' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3265148281211021468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/3265148281211021468'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/11/alfresco-enterprise-30-ya-est-aqu.html' title='Alfresco Enterprise 3.0 ya está aquí'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-8515660728008942532</id><published>2008-10-16T10:00:00.000+02:00</published><updated>2008-10-17T08:43:22.274+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IN2'/><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Alfresco Roadshow en Barcelona</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;El pasado 16 de Octubre se celebró en Barcelona la Iberia Roadshow de Alfresco con la esponsorización de IN2.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dentro de la iniciativa de presentación de la nueva versión  Alfresco Enterprise 3.0, Alfresco ha organizado la Iberia Roadshow, una serie de eventos para el encuentro de la gente de Alfresco con sus partners y personas interesadas en el producto. Se han celebrado encuentros en Sevilla, Cádiz, Badajoz, Mallorca, Valencia y Barcelona. IN2 ha colaborado en estos tres últimos.&lt;br /&gt;&lt;br /&gt;Cada evento ha constado de una presentación a cargo de Bill Brooks y Andrés Lozano donde se ha presentado a Alfresco como compañia, su estrategia de negocio y su relación con clientes y partners. También presetaban la versión 3.0 de Alfresco.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_AskmZuxH5XI/SPd3ahzQSUI/AAAAAAAAADs/GxkL72fwMSY/s1600-h/IMG_2399.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/SPd3ahzQSUI/AAAAAAAAADs/GxkL72fwMSY/s400/IMG_2399.JPG" alt="" id="BLOGGER_PHOTO_ID_5257802387611994434" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Bill Brooks, de Alfresco, presentando la versión 3.0&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Entre las novedades destacadas que se han presentado tenemos:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Alfresco Share : Una nueva aplicación que trabaja con el gestor documental y que potencia las herramientas colaborativas de Alfresco, muy en la línea de las webs sociales.&lt;/li&gt;&lt;li&gt;Alfresco Surf : Un framework para el desarrollo de aplicaciones que trabajen sobre Alfresco. Ya se ha utilizado para la creación de Alfresco Share.&lt;/li&gt;&lt;li&gt;Protocolo SharePoint : Alfresco 3.0 será el primer ECM que incluya el protocola de colaboración con Microsoft SharePoint y que se utiliza para la integración con Microsoft Office.&lt;/li&gt;&lt;li&gt;CMIS : Este nuevo estándar tendrá su primera implementación en la nueva versión de Alfresco.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;El resto de presentaciones del evento han corrido a cargo de IN2 y se han dividido en dos bloques: las soluciones técnicas y los casos de éxito.&lt;br /&gt;&lt;br /&gt;La primera de las soluciones técnicas ha sido la integración de Alfresco con Google Appliance para potenciar la indexación y búsqueda de contenidos desde Alfresco.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_AskmZuxH5XI/SPd3arZynkI/AAAAAAAAAD0/E0rA2wTOZgg/s1600-h/IMG_2401.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_AskmZuxH5XI/SPd3arZynkI/AAAAAAAAAD0/E0rA2wTOZgg/s400/IMG_2401.JPG" alt="" id="BLOGGER_PHOTO_ID_5257802390189547074" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Carrasco, arquitecto en IN2, y la integración de Google&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La segunda presentación técnica desmostraba como se puede integrar la firma digital en los workflows y acciones de Alfresco. Esta presentación ha incluído una demo de la solución usando tanto firma delegada como firma en el cliente.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_AskmZuxH5XI/SPd3a5pfFdI/AAAAAAAAAD8/WVuYSzI5vc8/s1600-h/IMG_2403.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/SPd3a5pfFdI/AAAAAAAAAD8/WVuYSzI5vc8/s400/IMG_2403.JPG" alt="" id="BLOGGER_PHOTO_ID_5257802394013472210" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Juan Carlos, arquitecto JavaEE, demostrando como firmar desde Alfresco&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Los casos de éxito que hemos presentado son ejemplos de la amplia experiencia que tiene IN2 intalando e integrando Alfresco.  El primer caso ha sido la Caja Andorrana de la Seguridad Social, una plataforma de tramitación en la que se usó Alfresco como repositorio documental y motor de workflows.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_AskmZuxH5XI/SPd3bB5ypqI/AAAAAAAAAEE/WEpRRFZyG_Y/s1600-h/IMG_2404.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/SPd3bB5ypqI/AAAAAAAAAEE/WEpRRFZyG_Y/s400/IMG_2404.JPG" alt="" id="BLOGGER_PHOTO_ID_5257802396229346978" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Josefí Subirats, directora de proyectos en IN2, presentando la CASS&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;El segundo caso de éxito ha sido el gestor documental implantado en el Instituto Geográfico Nacional, donde se instaló un Alfresco en cluster pensado para dar servicio a un gran número de usuarios y gestionar documentos de gran tamaño (más de 10Gb cada uno).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_AskmZuxH5XI/SPd3bV5nahI/AAAAAAAAAEM/Vozm-aN8hCQ/s1600-h/IMG_2409.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_AskmZuxH5XI/SPd3bV5nahI/AAAAAAAAAEM/Vozm-aN8hCQ/s400/IMG_2409.JPG" alt="" id="BLOGGER_PHOTO_ID_5257802401597319698" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Yo presentando el caso del IGN&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La iniciativa parece haber tenido éxito y todos los eventos han agotado las plazas disponibles, lo que demuestra el gran interés que despiertan las soluciones de gestión documental y Alfresco en particular.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Gracias a Porfi por la fotos y a Mónica por la presentación de Mallorca&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-8515660728008942532?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/8515660728008942532/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=8515660728008942532' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/8515660728008942532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/8515660728008942532'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/10/alfresco-roadshow-en-barcelona.html' title='Alfresco Roadshow en Barcelona'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_AskmZuxH5XI/SPd3ahzQSUI/AAAAAAAAADs/GxkL72fwMSY/s72-c/IMG_2399.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-4908193395621358747</id><published>2008-09-29T10:02:00.000+02:00</published><updated>2008-09-30T09:15:43.774+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ECM'/><title type='text'>CMIS: Un estándar esperado</title><content type='html'>&lt;div style="text-align: justify;"&gt;En el mundo de la integración de aplicaciones siempre existe la necesidad de comunicar diferentes sistemas que hablan lenguajes diferentes. Hace algunos años estas integraciones solían ser difíciles, costosas y, a veces, imposibles. Con el paso de los años se han ido imponiendo soluciones más o menos estandarizadas que facilitan la comunicación entre las aplicaciones. Este es el caso de los Web Services, tecnología ampliamente extendida y muy en boga gracias a SOA. Pero no siempre es suficiente con que los sistemas se puedan comunicar sino que también es necesario que se puedan entender hablando el mismo "idioma". Bajo este prisma es como nace CMIS.&lt;br /&gt;&lt;br /&gt;Content Management Interoperability Services (CMIS)  es un conjunto de Web Services pensados para compartir información entre repositorios de contenidos y que buscan la interoperabilidad de los diferentes sisitemas ECM. Aun no se trata de un estándar, pero ya existe una propuesta conjunta elaborada por los principales fabricantes de ECM entre los que se encuentran IBM, Alfresco, EMC, Microsost, Open Text, SAP y Oracle.&lt;br /&gt;&lt;br /&gt;CMIS está compuesto de los siguientes elementos:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Un modelo de dominio, para definir los objetos y relaciones que pueden existir en el repositorio.&lt;/li&gt;&lt;li&gt;Un conjunto de APIs de comunicación, Web Services y REST, que permiten a las aplicaciones conectarse, navegar, leer y crear contenidos en los diferentes repositorios.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Un lenguaje de consultas, similar a SQL, capaz de definir criterios de búsqueda sobre propiedades, ubicación o "full-text" de los objetos.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Particularmente esta iniciativa me parece muy interesante. Siempre es una buena noticia disponer de nuevas herramientas que nos hagan más grato el trabajo, y ésta en concreto será muy bien recibida. El mundo de los ECM está experimentando un gran crecimiento en los últimos años y grandes empresas como Microsoft o IBM apuestan por ello. La llegada de este nuevo estándar supondrá un gran respaldo para toda la comunidad de desarrolladores e integradores que trabajamos con estas soluciones y ojalá que acabe gozando de tanta popularidad como el SQL, desarrollado hace ya dos décadas.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.alfresco.com/wiki/CMIS"&gt;Alfresco&lt;/a&gt;, en su última versión community labs, ya ofrece una implementación preliminar de CMIS.&lt;br /&gt;&lt;br /&gt;Para más información, podeis leer &lt;a href="http://xml.coverpages.org/ni2008-09-10-a.html"&gt;este&lt;/a&gt; completo artículo.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-4908193395621358747?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/4908193395621358747/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=4908193395621358747' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/4908193395621358747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/4908193395621358747'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/09/cmis-un-estndar-esperado.html' title='CMIS: Un estándar esperado'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-5575025034444796924</id><published>2008-09-07T20:00:00.000+02:00</published><updated>2008-09-08T13:29:14.554+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BEA Weblogic'/><category scheme='http://www.blogger.com/atom/ns#' term='Portal'/><title type='text'>Usar isAccessAllowed con BEA WLP10</title><content type='html'>&lt;div style="text-align: justify;"&gt;Recientemente nos hemos visto en la necesidad de añadir seguridad en un portlet que se iba a desplegar en un portal Weblogic Portal 10.  La modificación consistía en dar una funcionalidad concreta a un rol determinado dentro la aplicación.&lt;br /&gt;&lt;br /&gt;Después de valorar diferentes alternativas, decidimos aplicar el tag &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;isAccessAllowed&lt;/span&gt;&lt;/span&gt; de la taglib &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;xmlns:auth="http://www.bea.com/servers/p13n/tags/auth"&lt;/span&gt;&lt;/span&gt; . Este tag proporciona la comprobación primaria para autorizar el acceso a recursos de WLP. Si el resultado de la comprobación es negativo, el cuerpo del tag no se renderiza.&lt;br /&gt;&lt;br /&gt;Este tag espera los siguientes parámetros:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt; id. El nombre de la variable donde se almacena el resultado de la comprobación. Es de tipo booleano. Es obligatorio&lt;br /&gt;&lt;/li&gt;&lt;li&gt;resourceId. Representa la taxonomía definida para el recurso dentro de la aplicación. Es de tipo String y es obligatorio.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;capability. Este no es obligatorio y representa el permiso concreto (view, edit, remove,...) que se quiere autorizar.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;El problema de esta solución estaba en la construcción de la taxonomía del recurso que queríamos proteger (en este caso un portlet). No encontramos documentación de referencia de como construir esta cadena y tuvimos que investigar un poco hasta dar con la forma correcta.&lt;br /&gt;&lt;br /&gt;Para construir el identificador de un recurso se debe concatenar los siguientes elementos:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div  style="text-align: center;font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Tipo_objeto + Etiqueta_de_portal + Etiqueta_de_desktop + Etiqueta_de_recurso&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Donde:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 153);font-family:arial;" &gt;Tipo_objeto&lt;/span&gt; es una constante: &lt;span style="font-weight: bold;font-family:arial;" &gt;Portlet&lt;/span&gt; para los portlets y &lt;span style="font-weight: bold;font-family:arial;" &gt;Page &lt;/span&gt;para las páginas.&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 153);font-family:arial;" &gt;Etiqueta_de_portal&lt;/span&gt; corresponde al &lt;span style="font-weight: bold;font-family:arial;" &gt;Portal Path&lt;/span&gt; del portal.&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 153);font-family:arial;" &gt;Etiqueta_de_desktop&lt;/span&gt; es el &lt;span style="font-weight: bold;font-family:arial;" &gt;Desktop Path&lt;/span&gt; del desktop donde está instanciado el portlet.&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 153);font-family:arial;" &gt;Etiqueta_de_recurso&lt;/span&gt; es el atributo &lt;span style="font-weight: bold;font-family:arial;" &gt;Label &lt;/span&gt;de la instancia del portlet.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Todos estos valores se pueden obtener de forma bastante sencilla a partir de los elementos de presentación contextuales del portal. Por ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;            &lt;&gt;&lt;br /&gt;               AppContext ac = AppContext.getAppContext(request);&lt;br /&gt;&lt;br /&gt;               AbstractButtonPresentationContext absBut =(AbstractButtonPresentationContext) pageContext.getAttribute("abstractbuttonpc");&lt;br /&gt;&lt;br /&gt;               StringBuffer resourceId = new StringBuffer("Portlet");&lt;br /&gt;&lt;br /&gt;               resourceId.append(EntitlementConstants.RESOURCE_ID_DELIMITER)&lt;br /&gt;                   .append(ac.getPortalPath())&lt;br /&gt;                   .append(EntitlementConstants.RESOURCE_ID_DELIMITER)&lt;br /&gt;                   .append(ac.getDesktopPath())&lt;br /&gt;                   .append(EntitlementConstants.RESOURCE_ID_DELIMITER)&lt;br /&gt;                   .append(absBut.getWindowLabel());          &lt;br /&gt;           &lt; /jsp:scriptlet &gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Además de a portlets y páginas, esta seguridad se puede aplicar a otro tipo de recursos siguiendo una nomenclatura similar.&lt;br /&gt;&lt;br /&gt;Un posible inconveniente de esta solución estriba en el rendimiento, ya que el cálculo del resource id se hace a nivel de la capa de presentación. De todas formas, hay técnicas sencillas para evitar este problema.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-5575025034444796924?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/5575025034444796924/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=5575025034444796924' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/5575025034444796924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/5575025034444796924'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/09/usar-isaccessallowed-con-bea-wlp10.html' title='Usar isAccessAllowed con BEA WLP10'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-833459890465847380</id><published>2008-08-17T17:00:00.000+02:00</published><updated>2008-08-17T17:00:01.336+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BEA Weblogic'/><category scheme='http://www.blogger.com/atom/ns#' term='Portal'/><title type='text'>WSRP en BEA Weblogic Portal</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hace unos días, mi compañero en IN2, Juan Carlos, hablaba del &lt;a href="http://hazlosimple.blogspot.com/2008/05/howto-despliegue-de-portlet-en-shared.html"&gt;despliegue de portlets en shared library para Weblogic Portal&lt;/a&gt;. La idea es buena ya que permite independizar el desarrollo de portlets de la administración y mantenimiento del portal. Aun así, algunos aspectos de esta solución no acaban de convencerme como, por ejemplo, que haya que detener la aplicación de portal cada vez que se despliega una actualización de la shared libary.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Una alternativa para la distribución de portlets es usar portlets remotos que cumplan el estándar &lt;a href="http://www.oasis-open.org/committees/wsrp/"&gt;WSRP&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;El estándar WSRP se presenta como una herramienta muy útil para la distribución y consumo de portlets entre diferentes portales, independizando la presentación del portlet de la ubicación donde esté desplegado.&lt;br /&gt;&lt;br /&gt;El portal de Weblogic está preparado para trabajar con WSRP de forma que se puedan añadir nuevos portlets sin necesidad de detener la aplicación ya que se pueden añadir nuevos productores de portlets desde la consola de administración del portal. Los pasos a seguir son los siguientes:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Localizar el productor del portlet. &lt;/li&gt;&lt;li&gt;Rellenar la información del productor&lt;/li&gt;&lt;li&gt;Registrar el productor (opcional)&lt;/li&gt;&lt;li&gt;Seleccionar los portlets a incorporar en nuestro portal&lt;/li&gt;&lt;li&gt;Utilizar los portlets en las páginas de nuestro portal&lt;/li&gt;&lt;/ol&gt;Esta aproximación puede que no sea adecuada para todos los escenarios de portal pero es la única que independiza del todo la aplicación de portal de los portlets. Además es una estrategia alineada con SOA ya que en este caso el portlet es el servicio que se quiere compartir y reutilizar.&lt;br /&gt;&lt;br /&gt;El portal de Weblogic también permite usar portlets remotos desde el IDE Workshop, de forma que las definiciones de los productores de portlets se incluyen en el fichero .portal y se despliegan junto con el resto de la aplicación.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-833459890465847380?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/833459890465847380/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=833459890465847380' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/833459890465847380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/833459890465847380'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/08/wsrp-en-bea-weblogic-portal.html' title='WSRP en BEA Weblogic Portal'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-6131205622562676990</id><published>2008-08-15T17:00:00.000+02:00</published><updated>2008-08-15T17:00:00.928+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IN2'/><title type='text'>Porque sigo trabajando en IN2</title><content type='html'>&lt;div style="text-align: justify;"&gt;Este mes de Agosto ha hecho ocho años que colaboro con &lt;a href="http://www.in2.es/"&gt;IN2&lt;/a&gt;. En el mundo en el que nos movemos esto puede parecer mucho tiempo y hay gente que me lo comenta y me pregunta '&lt;span style="font-style: italic;"&gt;¿No tienes ganas de cambiar?&lt;/span&gt;' .&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Entré en IN2 como becario gracias a mi amigo Fede y mi primera asignación fué participar en un proyecto de migración de una aplicación de Oracle forms 5 a 6. Un trabajo digno de un becario, que es lo que yo era. Durante esos primeros meses tuve la oportunidad de participar en varios proyectos con diferentes tecnologías, algunas nuevas para mi y otras conocidas. Fue en este periodo donde entré en contacto con las tecnologías que han marcado mi carrera profesional : Java, Oracle y Web.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;También tuve la ocasión de conocer a gente que a la larga sería muy importante para mi profesionalmente. Algunos todavía siguen conmigo en IN2 y otros decidieron probar suerte en nuevos proyectos personales o profesionales.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Después de este periodo necesario de aprendizaje empezó mi periplo por clientes que dura ya casi siete años. Sacarme de la oficina y enviarme solo a trabajar con los clientes significó para mi una muestra de la confianza que habían depositado en mi y me motivó para hacer un buen trabajo.&lt;br /&gt;&lt;br /&gt;Durante esos primeros años en IN2 cada proyecto era un nuevo reto para mi, implicaba aprender alguna nueva tecnología o herramienta y la experiencia adquirida era muy valiosa tanto profesional como personalmente. En este periodo pasé de trabajar 6 horas a trabajar jornada completa y dejé de ser becario para convertirme en colaborador de IN2 de pleno derecho.&lt;br /&gt;&lt;br /&gt;Este periodo inicial en IN2 coincidió con el final del boom de las .com y fue una época mala para todas las empresas del sector. IN2 no fue la excepción. La empresa contó conmigo y me dió la oportunidad de seguir aprendiendo y trabajando en nuevos proyectos y clientes y fue en este momento cuando me di cuenta de que si quería y me esforzaba podía tener una carrera en IN2.&lt;br /&gt;&lt;br /&gt;Estuve mucho tiempo trabajando en clientes y un poco alejado de las oficinas de IN2. La empresa sufrió un cambio de dirección y empezó el camino de la recuperación que la ha llevado a ser como es hoy.  Durante estos años recibí ofertas para dejar IN2 pero valoré la confianza depositada en mi y lo que aun tenía por aprender y hacer en la empresa y decidí continuar en IN2. Puede que no fuera le mejor de las elecciones, pero sí sé que fue una buena elección.&lt;br /&gt;&lt;br /&gt;Respondiendo a la pregunta planteada al principio de este artículo, no, aun no tengo ganas de cambiar de trabajo. Mientras me siga gustando lo que hago, mientras tenga cosas por aprender, mientras la empresa confíe en mi y me lo demuestre y mientras los compañeros de IN2 sigan siendo tan fantásticos, yo seguiré queriendo trabajar en IN2.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-6131205622562676990?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/6131205622562676990/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=6131205622562676990' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6131205622562676990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6131205622562676990'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/08/porque-sigo-trabajando-en-in2.html' title='Porque sigo trabajando en IN2'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-1343097170817060012</id><published>2008-08-05T13:00:00.000+02:00</published><updated>2008-08-06T14:46:45.716+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Calidad'/><title type='text'>Evaluando la calidad del código</title><content type='html'>&lt;div style="text-align: justify;"&gt;Recientemente participé junto a mi compañero de IN2 &lt;a href="http://asdelivered.blogspot.com/"&gt;José Luís Carrasco&lt;/a&gt; en la auditoría de la aplicación NEO de Abertis Telecom. El objetivo de la auditoría era determinar la calidad del código desarrollado, centrándonos en evaluar el diseño y la mantenibilidad.&lt;br /&gt;&lt;br /&gt;La código a estudiar correspondía a una aplicación Java EE, construida sobre el bastidor OpenFrame. La aplicación está compuesta por diversos módulos web y servicios de integración con otros sistemas.&lt;br /&gt;&lt;br /&gt;Con esta premisa, enfocamos la revisión del código en dos fases sucesivas :&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;La adecuación a la arquitectura propuesta y el diseño de la apliación, comparado con los requerimientos iniciales del proyecto. De esta forma podríamos medir el cumplimiento de estándares Java EE y best practices del framework utilizado.&lt;/li&gt;&lt;li&gt;Identificación del código problemático y gestión del código fuente con el objetivo de evaluar su mantenibilidad, flexibilidad y reutilización.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Una vez fijados los objetivos, el siguiente paso era escoger las herramientas adecuadas para realizar la tarea. Como este proyecto se distanciaba un poco de las auditorías que habitualmente hacemos en IN2, más centradas en el rendimiento, decidimos incorporar dos herramientas de análisis nuevas : JBuilder de &lt;a href="http://www.codegear.com/"&gt;CodeGear&lt;/a&gt; y Swat4j de &lt;a href="http://www.codeswat.com/"&gt;CodeSwat&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;La validación de la arquitectura y el diseño la realizamos revisando el código manualmente ,con el apoyo de los diagramas de secuencias automáticos generados con JBuilder a partir del código fuente.&lt;br /&gt;&lt;br /&gt;En la revisión del código iba a ser una tarea bastante ardúa ya que teníamos que tratar casi 800 ficheros repartidos en más de 40 packages. Gracias a las nuevas herramientas de análisis este trabajo fue más sencillo.&lt;br /&gt;&lt;br /&gt;Usamos el analizador de JBuilder para obtener un buen conjunto de métricas. Estás métricas se basan en reglas y cubren más de 200 variables del código.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_AskmZuxH5XI/SJmbU_n9oaI/AAAAAAAAADU/A09UkIvKvBU/s1600-h/Kiviat_chart_metrics.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_AskmZuxH5XI/SJmbU_n9oaI/AAAAAAAAADU/A09UkIvKvBU/s400/Kiviat_chart_metrics.jpg" alt="" id="BLOGGER_PHOTO_ID_5231383227146281378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Swat4j lo usamos para estudiar la aplicación de best practices de Java EE y analizar el código agrupando los resultados por objetos, packages  y proyectos.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_AskmZuxH5XI/SJmbvPhdpVI/AAAAAAAAADk/SdkcrxOaGGc/s1600-h/neo_class_coupling_between_obj.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_AskmZuxH5XI/SJmbvPhdpVI/AAAAAAAAADk/SdkcrxOaGGc/s400/neo_class_coupling_between_obj.jpg" alt="" id="BLOGGER_PHOTO_ID_5231383678090585426" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_AskmZuxH5XI/SJmbvHM5q4I/AAAAAAAAADc/GPEgw9kaHCE/s1600-h/neo_class_antipatterns.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_AskmZuxH5XI/SJmbvHM5q4I/AAAAAAAAADc/GPEgw9kaHCE/s400/neo_class_antipatterns.jpg" alt="" id="BLOGGER_PHOTO_ID_5231383675856857986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Estas dos herramientas están pensadas para trabajar bien integradas con Eclipse, es más, JBuilder es un Eclipse extendido y Swat4j es un plugin de Eclipse.&lt;br /&gt;&lt;br /&gt;El resultado de la revisión fue bastante favorable, ya que el código tenía un nivel de calidad aceptable teniendo en cuenta el grado de madurez del proyecto. Apareció algún problema con la serialización de la sesión, algo bastante frecuente, y poca cosa más.&lt;br /&gt;&lt;br /&gt;En definitiva, este fué un proyecto interesante que nos permitió experimentar con nuevas herramientas que seguro nos serán muy útiles en próximos proyectos.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-1343097170817060012?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/1343097170817060012/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=1343097170817060012' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/1343097170817060012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/1343097170817060012'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/06/evaluando-la-calidad-del-cdigo.html' title='Evaluando la calidad del código'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_AskmZuxH5XI/SJmbU_n9oaI/AAAAAAAAADU/A09UkIvKvBU/s72-c/Kiviat_chart_metrics.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-4170041070743247369</id><published>2008-07-22T02:36:00.000+02:00</published><updated>2008-07-23T16:31:04.101+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Google gadgets de Alfresco</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.alfresco.com/"&gt;Alfresco&lt;/a&gt; incluyó en su versión 2.1 la tecnología de WebScripts, pequeños componentes que hacen accesible a Alfresco desde otras aplicaciones. Cada WebScript está asociado a un método HTTP y a una URL única por lo que pueden invocarse desde cualquier navegador. Además, los WebScripts se almacenan en el repositorio de Alfesco, por lo que se pueden actualizar y desplegar sin necesidad de reiniciar  el servidor de Alfresco.&lt;br /&gt;&lt;br /&gt;Una de las funcionalidades que ofrecen los WebScripts es que se pueden usar para crear &lt;a href="http://code.google.com/apis/gadgets/index.html"&gt;gadgets de google&lt;/a&gt; y así tener acceso a tu Alfresco desde tu página inicial de Google. Esta puede ser una opción interesante para aquellas empresas que usan Google Apps y quieran abrir su gestor documental a sus empleados sin tener que usar el cliente web de Alfresco.&lt;br /&gt;&lt;br /&gt;Los pasos para publicar estos gadgets son los siguientes:&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;Escribir el WebScript.&lt;/li&gt;&lt;li&gt;Importar el WebScript en el repositorio.&lt;/li&gt;&lt;li&gt;Registrar el WebScript para activarlo.&lt;/li&gt;&lt;li&gt;Crear la definición del gadget en iGoogle.&lt;/li&gt;&lt;li&gt;Incluir el gadget en la página de iGoogle.&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;Veamos en detalle cada uno de estos pasos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Escribir el WebScript.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un WebScript se compone de tres elementos: una descripción, un script de ejecución y una plantilla de respuesta.&lt;br /&gt;&lt;br /&gt;La descripción es un fichero XML que describe el método y mapea la URL a la que responde el WebScript.&lt;br /&gt;&lt;br /&gt;El script se codifica usando JavaScript y es el encargado de realizar las operaciones con el repositorio. También es el encargado de crear el modelo que se proporciona a la plantilla de respuesta para la renderización de la respuesta.&lt;br /&gt;&lt;br /&gt;Por último la plantilla es la encargada de crear la respuesta HTTP que puede soportar diferentes formatos. Estas plantillas son plantillas de FreeMarker (.ftl).&lt;br /&gt;&lt;br /&gt;La API para trabajar con WebScripts es lo bastante potente como para implementar un cliente completo de Alfresco usando sólo esta tecnología, por lo que las posibilidades que ofrecen son muy amplias.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Importar el WebScript en el repositorio.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un aspecto muy positivo de los WebScripts es que se despliegan directamente en el repositorio de Alfresco por lo que no hay que parar el servicio y se puede hacer desde cualquier ubicación.&lt;br /&gt;&lt;br /&gt;Por defecto, los WebScripts se despliegan en la carpeta:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 204, 204);font-size:85%;" &gt;&lt;span class="headbarLink"  style="font-family:arial;"&gt;           Empresa&lt;/span&gt;&lt;span style="font-family:arial;"&gt; &gt; &lt;/span&gt;&lt;span class="headbarLink"  style="font-family:arial;"&gt;Diccionario de datos&lt;/span&gt;&lt;span style="font-family:arial;"&gt; &gt; &lt;/span&gt;&lt;span class="headbarLink"  style="font-family:arial;"&gt;Web Scripts&lt;/span&gt;&lt;span style="font-family:arial;"&gt; &gt; &lt;/span&gt;&lt;span class="headbarLink"  style="font-family:arial;"&gt;org&lt;/span&gt;&lt;span style="font-family:arial;"&gt; &gt; &lt;/span&gt;&lt;span class="headbarLink"  style="font-family:arial;"&gt;alfresco&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El despliegue del WebScript consiste en copiar los ficheros (descripción, script y plantilla) en esta carpeta o en uno de sus subdirectorios.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Registrar el WebScript para activarlo.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Antes de poder acceder al WebScript hay que activarlo. Para ello tenemos que acceder a la página inicial de WebScripts. Normalmente se encuentra en esta URL :&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 204, 204);font-size:85%;" &gt;&lt;span style="font-family:arial;"&gt;            http://localhost:8080/alfresco/service/index&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Al pulsar el botón &lt;span style="font-style: italic;"&gt;Refresh list of Web Scripts&lt;/span&gt; se registrará el nuevo WebScript y ya será accesible mediante la URL que se haya indicado. Por ejemplo, si se ha registrado un WebScript con la URL &lt;span style="font-style: italic;"&gt;/mygadget/browse&lt;/span&gt;, se podrá acceder a él mediante la URL : &lt;span style="color: rgb(51, 204, 255);font-size:85%;" &gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;         http://localhost:8080/alfresco/service/mygadget/browse&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Crear la definición del gadget en iGoogle.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Hasta el momento, todos los pasos que se han aplicado servirían para usar el WebScript tanto desde iGoogle como desde un navegador web cualquiera o desde una aplicación Java.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para poder usar el WebScript desde iGoogle hay que registrarlo. El primer paso para registrar es crear la definición XML del gadget. Esta definición puede ser tan sencilla como:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);font-size:85%;" &gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt; &lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;    &lt;module&gt;&lt;/module&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;        &lt;moduleprefs title="hello world example"&gt; &lt;/moduleprefs&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;        &lt;content type="url" href="http://localhost:8080/alfresco/service/mygadget/browse"&gt;&lt;/content&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;    &lt;/span&gt; &lt;/span&gt;&lt;br /&gt;Se puede ampliar la definición del gadget si se añaden preferencias de usuario u opciones de personalización.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Incluir el gadget en la página de iGoogle.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Una vez se tiene la definición, hay que registrarla en el directorio de iGoogle. Una buena forma de probar el gadget y publicarlo es usar el editor de &lt;a href="http://code.google.com/apis/gadgets/docs/legacy/gs.html#GGE"&gt;Gadgets de Google.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez hayamos registrado el gadget ya lo tendremos disponible en nuestra página de iGoogle.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_AskmZuxH5XI/SISsEQmdooI/AAAAAAAAACE/LHSpvK-YQxg/s1600-h/igoogle.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_AskmZuxH5XI/SISsEQmdooI/AAAAAAAAACE/LHSpvK-YQxg/s400/igoogle.jpg" alt="" id="BLOGGER_PHOTO_ID_5225490656832365186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;En definitiva, la combinación de los WebScripts de Alfresco y los Gadgets de Google ofrece una nueva vía para compartir la información alamcenada en el gestor documental de Alfresco, confirmando que es una de las soluciones ECM más abiertas y fáciles de integrar que hay en el mercado.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-4170041070743247369?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/4170041070743247369/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=4170041070743247369' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/4170041070743247369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/4170041070743247369'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/07/google-gadgets-de-alfersco.html' title='Google gadgets de Alfresco'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_AskmZuxH5XI/SISsEQmdooI/AAAAAAAAACE/LHSpvK-YQxg/s72-c/igoogle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-837768846676138812</id><published>2008-07-13T20:21:00.000+02:00</published><updated>2008-07-22T20:27:34.955+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IN2'/><category scheme='http://www.blogger.com/atom/ns#' term='Alfresco'/><title type='text'>Curso de Alfresco</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Desde hace años, IN2 intenta que sus colaboradores estén al día de las últimas tecnologías y por ello sigue un plan de formación contínua que ofrece periódicamente cursos y sesiones formativas. Siguiendo esta línea la semana pasada se organizó un nuevo curso de &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.alfresco.com/"&gt;Alfresco&lt;/a&gt;&lt;span style="font-style: italic;"&gt; y yo me encargué de impartirlo.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La particularidad de este curso ha sido que no se ha impartido en una aula de formación convencional sino que se hizo en una preciosa &lt;a href="http://www.arcsllacuna.com/"&gt;casa rural&lt;/a&gt; situada en el tranquilo pueblo de &lt;a href="http://www.lallacunaonline.com/"&gt;La Llacuna&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_AskmZuxH5XI/SHpwhGUFsWI/AAAAAAAAABc/Z8oZ7jINHwE/s1600-h/IMG_1238.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_AskmZuxH5XI/SHpwhGUFsWI/AAAAAAAAABc/Z8oZ7jINHwE/s400/IMG_1238.JPG" alt="" id="BLOGGER_PHOTO_ID_5222610431822377314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;El objetivo del curso era doble, por un lado estaba el estrictamente formativo, basado en el curso ALF2110 de instalación y configuración de Alfresco, y por el otro estaba el social, para que los colaboradores de IN2 pudieran conocerse mejor y compartir sus experiencias.&lt;br /&gt;&lt;br /&gt;Durante las sesiones del curso tatamos los temas básicos de administración de sistemas Alfresco, incluyendo la instalación, seguridad, backup y configuración de clusters. El temario que seguimos&lt;br /&gt;se basa en el curso &lt;a href="http://www.alfresco.com/services/training/courses/alf2110/"&gt;ALF2110 - System Administration&lt;/a&gt; (In2 está certificada por Alfresco para impartir este curso) y nos sirvió de base para practicar diferentes aspectos de la administración del producto. Las sesiones de trabajo fueron muy prácticas y se fomentó la participación de todo el grupo. Otros temas que discutimos fueron la integración de Alfresco con otras aplicaciones usando Webscripts, portlets y web services.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_AskmZuxH5XI/SHpxn9brYDI/AAAAAAAAABk/bnL_44A3VWY/s1600-h/IMG_1270.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_AskmZuxH5XI/SHpxn9brYDI/AAAAAAAAABk/bnL_44A3VWY/s400/IMG_1270.JPG" alt="" id="BLOGGER_PHOTO_ID_5222611649208999986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Además de aprender, este curso también ha servido para que los colaboradores de IN2 intercambiáramos nuestras experiencias con Alfresco y así diéramos visibilidad a todo el trabajo que se ha hecho ya en la casa con pasadas integraciones y desarrollos. Este aspecto fue muy importante y enriquecedor para todos.&lt;br /&gt;&lt;br /&gt;Pero no todo durante estos días fue estudiar y hablar de trabajo, también hubo tiempo para pasarlo bien y divertirnos haciendo otras cosas.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_AskmZuxH5XI/SHpyD2Fu3tI/AAAAAAAAABs/JX-zMkV3qwM/s1600-h/IMG_1236.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_AskmZuxH5XI/SHpyD2Fu3tI/AAAAAAAAABs/JX-zMkV3qwM/s400/IMG_1236.JPG" alt="" id="BLOGGER_PHOTO_ID_5222612128274243282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Estoy particularmente contento con el grupo de gente que asistió al curso ya que han sido estupendos y ha sido un placer compartir con ellos estos días. Antes de este curso no había tenido la ocasión de conocer a algunos de ellos y me alegro de haberlo podido hacer ahora. Este fantástico grupo estaba formado por Carolina, Fredy, Alberto, Octavio, Walter, Javier, Andrés, Bea, Naiara y Andrés "Andresito" Tuells.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_AskmZuxH5XI/SHpyD6bKdMI/AAAAAAAAAB0/D7qViVR_cto/s1600-h/IMG_1263.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_AskmZuxH5XI/SHpyD6bKdMI/AAAAAAAAAB0/D7qViVR_cto/s400/IMG_1263.JPG" alt="" id="BLOGGER_PHOTO_ID_5222612129437873346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Además, para culminar el fin de semana,  se sumaron a la reunión nuestras parejas, Judith, Rosa, María y Áurea, y celebramos el final del curso como un gran grupo de amigos más que como compañeros de trabajo.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_AskmZuxH5XI/SHp049nqrII/AAAAAAAAAB8/y394k65tXLU/s1600-h/IMG_1325.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_AskmZuxH5XI/SHp049nqrII/AAAAAAAAAB8/y394k65tXLU/s400/IMG_1325.JPG" alt="" id="BLOGGER_PHOTO_ID_5222615239851945090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Esta experiencia ha sido muy positiva para mi y espero que también lo haya sido para ellos. Ojalá que se puedan repetir iniciativas de este tipo y que nos lo pasemos todos igual de bien.&lt;br /&gt;&lt;br /&gt;Y no puedo olvidarme de Gabriel y Zaira por organizarlo todo y escoger un sitio tan estupendo para el curso. Y Gabriel, la paella la dejamos para la próxima vez ;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-837768846676138812?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/837768846676138812/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=837768846676138812' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/837768846676138812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/837768846676138812'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/07/curso-de-alfresco.html' title='Curso de Alfresco'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_AskmZuxH5XI/SHpwhGUFsWI/AAAAAAAAABc/Z8oZ7jINHwE/s72-c/IMG_1238.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-8743532229367199884</id><published>2008-07-02T21:08:00.000+02:00</published><updated>2008-07-03T00:49:55.157+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Calidad'/><title type='text'>Estresando aplicaciones</title><content type='html'>&lt;div style="text-align: justify;"&gt;Una de las pruebas clásicas para determinar el rendimiento de una aplicación web es la prueba de estrés.&lt;br /&gt;&lt;br /&gt;Las pruebas de estrés sirven para obtener una medida del rendimiento de la aplicación en diferentes escenarios de carga haciendo especial énfasis en la robustez, disponibilidad y tolerancia a fallos. El objetivo de estas pruebas es comprobar que la aplicación es capaz de seguir funcionando en situaciones de servicio extremas con mucha concurrencia o poca capacidad computacional.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tipos de prueba&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Existen varios tipos de pruebas de estrés, dependiendo de como se modeliza la carga de prueba:&lt;br /&gt;&lt;br /&gt;- Pruebas con carga constante, que estresan la aplicación aplicando un volumen de usuarios concurrentes constante en el tiempo. Este tipo de prueba es el típico y sirve para comprobar como se comporta el sistema bajo una carga elevada (o no).&lt;br /&gt;&lt;br /&gt;- Pruebas con carga creciente, donde el número de usuarios concurrente se va incrementando con el tiempo. Estas pruebas son útiles para detectar los puntos de saturación de una aplicación.&lt;br /&gt;&lt;br /&gt;- Pruebas de carga variable, donde el número de usuarios concurrentes varía con el tiempo. SOn similares a las primeras pero permiten estudiar el comportamiento de una aplicación ante picos de carga.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;Métricas&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;A la hora de hacer las pruebas de estrés lo que nos interesa es recoger información suficiente para valorar el rendimiento y la robustez del aplicativo analizado.&lt;br /&gt;&lt;br /&gt;Hay muchas métricas posibles cuando se estudia la respuesta de una aplicación web, pero las más utilizadas son:&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Tiempo de respuesta.&lt;/li&gt;&lt;li&gt;Número de páginas servidas por segundo.&lt;/li&gt;&lt;li&gt;Número de sesiones por segundo.&lt;/li&gt;&lt;li&gt;% de errores.&lt;/li&gt;&lt;li&gt;Número de hits por segundo&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Otro tipo de métricas interesante a la hora de evaluar el rendimiento de una aplicación, corresponde al comportamiento del servidor de aplicaciones. Estás métricas incluyen:&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Número de sesiones creadas.&lt;/li&gt;&lt;li&gt;Número de transacciones&lt;/li&gt;&lt;li&gt;Comportamiento de los pools de conexiones&lt;/li&gt;&lt;li&gt;Respuesta de la CPU&lt;/li&gt;&lt;li&gt;Consumo de memoria&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Herramientas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Para hacer las pruebas y obtener los datos deseados es necesario escoger una buena herramienta.&lt;br /&gt;&lt;br /&gt;Las características principales que debería tener una buena herramenta de estrés serían : flexibilidad para definir escenarios de prueba, potencia y versatilidad para crear los scripts de prueba y amplia recolección de datos de respuesta.&lt;br /&gt;&lt;br /&gt;Entre las muchas herramientas disponibles destacaría las siguientes:&lt;br /&gt;&lt;br /&gt;- JMeter de Apache. Viene a ser la herramienta estándar para las pruebas de estrés de aplicaciones web. Esta hecho en Java por lo que corre sobre cualquier entorno. Es bastante potente en el aspecto de creación de scripts. Además es extensible y gratuito.&lt;br /&gt;&lt;br /&gt;- BadBoy también es muy popular y más fácil de usar que JMeter. La interficie gráfica es bastante amigable y las herramientas para crear scripts y escenarios son versátiles. Tiene versiones de pago y gratuita.&lt;br /&gt;&lt;br /&gt;- WAPT de SoftLogica. La apuesta de la casa. Es una herramienta de pago que proporciona unos resultados numéricos y gráficos muy potentes y fáciles de comprender. Además permite la ejecución el paralelo de diferentes escenarios.&lt;br /&gt;&lt;br /&gt;En definitiva, como un paso más para garantizar la calidad de una aplicación web, es importante realizar este tipo ed pruebas, con el doble objetivo de encontrar posibles problemas en la implementación de la aplicación y demostrar la robustez de la solución final.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-8743532229367199884?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/8743532229367199884/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=8743532229367199884' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/8743532229367199884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/8743532229367199884'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/04/estresando-aplicaciones.html' title='Estresando aplicaciones'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-7479700937637360714</id><published>2008-04-29T17:08:00.000+02:00</published><updated>2008-05-12T18:33:33.083+02:00</updated><title type='text'>BEA SOA Adoption &amp; Implementation</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hace un par de semanas un grupo de compañeros de IN2 y yo, llevamos a cabo una pequeña concentración en una &lt;a href="http://asdelivered.blogspot.com/2008/05/pyrinees-soa-and-bea-certification.html"&gt;casa rural&lt;/a&gt; para preparar el examen de certificación de &lt;a href="http://www.bea.com/framework.jsp?CNT=architect.jsp&amp;amp;FP=/content/services/education/certification/requirements#SOA_Enterprise_Arch"&gt;BEA SOA Adoption &amp;amp; Implementation&lt;/a&gt;. Durante la semana siguiente realizamos los dos exámenes necesarios para conseguir el título y todos conseguimos aprobar. Así que, Felicidades Jose, Juan Carlos y Carrasco!&lt;br /&gt;&lt;br /&gt;Esta ha sido muy interesante porque me ha permitido adquirir una visión más amplia sobre ese mundo tan lleno de posibilidades que es SOA, y estoy impaciente por poner en práctica algunas de las cosas que aprendí durante la preparación del examen.&lt;br /&gt;&lt;br /&gt;Además la concentración fue muy divertida y me permitió pasar unos días con una gente estupenda con la que me encanta trabajar.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-7479700937637360714?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/7479700937637360714/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=7479700937637360714' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7479700937637360714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/7479700937637360714'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/04/bea-soa-adoption-implementation.html' title='BEA SOA Adoption &amp; Implementation'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-2262409962319814053</id><published>2008-04-27T20:37:00.000+02:00</published><updated>2008-04-29T17:08:03.833+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BEA Weblogic'/><category scheme='http://www.blogger.com/atom/ns#' term='Portal'/><title type='text'>Migración de datos en Weblogic Portal</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;El traspaso de información entre entornos de desarrollo y de producción puede ser una tarea difícil dependiendo de las herramientas utilizadas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Recientemente me he visto en la necesidad de crear un nuevo dominio de producción de BEA Weblogic Portal que debiera aprovechar los contenidos introducidos en el Content Management de un dominio anterior. Había tres posibles formas de afrontar la tarea:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Creando un nuevo dominio desde cero y utilizar las herramientas de propagación de contenido proporcionadas por WLP.&lt;/li&gt;&lt;li&gt;Creando una nueva instancia en el cluster del dominio anterior, para copiar su configuración, y luego sacándola del cluster para que funcionara de forma independiente.&lt;/li&gt;&lt;li&gt;Creando un dominio nuevo desde cero y cambiar el acceso a datos para que utilizara el esquema de base de datos del dominio anterior.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;La primera opción quedó descartada por el tiempo que implica y los problemas técnicos que presenta la propagación de contenidos de WLP. La segunda opción parecía buena idea pero añade un elemento de inestabilidad que amenaza la consistencia de la aplicación de Portal.&lt;br /&gt;&lt;br /&gt;La última opción fue la que se llevo a cabo pero con una variante. El nuevo dominio se creó de cero, con el mismo nombre que el anterior, sobre un nuevo esquema de base de datos (la BD es una Oracle 10g). A continuación se hizo una exportación del esquema del dominio antiguo y una importación sobre el nuevo. Y funcionó !&lt;br /&gt;&lt;br /&gt;Gracias a esta técnica conseguimos replicar el entorno de producción, nos permitió apagar el entorno antiguo y seguir trabajando con el nuevo con toda la información disponible.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-2262409962319814053?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/2262409962319814053/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=2262409962319814053' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/2262409962319814053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/2262409962319814053'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/04/migracin-de-datos-en-weblogic-portal.html' title='Migración de datos en Weblogic Portal'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-6019812823095299618</id><published>2008-03-30T23:59:00.000+02:00</published><updated>2008-04-01T09:16:42.506+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Calidad'/><title type='text'>Calidad del código</title><content type='html'>&lt;div style="text-align: justify;"&gt;Una de las medidas de la calidad de una aplicación es la calidad de su código. Muchas veces éste es un aspecto que se olvida porque no parece tan importante como la funcionalidad o la eficiencia. Puede que sea así, pero también es cierto que un código de calidad ayudará a conseguir esos otros factores clave.&lt;/div&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;No es habitual aplicar reglas de calidad del código durante la fase de desarrollo de un proyecto, pero creo que sería una buena medida para garantizar un resultado final satisfactorio. Al igual que se asume desarrollar test unitarios para validar la funcionalidad de los módulos terminados, se podría asumir la ejecución de herramientas automáticas que revisaran la corrección del código. De esta forma se podrían detectar y corregir antes los posibles errores y evitar llegar a situaciones donde el volumen de código a revisar y corregir sea tan elevado que no valga la pena ni intentar arreglarlo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Herramientas de análisis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PMD&lt;br /&gt;&lt;br /&gt;Es una &lt;a href="http://pmd.sourceforge.net/"&gt;herramienta&lt;/a&gt; que analiza código Java y se basa en reglas para detectar posibles errores. Entre ellos encontramos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Incumplimiento de estándares de códificación&lt;/li&gt;&lt;li&gt;Bloques vacíos (try/cath/finally, switch, if,...)&lt;/li&gt;&lt;li&gt;Código no usado&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Duplicación o importación inecesaria de paquetes&lt;/li&gt;&lt;li&gt;Problemas con el tamaño del código&lt;/li&gt;&lt;li&gt;Optimizaciones&lt;/li&gt;&lt;li&gt;Complejidad ciclomática (&lt;a href="http://en.wikipedia.org/wiki/Cyclomatic_complexity"&gt;CCN&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;Además, gracias al componente CPD (Copy paste Detector), podemos detectar patrones de código repetido.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Hammurapi&lt;br /&gt;&lt;br /&gt;Otra &lt;a href="http://www.hammurapi.biz"&gt;herramienta &lt;/a&gt;muy útil para la revisión de código.  Usa una base de reglas extensible para analizar el código. Los resultados obtenidos por esta herramienta son más comprensibles que los de PMD porque agrupa la información por niveles de severidad.&lt;br /&gt;&lt;br /&gt;También obtiene métricas del código.&lt;br /&gt;&lt;br /&gt;Métricas&lt;br /&gt;&lt;br /&gt;Una forma rápida y fácil de hacer una primera valoración de la calidad de un código es obteniendo métricas. Buenos indicadores de la calidad son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Número de línes de código de un método&lt;/li&gt;&lt;li&gt;Número de métodos de una clase&lt;/li&gt;&lt;li&gt;Número de parámetros de un método&lt;/li&gt;&lt;li&gt;Profundidad del árbol de herencia&lt;/li&gt;&lt;li&gt;Acomplamiento intra y inter packages&lt;/li&gt;&lt;/ul&gt;Estas herramientas se pueden integrar fácilmente con los entornos de desarrollo (Eclipse) y las herramientas de control (Maven), por lo que aplicarlas durante el desarrollo tiene poco coste. Hacer que los equipos de desarrollo utilicen estos automátismos para controlar la calidad del código que producen, contribuye positivamente al éxito del proyecto.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-6019812823095299618?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/6019812823095299618/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=6019812823095299618' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6019812823095299618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/6019812823095299618'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/03/calidad-del-cdigo.html' title='Calidad del código'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2078473753998654039.post-4510030550566183358</id><published>2008-03-26T17:18:00.000+01:00</published><updated>2008-04-01T09:16:09.843+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Presentación'/><title type='text'>Presentación</title><content type='html'>&lt;div&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Standard_operating_procedure"&gt;S.O.P. &lt;/a&gt;(Standard Operating Procedure) : best practice approach to executing tasks related to hardware and software maintenance, as well as incident and change management&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;A lo largo de los años me he visto en la necesidad de recurrir muchas veces a Internet en busca de ayuda y soluciones para los problemas que me encontraba en mi trabajo. Ya es hora de que empiece a devolver el favor con mi granito de arena.&lt;br /&gt;&lt;br /&gt;Quiero usar este blog para hablar de aspectos de arquitectura de software, detalles técnicos y demás temas con los que me voy encontrando en mi día a día en el mundo del desarrollo de software y contribuir así a la gran comunidad de gente que ayuda a los demás con su experiencia.&lt;br /&gt;&lt;br /&gt;Empecemos.&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2078473753998654039-4510030550566183358?l=standardoperationprocedure.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standardoperationprocedure.blogspot.com/feeds/4510030550566183358/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2078473753998654039&amp;postID=4510030550566183358' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/4510030550566183358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2078473753998654039/posts/default/4510030550566183358'/><link rel='alternate' type='text/html' href='http://standardoperationprocedure.blogspot.com/2008/03/presentacin.html' title='Presentación'/><author><name>Alejandro Ugartondo</name><uri>http://www.blogger.com/profile/15428956295284041510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_AskmZuxH5XI/R_ExkWAWLjI/AAAAAAAAAAg/TCtVzJMaKHg/S220/IMG_1001mini.jpg'/></author><thr:total>0</thr:total></entry></feed>
