Hola,
Me he encontrado con un problema al utilizar la herramienta Bulk FileSystem Import, en un sistema Alfresco 5.0.2 CE Multitenant, que describo a continuación, a ver si por favor alguien dispone de información que pueda orientarme.
.- Alfresco 5.2.0 CE sobre el que he creado un "tenant" (zzz.com)
.- Me logueo en este tenant, con el usuario administrador: "admin@zzz.com"
.- Creo un sitio y una carpeta "importacion" dentro de la "DocumentLibrary"
.- Sobre la carpeta: "importacion" defino una regla (sencilla) que mueve todos los ficheros que entran en esta, a otra previamente creada (movidos)
Document Library
importacion
movidos
.- Accedo a la herramienta: "Bulk FileSystem Import" y procedo a cargar una serie de ficheros (http://localhost:8383/alfresco/service/bulkfsimport) indicando los datos necesarios
.- El proceso de importación comienza, y la regla se aplica sobre el primer documento/carpeta, pero con el segundo es cuando falla, devolviendo el siguiente error:
org.alfresco.error.AlfrescoRuntimeException: 070827656 org.alfresco.service.cmr.repository.InvalidNodeRefException: Failed invocation: ReflectiveMethodInvocation: public abstract boolean org.alfresco.service.cmr.repository.NodeService.hasAspect(org.alfresco.service.cmr.repository.NodeRef,org.alfresco.service.namespace.QName) throws org.alfresco.service.cmr.repository.InvalidNodeRefException,org.alfresco.service.cmr.dictionary.InvalidAspectException; target is of class [com.sun.proxy.$Proxy22]
at org.alfresco.repo.tenant.MultiTNodeServiceInterceptor.invoke(MultiTNodeServiceInterceptor.java:151)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy22.hasAspect(Unknown Source)
at sun.reflect.GeneratedMethodAccessor143.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.alfresco.repo.service.StoreRedirectorProxyFactory$RedirectorInvocationHandler.invoke(StoreRedirectorProxyFactory.java:231)
at com.sun.proxy.$Proxy44.hasAspect(Unknown Source)
at org.alfresco.repo.node.MLPropertyInterceptor.getPivotNodeRef(MLPropertyInterceptor.java:329)
at org.alfresco.repo.node.MLPropertyInterceptor.invoke(MLPropertyInterceptor.java:179)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.alfresco.repo.node.NodeRefPropertyMethodInterceptor.invoke(NodeRefPropertyMethodInterceptor.java:219)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy22.getProperties(Unknown Source)
at sun.reflect.GeneratedMethodAccessor253.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
at com.sun.proxy.$Proxy22.getProperties(Unknown Source)
at org.alfresco.repo.rule.RuleServiceImpl.getRule(RuleServiceImpl.java:685)
at org.alfresco.repo.rule.RuleServiceImpl$3.doWork(RuleServiceImpl.java:1196)
at org.alfresco.repo.rule.RuleServiceImpl$3.doWork(RuleServiceImpl.java:1)
at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:555)
at org.alfresco.repo.rule.RuleServiceImpl.executePendingRuleImpl(RuleServiceImpl.java:1192)
at org.alfresco.repo.rule.RuleServiceImpl.executePendingRule(RuleServiceImpl.java:1161)
at org.alfresco.repo.rule.RuleServiceImpl.executePendingRulesImpl(RuleServiceImpl.java:1127)
at org.alfresco.repo.rule.RuleServiceImpl.executePendingRules(RuleServiceImpl.java:1100)
at org.alfresco.repo.rule.RuleTransactionListener.beforeCommit(RuleTransactionListener.java:64)
at org.alfresco.util.transaction.TransactionSupportUtil$TransactionSynchronizationImpl.doBeforeCommit(TransactionSupportUtil.java:535)
at org.alfresco.util.transaction.TransactionSupportUtil$TransactionSynchronizationImpl.doBeforeCommit(TransactionSupportUtil.java:514)
at org.alfresco.util.transaction.TransactionSupportUtil$TransactionSynchronizationImpl.beforeCommit(TransactionSupportUtil.java:479)
at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:95)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:925)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:738)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:475)
at org.alfresco.util.transaction.SpringAwareUserTransaction.commit(SpringAwareUserTransaction.java:482)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:486)
at org.alfresco.repo.batch.BatchProcessor$TxnCallback.run(BatchProcessor.java:764)
at org.alfresco.repo.batch.BatchProcessor.process(BatchProcessor.java:406)
at org.alfresco.repo.bulkimport.impl.StripingBulkFilesystemImporter.bulkImportImpl(StripingBulkFilesystemImporter.java:65)
at org.alfresco.repo.bulkimport.impl.AbstractBulkFilesystemImporter$3.execute(AbstractBulkFilesystemImporter.java:391)
at org.alfresco.repo.bulkimport.impl.AbstractBulkFilesystemImporter$3.execute(AbstractBulkFilesystemImporter.java:1)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:464)
at org.alfresco.repo.bulkimport.impl.AbstractBulkFilesystemImporter.bulkImport(AbstractBulkFilesystemImporter.java:366)
at org.alfresco.repo.bulkimport.impl.AbstractBulkFilesystemImporter$2$1.doWork(AbstractBulkFilesystemImporter.java:347)
at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:555)
at org.alfresco.repo.bulkimport.impl.AbstractBulkFilesystemImporter$2.run(AbstractBulkFilesystemImporter.java:343)
at java.lang.Thread.run(Unknown Source)
Caused by: org.alfresco.service.cmr.repository.InvalidNodeRefException: Node does not exist: workspace://SpacesStore/366b4066-741f-4fde-ae95-b6e347b3f171 (status:null)
at org.alfresco.repo.node.db.DbNodeServiceImpl.getNodePairNotNull(DbNodeServiceImpl.java:198)
at org.alfresco.repo.node.db.DbNodeServiceImpl.hasAspect_aroundBody38(DbNodeServiceImpl.java:1043)
at org.alfresco.repo.node.db.DbNodeServiceImpl$AjcClosure39.run(DbNodeServiceImpl.java:1)
at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:221)
at org.alfresco.traitextender.AJExtender.localProceed(AJExtender.java:729)
at org.alfresco.traitextender.AJProxyTrait.invoke(AJProxyTrait.java:86)
at com.sun.proxy.$Proxy18.hasAspect(Unknown Source)
at org.alfresco.repo.virtual.bundle.VirtualNodeServiceExtension.hasAspect(VirtualNodeServiceExtension.java:130)
at sun.reflect.GeneratedMethodAccessor143.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.alfresco.traitextender.SingletonExtensionFactory$TraiSingletontHandler.invoke(SingletonExtensionFactory.java:74)
at com.sun.proxy.$Proxy208.hasAspect(Unknown Source)
at sun.reflect.GeneratedMethodAccessor153.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.alfresco.traitextender.AJExtender.extendAroundAdvice(AJExtender.java:655)
at org.alfresco.traitextender.RouteExtensions.ajc$inlineAccessMethod$org_alfresco_traitextender_RouteExtensions$org_alfresco_traitextender_AJExtender$extendAroundAdvice(RouteExtensions.java:1)
at org.alfresco.traitextender.RouteExtensions.intercept(RouteExtensions.java:85)
at org.alfresco.repo.node.db.DbNodeServiceImpl.hasAspect(DbNodeServiceImpl.java:1037)
at sun.reflect.GeneratedMethodAccessor143.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.alfresco.repo.lock.mem.LockableAspectInterceptor.invoke(LockableAspectInterceptor.java:126)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy22.hasAspect(Unknown Source)
at sun.reflect.GeneratedMethodAccessor143.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.alfresco.repo.tenant.MultiTNodeServiceInterceptor.invoke(MultiTNodeServiceInterceptor.java:147)
... 51 moreat org.alfresco.repo.bulkimport.impl.StripingBulkFilesystemImporter.bulkImportImpl(StripingBulkFilesystemImporter.java:68)
at org.alfresco.repo.bulkimport.impl.AbstractBulkFilesystemImporter$3.execute(AbstractBulkFilesystemImporter.java:391)
at org.alfresco.repo.bulkimport.impl.AbstractBulkFilesystemImporter$3.execute(AbstractBulkFilesystemImporter.java:1)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:464)
at org.alfresco.repo.bulkimport.impl.AbstractBulkFilesystemImporter.bulkImport(AbstractBulkFilesystemImporter.java:366)
at org.alfresco.repo.bulkimport.impl.AbstractBulkFilesystemImporter$2$1.doWork(AbstractBulkFilesystemImporter.java:347)
at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:555)
at org.alfresco.repo.bulkimport.impl.AbstractBulkFilesystemImporter$2.run(AbstractBulkFilesystemImporter.java:343)
at java.lang.Thread.run(Unknown Source)
.- Si deshabilito la ejecución de las reglas desde la herramienta Bulk FileSystem Import, el proceso de carga funciona con normalidad. Entiendo que el problema está con la ejecución de las reglas definidas.
El nodo que indica que no existe (workspace://SpacesStore/366b4066-741f-4fde-ae95-b6e347b3f171) corresponde a la regla aplicada sobre la carpeta:
Nombre: rule:rulesfa06addc-b70b-482c-90fd-d3149ec8baaf
Padre: /app:company_home/st:sites/cm:netic360-tenant/cm:documentLibrary/cm:importacion/rule:ruleFolder
Referencia: workspace://SpacesStore/366b4066-741f-4fde-ae95-b6e347b3f171
¿Sabéis si esta herramienta (Bulk FileSystem Import) tiene algún problema/error conocido sobre entornos Multitenant?. ¿Os habéis encontrado con este problema, y conocéis por favor alguna solución?
Muchas gracias
Mi respuesta es "no" y "no".
Multi-tenant es una funcionalidad que tiene un gran número de incidencias en diferentes ámbitos y que Alfresco tiende a ignorar. Así que, por defecto, no recomiendo utilizarla a mis clientes.
Muchas gracias por la rápida respuesta, Ángel.
En mi caso, desde otro departamento se ha montado una instancia de Alfresco, y sobre esta definen "tenants" para distintos clientes, por lo que estos pre-requisitos venían ya establecidos (:-).
Tomaré muy en cuenta tu respuesta.
Gracias de nuevo
Buenas:
Primero preguntarte, te refieres al Filesystem Bulk import de serie o al módulo de github de Peter Monks ? Te aconsejaría que uses el segundo. Es mucho mejor, incluso para la versión Enterprise.
Como comenta Angel, los entornos multitenant siempre han dado guerra (además creo que desaparecen en la versión 6), pero con el tema de las reglas es más o menos normal desactivarlas en un Bulk import. Al final son post-procesos en servidor, en una carga masiva. Y pueden reventar las transacciones, por ejemplo debido a que estás moviendo los documentos, antes de que termine el batch de documentos subidos (si tu batch size es 1 quizas te funcione, pero te irá muy lento). También las reglas aplicadas pueden empeorar el rendimiento del servidor... imagínate que cargas miles de ficheros doc, y que la regla los transforman a pdf, más el indexador....
En tu caso, desactivaría la regla para hacer el Bulk import. Y luego ejecutaría la regla desde el interfaz de reglas de Share para moverlos. Si tienes problemas para moverlos con la regla, usaría un script desde la JS Console para moverlos de 1000 en 1000 al otro path. Lo ejecutas unas cuantas veces y listo.
También pondría unos loggers en el Bulk Import y el script de javascript para ver que se está procesando todo convenientemente.
Hace tiempo escribí algo sobre esto, quizás te sirva:
- Procesos de importación masiva de datos en Alfresco con Filesystem Bulk Import - zylk
Saludos.
--C.
Hola César,
En primer lugar, muchas gracias por tu tiempo.
A tu pregunta, utilizo el Bulk FileSystem Import que viene de serie en Alfresco 5.2.0 CE (entorno Linux).
Respecto a lo que comentas del batch, había probado con valor 1 -por si fuera eso- pero el problema persistía, incluso con la aplicación de una regla muy sencilla.
Efectivamente, ahora -sobre el servidor de producción- estoy realizando la importación de ficheros desde Bulk FileSystem Import des-habilitando las reglas y posteriormente -desde la interfaz de share- ejecutando las reglas a mano; En este sentido, incluso había pensado en un "cron" para ejecutarlas a determinadas horas, por ejemplo: una vez al día.
De todas formas, trataba (sin mucha fortuna) de determinar el motivo por el que devolvía ese error, indicando que el nodo (regla definida) no existía. A la conclusión a la que llegué era que estaba relacionado con el multitenant, pero no quería meterme a revisar el código de la aplicación.
Por lo que dices, el multitenant es algo que da problemas, por lo que habrá que tenerlo en cuenta para el futuro. d
Le echaré un vistazo al módulo de Github y haré pruebas con lo que describes en el artículo que me indicas.
Muchísimas gracias
Discussions about Alfresco Content Services and Alfresco Process Services in Spanish
Related:
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.