Archivo de la categoría: share

[TIP] Alfresco no funciona, no levanta o está roto

Si estás aquí es porque probablemente has ido a ver tu Alfresco y se encuentra apagado o fuera de cobertura. Bienvenido al mundo de Alfresco :)

En esta entrada os quiero explicar qué hacer y cómo ver qué ocurre “por detrás” para intentar solucionarlo. Antes de nada: Para tu Alfresco, no sirve de nada que siga ejecutándose comiendo recursos de la máquina.

¿Qué necesitamos? alfresco.log y catalina.out. Son logs donde se registran los detalles “técnicos” cuando se inicia Alfresco.

alfresco.log se encuentra en tu instalación en alfresco/alfresco.log

catalina.out se encuentra en alfresco/tomcat/logs/catalina.out

Prueba lo siguiente:

  1. Arranca alfresco y abre uno de esos logs, yo quizás te recomendaría que echaras un primer ojo a catalina.out y después a alfresco.log.
  2. Si puedes, lo ídeal es que el log se vaya refrescando a medida que vaya cargando.
    • En linux puedes lanzar el comando tail desde la terminal (tail -n500 -f /opt/alfresco/tomcat/logs/catalina.out)
    • En windows puedes utilizar esa utilidad  para obtener el mismo resultado que en linux
  3. Una vez tengas el log y empiecen las lineas a “correr”, fijate en la primera que contenta al inicio la palabra ERROR
  4. Una vez veas que tienes el / los errores, puedes parar tu Alfresco.
  5. Abre con un editor de texto el log (catalina.out o alfresco.log) Si tienes varios errores no te preocupes, busca siempre el primer ERROR que tengas, y mira a ver si tiene un Caused by algo más abajo.

Bien, ya tienes el error “técnico” pero no tienes ni la más remota idea de por dónde empezar. Aquí las claves:

  1. Busca el “Caused by:” completo de tu error  más la palabra “alfresco” en google.
    • Pincha aquí para ver un ejemplo.
  2. Prueba a poner el error completo en un nuevo hilo en la comunidad de alfresco.
  3. Chatea con expertos (normalmente en inglés aunque a veces hay gente en español que echan una mano).

Como veis no es muy complicado saber qué ocurre exactamente detrás de “alfresco no funciona”. Al menos ahora podréis encontrar vosotros mismos la solución o al menos sabéis dónde se encuentra los detalles técnicos del mismo.

Espero que os sirva como orientación.

¡Un saludo!

[ERROR]: The amp will overwrite an existing file in the war

Buenas tardes.

Os dejo aquí este tip por si el día de mañana os ocurre para que no os volváis loc@s :-P

Un poco de historia…

Intentando instalar mis amps (carpetas amps/ y amps_share/) con el script apply_amps.sh en uno de mis módulos me daba el siguiente error y no lo instalaba:

06280001 An error was encountered during deployment of the AMP into the WAR: 06280000 ERROR: The amp will overwrite an existing file in the war ‘/themes/sampleTheme/images/alfresco-imagelib.png’. Execution halted. By specifying -force , you can force installation of AMP regardless of the current war state.

El problema es que, si utilizamos el -force como se indica en ese parrafo obligamos a alfresco a sobre escribir archivos que ya tuviera desplegados previamente. Pero más allá de eso: ¿Por qué Alfresco tiene una versión previa de mi archivo si estoy desplegando una nueva?

Si miramos un poco más y usamos el ./apply_amps.sh -force , tenemos lo siguiente:

– WARNING: The file ‘/themes/sampleTheme/images/alfresco-imagelib.png’ is being overwritten by this module. The original has been backed-up to ‘/WEB-INF/classes/alfresco/module/backup/f2d9c362-73b2-11e7-9166-857b2fac416e.bin’

Y nuestro problema vendrá cuando corrijamos esa ruta e intentemos desplegar esa misma imagen en una ruta distinta, veremos como Alfresco carga la que tiene en backup.

Solución.

  • Pongamos que nuestro Alfresco es el 5.2.
  • Cogemos el war limpio de la misma versión. ¿Qué significa limpio? Pues nos descargamos los fuentes de Alfresco, y tomamos el war de la misma versión que nosotros usamos. Vamos, que no haya sido utilizado nunca.
  • Tenemos que renombrar el war que queramos sustituir de nuestra instalación: Por ejemplo de alfresco.war a alfresco.war.previous o lo que queráis pero .lo-que-quieras para que no sea tenido en cuenta cuando cargue tomcat.
  • Copiamos el war en nuestro_alfresco/tomcat/webapps/
  • Ejecutamos ./apply_amps.sh (o bat si es para plataforma windows).
  • Veremos como habrá desaparecido tanto el error como los warnings.
  • Serás más feliz :-)

Espero que os sirva.

¡Un saludo!

[Tip] Alfresco: Cómo saber dónde autentica un usuario

¡Muy buenas!

Hace poco, en un cliente que tiene una instalación de Alfresco con autenticación habilitada para NTLM (nativo de Alfresco) y en ldap, tuve que chequear un problema de duplicidad de usuarios y necesité comprobar dónde se autenticaban los usuarios de Alfresco: Si tiraban de autenticación interna o lo hacían externamente.
Por si os ocurre alguna vez, me gustaría explicar cómo podéis comprobarlo y, además, así no se me olvida para el día de mañana ;-)

Sigue leyendo

[Share] Ocultar la opción “crear sitio” en 4.1.x Enterprise

Buenas a todos.

Hace algún tiempo hice esta entrada basada en la 3.4.0 Enterprise y recientemente he tenido que adaptarla para la versión 4.1.x y me gustaría compartirla con vosotros. Esta entrada sirve para la version 4.1.x, no lo he probado en 4.2. ( de hecho sabiendo los cambios que existen con respecto a Aikau, apostaría que no funciona).

Los archivos que tenemos que tocar son 3:

  1. El dashlet de “Mis sitios”
  2. En la barra de arriba, dentro del menú desplegable
  3. El Dashlet de bienvenida

Como nos gusta seguir con las buenas prácticas, tendremos que copiar estos tres archivos (dentro de webapps/share/):

1.- {share-path-webapp}/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/dashlets/my-sites.get.html.ftl
2.- {share-path-webapp}/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/modules/header/sites.get.html.ftl
3.- {share-path-webapp}/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/dashlets/dynamic-welcome.get.html.

Y pegarlos en tomcat/shared/classes/alfresco/web-extension/

1.- {share-path-shared}/web-extension/site-webscripts/org/alfresco/components/dashlets/my-sites.get.html.ftl
2.- {share-path-shared}/web-extension/site-webscripts/org/alfresco/modules/header/sites.get.html.ftl
3.- {share-path-shared}/web-extension/site-webscripts/org/alfresco/components/dashlets/dynamic-welcome.get.html.ftl

Si en web-extension no tenéis creada la estructura de carpeta, deberéis hacerlo ya que necesitamos replicar la misma estructura que se encuentra en el Share internamente. Una vez los tengamos en web-extension, vamos a proceder a modificarlos:

1.- Dashlet de “mis sitios” – my-sites.get.html.ftl

Vamos directamente a la linea 43 y en este framento de código:

                 <span class="align-right yui-button-align">
                    <span class="first-child">
                       <a href="#" id="${id}-createSite-button" class="theme-color-1">
                          <img src="${url.context}/res/components/images/site-16.png" style="vertical-align: text-bottom" />
                          ${msg("link.createSite")}</a>
                    </span>
                 </span>

Lo encapsularemos con un if que chequeará la seguridad. Nos debe quedar así:

 

         <#if user.isAdmin>
                 <span class="align-right yui-button-align">
                    <span class="first-child">
                       <a href="#" id="${id}-createSite-button" class="theme-color-1">
                          <img src="${url.context}/res/components/images/site-16.png" style="vertical-align: text-bottom" />
                          ${msg("link.createSite")}</a>
                    </span>
                 </span>
         </#if>

Con esto, cuando Share vaya a cargar el componente visual, chequeará si el usuario que tiene hecho login tiene permisos de administrador.

2.- Link menú desplegable – sites.get.html.ftl

Debemos ir a la línea 25, ahí encontraremos este fragmento donde se pinta el link:

              <ul class="create-site-menuitem">
                 <li>
                    <a href="#" onclick="Alfresco.util.ComponentManager.get('${id_js}').showCreateSite(); return false;">${msg("label.create-site")}</a>
                 </li>
              </ul>

Hacemos lo mismo en el caso anterior y lo encapsularemos en una comprobación para que chequee los permisos del usuario que quiera visualizarlo:

      <#if user.isAdmin>
              <ul class="create-site-menuitem">
                 <li>
                    <a href="#" onclick="Alfresco.util.ComponentManager.get('${id_js}').showCreateSite(); return false;">${msg("label.create-site")}</a>
                 </li>
              </ul>
          </#if>

3.- Dashlet de bienvenida – dynamic-welcome.get.html.ftl

Este caso es algo especial porque si queremos que no pinte el link dentro del dashlet, deberemos tocar el javascript para manipular el número de columnas y que se “salte” la del sitio y, además, el freemarket (ftl) para retocar los estilos y que no se descuadre. En mi caso, sencillamente mostraré este dashlet solo a los usuarios administradores, y lo ocultaré para aquellos que no lo sean.
En este caso es sencillo: Tendremos que poner la condición arriba del todo y encapsular el dashlet completo:

Original:

 <#if showDashlet>
   <#assign el=args.htmlid?html>
   <script type="text/javascript">//<![CDATA[
   new Alfresco.dashlet.DynamicWelcome("${el}", "${dashboardUrl}", "${dashboardType}", "${siteNodeRef!""}").setMessages(${messages});
   //]]></script>
   <div class="dashlet dynamic-welcome">
      <a id="${el}-close-button" class="welcome-close-button" href="#">
         <img src="${url.context}/res/components/images/delete-16.png" />
         <span>${msg("welcome.close")}</span>
      </a>
    ...
    ...
              <div class="welcome-height-adjuster">&nbsp;</div>
         </div>
      </div>
    </div>
 </#if>

Modificado:

<#if user.isAdmin>
 <#if showDashlet>
   <#assign el=args.htmlid?html>
   <script type="text/javascript">//<![CDATA[
   new Alfresco.dashlet.DynamicWelcome("${el}", "${dashboardUrl}", "${dashboardType}", "${siteNodeRef!""}").setMessages(${messages});
   //]]></script>
   <div class="dashlet dynamic-welcome">
      <a id="${el}-close-button" class="welcome-close-button" href="#">
         <img src="${url.context}/res/components/images/delete-16.png" />
         <span>${msg("welcome.close")}</span>
      </a>
      ...
      ...
           <div class="welcome-height-adjuster">&nbsp;</div>
         </div>
      </div>
    </div>
 </#if>
</#if>

Y listo, con estas modificaciones Share cuando pinte el link, chequeará primero si el usuario que intenta visualizarlo tiene permisos de administrador o no.

Espero que sirva de ayuda,

¡Un saludo!