Bulk FileSystem Import en entorno Multitenant

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā08-08-2018 04:20 AM
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
- Labels:
-
Language Groups
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā08-08-2018 05:10 AM
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.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā08-08-2018 05:47 AM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā08-09-2018 06:01 AM
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.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ā08-09-2018 07:34 AM
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
