Activar Auditoría en Alfresco 3.3

[Actualizado el 7/10/2010 a las 15:30]

La documentación sobre auditoría en Alfresco 3.3 es bastante pobre porque llegó en un momento de transición de la 3.2 al nuevo sistema con servicios y de todo en la 3.4.

Para activar la auditoría se añadirán las siguientes opciones en

alfresco-global.properties

# Auditing
# Audit configuration
# from: alfresco/repository.properties
audit.enabled=true
audit.tagging.enabled=true
audit.repository.enabled=true
audit.cmischangelog.enabled=true
# Setting this flag to true will cause alfresco/auditConfig.xml to be ignored
# when audit is enabled. When false both alfresco/auditConfig.xml and
# alfresco/audit/*.xml will be used.
audit.useNewConfig=false
# Setting this flag to true will force startup failure when invalid audit configurations are detected
audit.config.strict=false

y activar también la auditoría en el siguiente fichero:

auditConfig.xml

<Audit xmlns="http://www.alfresco.org/model/audit/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" enabled="true" auditInternal="false" mode="all">

 

Esto activa la auditoría antigua, pues la nueva no he conseguido que funcione.

La información de auditoría en Alfresco 3.3 se almacena en base de datos.

Para ver estos datos se pueden usar estas consultas de ejemplo:

(Queries para Informix, sí Informix, qué se le va a hacer)

Encontrar usuarios que nunca han entrado o hecho nada para ser auditado:

select *
 from alf_audit_fact fact
 right outer join alf_node_properties prop on fact.user_id = prop.string_value
 where prop.qname_id = 44
 and fact.user_id is null ;

Encontrar todo el contenido que ha sido “visto por un usuario en los últimos 7 días:

select *
 from alf_audit_fact fact
 join alf_audit_source source
 on fact.audit_source_id = source.id
 and (
 (source.service = 'ContentService' and source.method = 'getReader')
 or (source.service = 'FileFolderService' and source.method = 'getReader')
)
 where
 fact.user_id = 'admin'
 and fact.timestamp > DATE(DATE(CURRENT)-7)
 order by fact.id asc ;

Para el metodo crearNodo sería:

or (source.service = 'NodeService' and source.method = 'createNode')

Lista de metodos disponibles desde la tabla alf_audit_source

id application service methd
15 SystemMethodInterceptor NodeService createNode
 17 SystemMethodInterceptor RuleService disableRules
 28 SystemMethodInterceptor RuleService enableRules
 47 SystemMethodInterceptor ContentService getWriter
 64 SystemMethodInterceptor PermissionService setPermission
 66 SystemMethodInterceptor NodeService addAspect
 98 SystemMethodInterceptor PermissionService setInheritParentPermissions
 244 SystemMethodInterceptor NodeService setProperty
 2468 SystemMethodInterceptor NodeService addChild
 2698 SystemMethodInterceptor WorkflowService deployDefinition
 2998 SystemMethodInterceptor NodeService setProperties
 3220 SystemMethodInterceptor AuthenticationService authenticate
 3222 SystemMethodInterceptor AuthenticationService invalidateTicket
 3251 SystemMethodInterceptor AuthorityService createAuthority
 3282 SystemMethodInterceptor PersonService createPerson
 3286 SystemMethodInterceptor AuthenticationService createAuthentication
 3288 SystemMethodInterceptor AuthenticationService setAuthenticationEnabled
 3293 SystemMethodInterceptor AuthorityService addAuthority
 3370 SystemMethodInterceptor AuthenticationService validate
 24934 SystemMethodInterceptor AuthenticationService authenticateAsGuest
 25156 SystemMethodInterceptor FileFolderService getReader
 25174 SystemMethodInterceptor NodeService deleteNode
 25780 SystemMethodInterceptor TemplateService buildDefaultModel
 25782 SystemMethodInterceptor ContentService getReader
 25784 SystemMethodInterceptor TemplateService processTemplate

Más información de Auditoría para Alfresco 3.3
http://wiki.alfresco.com/wiki/Auditing_%28from_V3.2r%29

Espero que haya servido de ayuda.

Explicación de la arquitectura de Alfresco

Recientemente en un cliente hemos necesitado explicar cómo es la arquitectura de sistemas de Alfresco.

La estructura de espacios en Alfresco no es la estructura “física” con la que los documentos se graban en disco. No replica exactamente la distribución que hagamos por carpetas en el sistema de ficheros. (Ver presentación más abajo)

La estructura de carpetas es “lógica” por tanto, pero de cara al usuario es así como los documentos se distribuyen por el repositorio y así los mostrará en un posible acceso por unidad de red de windows, o webdav, o un arbol de directorios.

Otras vistas que podemos realizar a partir de otros elementos de clasificación como las categorías, nubes de tags, o búsquedas prediseñadas en función de tipos de documento o un valor de un metadato, son visibles para el usuario, pero a través de otros sistemas.
Estas vistas podrían ser la la propia interfaz web de Alfresco Share o vistas diseñadas por nosotros a partir de los servicios que ofrece.

En todo caso no habría nunca ningún perjuicio en el rendimiento de Alfresco por clasificar los documentos en carpetas o por nube de tags, todo es transparente para las búsquedas, que únicamente se basan en los índices que se generan automáticamente.

La única recomendación de rendimiento a este nivel que nos da Alfresco es respetar en la estructura de carpetas el número máximo de 1000 nodos por nivel. Es importante en accesos que muestren el árbol de directorios como acceder con Alfresco Share, Alfresco Explorer, CIFS, Webdav, FTP, etc.

Adjunto una pequeña presentación que espero aclare estos conceptos.

Error en Eclipse “Specified VM install not found” solucionado (solved)

Desde que añadí el java de Sun desde el repositorio de paquetes de Ubuntu, en vez de tenerlo en mi directorio /opt, creo voy a tener este problema de manera periódica, pero por lo menos ya se arreglarlo.

Hoy me encuentro con este error al ejecutar el build de mi tarea ant:

Specified VM install not found: type Standard VM, name java-6-sun-1.6.0.22

Y por más que miraba y remiraba en Preferences>Java>Installed JREs, allí no había más que una JDK, la java-6-sun-1.6.0.24.

Al final encontré la solución en este post

http://www.artima.com/forums/flat.jsp?forum=1&thread=85315

Try deleting these files:

…/.metadata/.plugins/org.eclipse.debug.core/.launches/*.launch

Roger

Con el eclipse cerrado añadiría yo.

Y funcionó…

Si es que al final era una tontería. 🙂

Actualización 11/03/2011

A través de los comentarios Julio nos deja este consejo:

“Creo que hay otra forma…

Al instalar la JDK vía repos de Ubuntu, si no me equivoco, las JVM se instalan en /usr/lib/jvm/java-x.y-z; cada vez que se actualiza, el “x.y.z” cambia. Para evitar los problemas que esto conlleva, se crea un enlace en “/usr/lib/jvm/java-x” a la última versión, por lo que si la JRE en Eclipse la configuras contra el enlace te ahorras este problema.”

Solución problema sonido en Skype con Ubuntu 8.10 Intrepid Ibex

Existe un problema con el sonido en Skype con Ubuntu 8.10 Intrepid Ibex.

(Solved sound or audio problem in Skype)

Siento no poder proveer la url de la que saqué la información, pero la solución es configurarlo como aparece en la imagen:

skype-opciones

Parece ser un problema de incompatibilidad entre disposivos de audio.

Cómo visualizar recursos de tipo espacio en workflows avanzados

En esta entrada ya hablamos de workflows para espacios (folder o space)

El problema es que una vez creado no se ven este tipo de recursos en los detalles del workflow.
Para poder verlos hay que modificar en el alfresco-web-client.jar, el fichero org/alfresco/web/bean/workflow/ManageTaskDialog.java.
Este fichero, en la línea 716, ya está puesto un comentario que nos indica que se filtran los elementos de tipo folder.

// NOTE: folders within workflow packages are ignored for now
if (this.dictionaryService.isSubClass(type, ContentModel.TYPE_CONTENT) ||
ApplicationModel.TYPE_FILELINK.equals(type))
{

Si descomentamos, todos los recursos ya se pueden ver, pero el enlace no funciona correctamene.
Para solucionarlo hay que reescribir la generación de los enlaces.

Los ficheros que he modificado es el org/alfresco/web/bean/workflow/ManageTaskDialog.java (que se compila en el su libreria alfresco-web-client.jar) y alfresco/jsp/workflow/manage-task-dialog.jsp, que se distribuye directamente en ese directorio de alfresco.

ManageTaskDialog.java
manage-task-dialog.jsp

Espero que sea de ayuda.

Alfresco. Duplicate Child Node Name Exception y Versionado (checkin/checkout)

Al mover o crear un nodo, nos podemos encontrar con un error de que ya existe un nodo con este nombre. Para resolver esta excepción tenemos varias opciones:

  • No hacer nada
  • No moverlo
  • Borrar el destino y luego moverlo
  • Moverlo con otro nombre
  • O, la opción más elegante, incrementar la versión del documento haciendo checkin, checkout

Basándome en este post lo probé y llegué a este código, que ya pongo en la respuesta, y que cuento a continuación:

El principio es este:

You should design your script to:
* Check out a working copy of your versioned node.
* Use the new write method to update the content of your working copy.
* Check in your working copy.

Y esta es la solución en código:
(Está en inglés)

This is a move function, that detects if a node already exists
(Variables are in spanish)


// Moves a node to a destination
function moveNode (nodo, destino) {
// Search if exists
var encontrado = destino.childByNamePath(nodo.name);
if (encontrado != null) {
if (! encontrado.hasAspect("cm:versionable")) {
encontrado.addAspect("cm:versionable");
}
var wc = encontrado.checkout();
wc.properties["cm:content"]=nodo.properties["cm:content"];
wc.save();
wc.checkin("Update element: "+nodo.name);
nodo.remove();
}
else
{
nodo.move(destino);
}
}

This only has a problem, increases two versions each time. I guess wc.save(), make his part in it, while we are updating that node.

I hope this helps

Desplegar un workflow a Alfresco desde Eclipse

Para no tener que reiniciar Alfresco cada vez que se cambia un workflow, existe la posibilidad de hacer un despliegue desde Eclipse

Para ello usando el plugin de jbpm de Eclipse ( se describe cómo instalarlo en  http://wiki.alfresco.com/wiki/WorkflowAdministration ), cuando se edita un workflow, en la pestaña de Deployment, se rellenan los datos necesarios para que se conecte con el servidor.

Server name: localhost
Server port: 8080
Server deployer:  /alfresco/jbpm/deployprocess

Y se prueba la conexión con el botón Test Connection

Con esto ya se distribuye el workflow sin tener que reiniciar alfresco

Fuente: http://wiki.alfresco.com/wiki/WorkflowAdministration#Deploying_via_JBoss_jBPM_Process_Designer

Worklfow Deployment