Code gérant les permissions et règles

cancel
Showing results for 
Search instead for 
Did you mean: 
dranakan
Active Member

Code gérant les permissions et règles

Hello,

J'ai créé du code java permettant de créer des répertoires, effacer des permissions et règles ainsi que d'ajouter des permissions et règles.
Cela fonctionne parfaitement pour créer une structure ou pour modifier un petit nombre de répertoire, mais cela se complique quand le code travaille sur une structure déjà existante + quand on lui demande de modifier plusieurs des dossiers dans la structure à la fois.

Structure créée ou mise à jour

REP0
      Rep1
            RepA
            RepB
            RepC
      Rep2
            RepA
            RepB
            RepC
       Rep3
            RepA
            RepB
            RepC
Détails des événements sur les répertoires ci-dessus
Sur Rep0 : On fait ruleService.removeAllRules, puis on ajoute une règle
Sur Rep1,2, 3 … :  On fait ruleService.removeAllRules, puis on ajoute une règle
Sur les RepA, B, C : On fait ruleService.removeAllRules, puis on ajoute une règle + permissionService.deletePermissions(typeNodeRef); et permissionService.setPermission(typeNodeRef,user, PermissionService.COORDINATOR, true);

Exécution (quand cela ne fonctionne plus)
* Si la structure n'est pas crée, je peux lancer la création complète (Rep1, Rep2, Rep3 (et sous reps)) : Fonctionne.
* Si la structure est créée, je peux lancer la création d'une Rep (par Rep1 (et sous reps)) : Fonctionne.
* Si la structure est créée, je lance la création de plusieurs Reps (Rep1, Rep2, Rep3 (et sous reps)) : ERREUR

Problèmes
J'ai différentes erreurs selon la façon dont j'éxécute cette création.

* Depuis un Webscript (Javascript qui appelle le code Java), l'erreur provient d'un jdbc4.MySQLIntegrityConstraintViolationException.
–>  Plante sur un permissionService.deletePermissions d'un des (d'un des RepA,B,C)

* Depuis une action (quand on ajoute un fichier dans un répertoire) : java.lang.IllegalArgumentException: id to load is required for loading
–> Plante sur un ruleService.removeAllRules (d'un des RepA,B,C)

(Dans mon utilisation en production ce ne sera que le webscript qui lancera l'action)

Logs erreur (lancement depuis le Webscript)

rg.hibernate.exception.ConstraintViolationException: could not delete: [org.alfresco.repo.domain.hibernate.DbAccessControlListImpl#953]
       at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
       at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
       at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2546)
       at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2702)
       at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:77)
       at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:322)
       at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:306)
       at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:187)
       at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
       at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
       at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
       at org.alfresco.repo.domain.hibernate.DirtySessionMethodInterceptor.flushSession(DirtySessionMethodInterceptor.java:342)
       at org.alfresco.repo.domain.hibernate.AclDaoComponentImpl.deleteAccessControlList(AclDaoComponentImpl.java:1233)
       at sun.reflect.GeneratedMethodAccessor625.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
       at org.alfresco.repo.domain.hibernate.DirtySessionMethodInterceptor.invoke(DirtySessionMethodInterceptor.java:419)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
       at $Proxy8.deleteAccessControlList(Unknown Source)
       at org.alfresco.repo.domain.hibernate.DMPermissionsDaoComponentImpl.deletePermissions(DMPermissionsDaoComponentImpl.java:132)
       at sun.reflect.GeneratedMethodAccessor580.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.alfresco.repo.service.StoreRedirectorProxyFactory$RedirectorInvocationHandler.invoke(StoreRedirectorProxyFactory.java:221)
       at $Proxy13.deletePermissions(Unknown Source)
       at org.alfresco.repo.security.permissions.impl.PermissionServiceImpl.deletePermissions(PermissionServiceImpl.java:855)
       at sun.reflect.GeneratedMethodAccessor510.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
       at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
       at $Proxy23.deletePermissions(Unknown Source)
       at sun.reflect.GeneratedMethodAccessor510.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
       at net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:80)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:147)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
       at $Proxy26.deletePermissions(Unknown Source)
       at ch.custom.manageoffice.workers.PrepareSpace.prepareUserInProcessing_RS_F_T(PrepareSpace.java:124)
       at ch.custom.manageoffice.actionswebscripts.WebscriptsHelper.start_prepareUserInProcessing_RS_F_T(WebscriptsHelper.java:104)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:155)
       at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:243)
       at org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:86)
       at org.mozilla.javascript.gen.c1._c0(file:D:/Alfresco/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/module/custom/configureRepository/configureRepository.get.js:51)
       at org.mozilla.javascript.gen.c1.call(file:D:/Alfresco/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/module/custom/configureRepository/configureRepository.get.js)
       at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393)
       at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2834)
       at org.mozilla.javascript.gen.c1.call(file:D:/Alfresco/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/module/custom/configureRepository/configureRepository.get.js)
       at org.mozilla.javascript.gen.c1.exec(file:D:/Alfresco/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/module/custom/configureRepository/configureRepository.get.js)
       at org.alfresco.repo.jscript.RhinoScriptProcessor.executeScriptImpl(RhinoScriptProcessor.java:457)
       at org.alfresco.repo.jscript.RhinoScriptProcessor.execute(RhinoScriptProcessor.java:174)
       at org.alfresco.repo.processor.ScriptServiceImpl.executeScript(ScriptServiceImpl.java:274)
       at org.alfresco.repo.web.scripts.RepositoryScriptProcessor.executeScript(RepositoryScriptProcessor.java:108)
       at org.alfresco.web.scripts.AbstractWebScript.executeScript(AbstractWebScript.java:819)
       at org.alfresco.web.scripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:90)
       at org.alfresco.repo.web.scripts.RepositoryContainer$2.execute(RepositoryContainer.java:372)
       at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:327)
       at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:422)
       at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:439)
       at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:303)
       at org.alfresco.web.scripts.AbstractRuntime.executeScript(AbstractRuntime.java:306)
       at org.alfresco.web.scripts.AbstractRuntime.executeScript(AbstractRuntime.java:183)
       at org.alfresco.web.scripts.servlet.WebScriptServlet.service(WebScriptServlet.java:122)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
       at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
       at java.lang.Thread.run(Thread.java:619)
caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`alfresco`.`alf_node`, CONSTRAINT `fk_alf_node_acl` FOREIGN KEY (`acl_id`) REFERENCES `alf_access_control_list` (`id`))
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
       at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
       at com.mysql.jdbc.Util.getInstance(Util.java:381)
       at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
       at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
       at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)
       at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447)
       at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951)
       at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)
       at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554)
       at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761)
       at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2046)
       at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1964)
       at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1949)
       at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
       at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
       at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2528)

Logs erreur (lancement depuis une action)

java.lang.IllegalArgumentException: id to load is required for loading
        at org.hibernate.event.LoadEvent.<init>(LoadEvent.java:51)
        at org.hibernate.event.LoadEvent.<init>(LoadEvent.java:33)
        at org.hibernate.impl.SessionImpl.get(SessionImpl.java:812)
        at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
        at org.springframework.orm.hibernate3.HibernateTemplate$1.doInHibernate(HibernateTemplate.java:470)
        at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
        at org.springframework.orm.hibernate3.HibernateTemplate.get(HibernateTemplate.java:464)
        at org.springframework.orm.hibernate3.HibernateTemplate.get(HibernateTemplate.java:458)
        at org.alfresco.repo.node.db.hibernate.HibernateNodeDaoServiceImpl.deleteNodeInternal(HibernateNodeDaoServiceImpl.java:1918)
        at org.alfresco.repo.node.db.hibernate.HibernateNodeDaoServiceImpl.deleteNode(HibernateNodeDaoServiceImpl.java:1774)
        at sun.reflect.GeneratedMethodAccessor456.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        at org.alfresco.repo.transaction.TransactionalDaoInterceptor.invoke(TransactionalDaoInterceptor.java:68)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.alfresco.repo.domain.hibernate.DirtySessionMethodInterceptor.invoke(DirtySessionMethodInterceptor.java:419)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.alfresco.repo.transaction.SingleEntryTransactionResourceInterceptor.invokeInternal(SingleEntryTransactionResourceInterceptor.java:169)
        at org.alfresco.repo.transaction.SingleEntryTransactionResourceInterceptor.invoke(SingleEntryTransactionResourceInterceptor.java:138)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at $Proxy9.deleteNode(Unknown Source)
        at org.alfresco.repo.node.db.DbNodeServiceImpl.deletePrimaryChildren(DbNodeServiceImpl.java:861)
        at org.alfresco.repo.node.db.DbNodeServiceImpl.deletePrimaryChildren(DbNodeServiceImpl.java:858)
        at org.alfresco.repo.node.db.DbNodeServiceImpl.deleteNode(DbNodeServiceImpl.java:792)
        at org.alfresco.repo.node.db.DbNodeServiceImpl.removeChild(DbNodeServiceImpl.java:940)
        at sun.reflect.GeneratedMethodAccessor477.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        at org.alfresco.repo.tenant.MultiTNodeServiceInterceptor.invoke(MultiTNodeServiceInterceptor.java:110)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at $Proxy11.removeChild(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor477.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.alfresco.repo.service.StoreRedirectorProxyFactory$RedirectorInvocationHandler.invoke(StoreRedirectorProxyFactory.java:221)
        at $Proxy12.removeChild(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor477.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        at org.alfresco.repo.node.MLPropertyInterceptor.invoke(MLPropertyInterceptor.java:306)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.alfresco.repo.node.MLPropertyInterceptor.invoke(MLPropertyInterceptor.java:306)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.alfresco.repo.node.NodeRefPropertyMethodInterceptor.invoke(NodeRefPropertyMethodInterceptor.java:274)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.alfresco.repo.node.NodeRefPropertyMethodInterceptor.invoke(NodeRefPropertyMethodInterceptor.java:274)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.alfresco.repo.node.NodeRefPropertyMethodInterceptor.invoke(NodeRefPropertyMethodInterceptor.java:274)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
       at $Proxy11.removeChild(Unknown Source)
       at sun.reflect.GeneratedMethodAccessor477.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
       at net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:80)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:147)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
       at $Proxy11.removeChild(Unknown Source)
       at org.alfresco.repo.rule.RuleServiceImpl.removeAllRules(RuleServiceImpl.java:756)
       at sun.reflect.GeneratedMethodAccessor521.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
       at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:40)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:147)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
       at $Proxy37.removeAllRules(Unknown Source)
       at ch.custom.manageoffice.workers.PrepareSpace.prepareUserInProcessing_RS_F_T(PrepareSpace.java:114)
       at ch.custom.manageoffice.actions.ActionPrototype.addNode(ActionPrototype.java:217)
       at ch.custom.manageoffice.actions.ActionPrototype.access$0(ActionPrototype.java:212)
       at ch.custom.manageoffice.actions.ActionPrototype$1.execute(ActionPrototype.java:185)
       at ch.custom.manageoffice.actions.ActionPrototype$1.execute(ActionPrototype.java:1)
       at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:327)
       at ch.custom.manageoffice.actions.ActionPrototype.executeImpl(ActionPrototype.java:180)
       at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(ActionExecuterAbstractBase.java:127)
       at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:711)
       at org.alfresco.repo.action.executer.CompositeActionExecuter.executeImpl(CompositeActionExecuter.java:72)
       at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(ActionExecuterAbstractBase.java:127)
       at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:711)
       at org.alfresco.repo.action.ActionServiceImpl.executeActionImpl(ActionServiceImpl.java:648)
       at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:510)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
       at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:40)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:147)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
       at $Proxy25.executeAction(Unknown Source)
       at org.alfresco.repo.rule.RuleServiceImpl.executeRule(RuleServiceImpl.java:928)
       at org.alfresco.repo.rule.RuleServiceImpl.executePendingRule(RuleServiceImpl.java:896)
       at org.alfresco.repo.rule.RuleServiceImpl.executePendingRulesImpl(RuleServiceImpl.java:867)
       at org.alfresco.repo.rule.RuleServiceImpl.executePendingRules(RuleServiceImpl.java:840)
       at org.alfresco.repo.rule.RuleTransactionListener.beforeCommit(RuleTransactionListener.java:63)
       at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.doBeforeCommit(AlfrescoTransactionSupport.java:744)
       at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.doBeforeCommit(AlfrescoTransactionSupport.java:724)
       at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.beforeCommit(AlfrescoTransactionSupport.java:680)
       at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:48)
       at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:835)
       at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:645)
       at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
       at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:314)
       at org.alfresco.util.transaction.SpringAwareUserTransaction.commit(SpringAwareUserTransaction.java:467)
       at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:349)
       at org.alfresco.web.bean.dialog.BaseDialogBean.finish(BaseDialogBean.java:130)
       at org.alfresco.web.bean.dialog.DialogManager.finish(DialogManager.java:534)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
       at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
       at javax.faces.component.UICommand.broadcast(UICommand.java:109)
       at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
       at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
       at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
       at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
       at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
       at javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:110)
       at sun.reflect.GeneratedMethodAccessor425.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:122)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
       at $Proxy196.doFilter(Unknown Source)
       at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:88)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.alfresco.repo.web.filter.beans.NullFilter.doFilter(NullFilter.java:74)
       at sun.reflect.GeneratedMethodAccessor425.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:122)
       at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
       at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
       at $Proxy196.doFilter(Unknown Source)
       at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:88)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
       at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
       at java.lang.Thread.run(Thread.java:619

Transactions
Pour le moment, seul le code dans l'action est gérer dans une transaction manuelle (transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionHelper…) mais j'ai la même erreur (java.lang.IllegalArgumentException) je décommente…

Questions
Avez-vous une piste à me donner ? Des conseils pour contourner le problèmes ?

(Alf32R2, Mysql 5.1.35 Community, ici pour mes tests sous Windows XP)

Merci bien
1 Reply
dranakan
Active Member

Re: Code gérant les permissions et règles

Si ça peut donner des idées sur la cause… voici des exemple de code :

Création des répertoires, applications règle et permissions:

/**
    * Perpare space for user in the directory Processing. This folder allow
    * file to be "Treatable" for the ERP. The permissions and rules are
    * re-setted if the space if yet created. Create a space user and apply
    * rules and permissions (reapply rules and permissions if yet created. Does
    * not delete directories) :
    * <ul>
    * <li>(noderef)</li>
    * <li>>>responsible</li>
    * <li>>>>>firm_1</li>
    * <li>>>>>>>>>invoiceCreditor …</li>
    * </ul>
    *
    * @param user
    *            Name of the user (login)
    * @param directory
    *            The directory when the space will be create (Processing)
    * @param firms
    *            List of firms
    * @return
    */
   public boolean prepareUserInProcessing_RS_F_T(String user,
         NodeRef directory, int[] firms) {
      try {
         if (user == null || user.length() == 0) {
            logger.error("Try to create the user space but the user name is empty/null");
            return false;
         }

         logger.debug("Prepare space for : "
               + user
               + " in : "
               + nodeManager.getNameAndPathOfNodeRef(directory)
               + " (create directories, delete and add rules, delete and add permissions only on type directories.");

         /* User */
         // Create space user
         logger.debug("Prepare space for user : " + user);
         NodeRef userNodeRef = nodeManager.createDirectoryIfNotExist(user,
               directory);
         // Clear and Set rules
         nodeManager.ruleService.removeAllRules(userNodeRef);
         DefineRules
               .addRule_DefineReponsible(nodeManager, userNodeRef, user);
         

         /* Trash */
         logger.debug("Prepare space for trash : " + PATH_TRASH);
         // Add trash
         NodeRef trashNodeRef = nodeManager.createDirectoryIfNotExist(
               PATH_TRASH, userNodeRef);
         // Clear and Set rules
         nodeManager.ruleService.removeAllRules(trashNodeRef);
         DefineRules.addRule_OrganizeFileInDirectory_Simple(nodeManager,
               trashNodeRef);
         
         // Set rule (for user)
         DefineRules.addRule_MoveToTrash(nodeManager, userNodeRef, trashNodeRef);

         /* Firm and types */
         for (int firm : firms) {
            logger.debug("Prepare space for firm : " + firm);
            // Create space firm
            NodeRef firmNodeRef = nodeManager.createDirectoryIfNotExist(
                  PATH_FIRM_BEGIN_DIRECTORY_NAME + firm, userNodeRef);
            // Clear and Set rules
            nodeManager.ruleService.removeAllRules(firmNodeRef);
            DefineRules
                  .addRule_DefineFirmNb(nodeManager, firmNodeRef, firm);

            /* Add types */
            for (QName typeQName : LIST_DOCS_USED_PRODUCTION_QNAME) {

               logger.debug("Prepare space for type : "
                     + typeQName.getLocalName());

               // Create space type
               NodeRef typeNodeRef = nodeManager
                     .createDirectoryIfNotExist(
                           typeQName.getLocalName(), firmNodeRef);
               // Clear and Set rules
               nodeManager.ruleService.removeAllRules(typeNodeRef);
               DefineRules.addRule_SpecializedType(nodeManager,
                     typeNodeRef, typeQName);
               // Rule (search BVR)
               if (typeQName.equals(QNAME_SGF_INVOICE_CREDITOR)) {
                  DefineRules.addRule_ExtractAndApplyMetadata(
                        nodeManager, typeNodeRef);
               }
               // Clear and Set permission
               nodeManager.permissionService
                     .deletePermissions(typeNodeRef);
               nodeManager.permissionService.setPermission(typeNodeRef,
                     user, PermissionService.COORDINATOR, true);
            }
         }
         logger.debug("End");
         return true;

      } catch (Exception e) {
         logger.error("", e);
         return false;
      }
   }
}


Création répertoire (class NodeManager (perso)):

   /**
    * Create a directory if not exist
    *
    * @param directory
    * @param parentNodeRef
    * @return (new) nodeRef
    */
   public NodeRef createDirectoryIfNotExist(String directory,
         NodeRef parentNodeRef) {

      NodeRef nodeOnDisk = nodeService.getChildByName(parentNodeRef,
            ContentModel.ASSOC_CONTAINS, directory);
      if (nodeOnDisk != null) {
         return nodeOnDisk;
      }
      FileInfo info = this.fileFolderService.create(parentNodeRef, directory,
            ContentModel.TYPE_FOLDER);
      return info.getNodeRef();
   }


Ajout d'une règle:

   /**
    * Move the document in the trash
    *
    * @param nodeManager
    *            .actionService
    * @param nodeManager
    *            .ruleService
    * @param nodeRef
    *            The directory where the action is enable
    * @param destination
    *            Where the noderef will move
    */
   public static void addRule_MoveToTrash(NodeManager nodeManager,
         NodeRef nodeRef, NodeRef destNodeRef) {
      try {
         Rule rule = new Rule();
         rule.setTitle(RULE_TITLE_MOVE_TO_TRASH);
         rule.setDescription(RULE_DESC_MOVE_TO_TRASH);
         rule.applyToChildren(true);
         rule.setExecuteAsynchronously(false);
         rule.setRuleDisabled(false);
         rule.setRuleType(RuleType.UPDATE);
         CompositeAction compositeAction = nodeManager.actionService
               .createCompositeAction();
         rule.setAction(compositeAction);

         // Conditions for the Rule (has aspect deletable)
         Map<String, Serializable> actionMap = new HashMap<String, Serializable>();
         actionMap.put(HasAspectEvaluator.PARAM_ASPECT,
               Document.QNAME_SG_DELETABLE);
         compositeAction.addActionCondition(nodeManager.actionService
               .createActionCondition(HasAspectEvaluator.NAME, actionMap));

         // Action
         Action action = nodeManager.actionService
               .createAction(MoveActionExecuter.NAME);
         compositeAction.addAction(action);

         // Parameters for the action
         Map<String, Serializable> actionProps = compositeAction
               .getParameterValues();
         actionProps.put(RULE_PARAM_MOVE_PROP_DESTINATION, destNodeRef);
         Map<String, Serializable> repoProps = compositeAction
               .getParameterValues();
         (new MoveHandler()).prepareForSave(actionProps, repoProps);
         action.setParameterValues(repoProps);

         // Save the rule
         nodeManager.ruleService.saveRule(nodeRef, rule);

      } catch (Exception e) {
         logger.error("", e);
      }
   }

Merci