cancel
Showing results for 
Search instead for 
Did you mean: 

Error while deleting node in NodeServicePolicies.BeforeDeleteNodePolicy

afigan
Champ in-the-making
Champ in-the-making
Hello everyone!

this is error i getting when i try to delete first created node in BehaviorBugWebScript:


first: workspace://SpacesStore/f1154b89-b0bd-4680-b13d-508adc3db2d7
second: workspace://SpacesStore/4eff43dd-483d-4f9b-9db5-3665b2e6de68
TRYING TO DELETE: workspace://SpacesStore/f1154b89-b0bd-4680-b13d-508adc3db2d7
…..
TRYING TO DELETE: workspace://SpacesStore/f1154b89-b0bd-4680-b13d-508adc3db2d7




Unable to delete Space due to system error: Deleted 0 but expected 1
org.springframework.dao.ConcurrencyFailureException: Deleted 0 but expected 1
   at org.alfresco.repo.domain.node.AbstractNodeDAOImpl.removeNodeAssocs(AbstractNodeDAOImpl.java:2931)
   at org.alfresco.repo.node.db.DbNodeServiceImpl.deleteNode(DbNodeServiceImpl.java:1228)
   at org.alfresco.repo.node.db.DbNodeServiceImpl.deleteNode(DbNodeServiceImpl.java:1059)
   at sun.reflect.GeneratedMethodAccessor677.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:309)
   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:104)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
   at com.sun.proxy.$Proxy10.deleteNode(Unknown Source)
   at sun.reflect.GeneratedMethodAccessor677.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:215)
   at com.sun.proxy.$Proxy29.deleteNode(Unknown Source)
   at sun.reflect.GeneratedMethodAccessor677.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:309)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
   at org.alfresco.repo.tagging.TagScopePropertyMethodInterceptor.invoke(TagScopePropertyMethodInterceptor.java:152)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.alfresco.repo.node.MLPropertyInterceptor.invoke(MLPropertyInterceptor.java:306)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.alfresco.repo.lock.mem.LockableAspectInterceptor.invoke(LockableAspectInterceptor.java:200)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.alfresco.repo.node.NodeRefPropertyMethodInterceptor.invoke(NodeRefPropertyMethodInterceptor.java:269)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
   at com.sun.proxy.$Proxy10.deleteNode(Unknown Source)
   at sun.reflect.GeneratedMethodAccessor677.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:309)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
   at com.sun.proxy.$Proxy10.deleteNode(Unknown Source)
   at sun.reflect.GeneratedMethodAccessor677.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:309)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
   at org.alfresco.repo.audit.DisableAuditableBehaviourInterceptor.invoke(DisableAuditableBehaviourInterceptor.java:113)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:80)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:46)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:161)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.alfresco.repo.transaction.RetryingTransactionInterceptor$1.execute(RetryingTransactionInterceptor.java:79)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:452)
   at org.alfresco.repo.transaction.RetryingTransactionInterceptor.invoke(RetryingTransactionInterceptor.java:69)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
   at com.sun.proxy.$Proxy10.deleteNode(Unknown Source)
   at org.alfresco.web.bean.spaces.DeleteSpaceDialog.finishImpl(DeleteSpaceDialog.java:120)
   at org.alfresco.web.bean.dialog.BaseDialogBean$1.execute(BaseDialogBean.java:123)
   at org.alfresco.web.bean.dialog.BaseDialogBean$1.execute(BaseDialogBean.java:119)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:452)
   at org.alfresco.web.bean.dialog.BaseDialogBean.finish(BaseDialogBean.java:129)
   at org.alfresco.web.bean.dialog.DialogManager.finish(DialogManager.java:528)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   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:151)
   at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:115)
   at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:191)
   at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
   at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:105)
   at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:80)
   at javax.faces.webapp.FacesServlet.service(FacesServlet.java:143)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.alfresco.repo.web.filter.beans.SessionSynchronizedFilter.doFilter(SessionSynchronizedFilter.java:67)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:105)
   at sun.reflect.GeneratedMethodAccessor575.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:125)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
   at com.sun.proxy.$Proxy291.doFilter(Unknown Source)
   at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:82)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.alfresco.repo.web.filter.beans.NullFilter.doFilter(NullFilter.java:68)
   at sun.reflect.GeneratedMethodAccessor575.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:125)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
   at com.sun.proxy.$Proxy291.doFilter(Unknown Source)
   at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:82)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:61)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
   at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
   at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
   at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
   at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   at java.lang.Thread.run(Unknown Source)


so i have this model:


<?xml version="1.0" encoding="UTF-8"?>
<model xmlns="http://www.alfresco.org/model/dictionary/1.0" name="dummy:dummyModule">
   <description>Dummy model</description>
   <author>My Name</author>
   <published>2015-02-04</published>
   <version>1.0</version>
   <imports>
      <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"></import>
      <import uri="http://www.alfresco.org/model/system/1.0" prefix="sys"></import>
      <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"></import>
   </imports>
   <namespaces>
      <namespace uri="http://www.example.com/model/dummy/1.0" prefix="dummy"></namespace>
   </namespaces>
   <types>

      </types>
   <aspects>
   
      <aspect name="dummy:testAspect1" />
      
      <aspect name="dummy:testAspect2">
         <associations>
            <association name="dummy:testAssoc">
               <source>
                  <many>false</many>
               </source>
               <target>
                  <class>cm:folder</class>
                  <many>true</many>
               </target>
            </association>
         </associations>
      </aspect>

   </aspects>
</model>



this content behavior


public class BugEventsListener {
   private NodeService nodeService;


   private BehaviourFilter policyFilter;

   public void setPolicyFilter(BehaviourFilter policyFilter) {
      this.policyFilter = policyFilter;
   }
   
   public void setNodeService(NodeService nodeService) {
      this.nodeService = nodeService;
   }

   private PolicyComponent policyComponent;

   public void setPolicyComponent(PolicyComponent policyComponent) {
      this.policyComponent = policyComponent;
   }

   public void init() {

      this.policyComponent.bindClassBehaviour(NodeServicePolicies.BeforeDeleteNodePolicy.QNAME,
            BehaviorBugWebScript.TEST_ASPECT_1, new JavaBehaviour(this, "onDeleteChild",
                  NotificationFrequency.EVERY_EVENT));
   }

   public void onDeleteChild(final NodeRef nodeRef) {

      System.out.println("TRYING TO DELETE: " + nodeRef);
      policyFilter.disableBehaviour();
      List<NodeRef> list = BehaviorBugWebScript.getTargetAssoc(nodeRef, BehaviorBugWebScript.TEST_ASSOC);

      for (NodeRef node : list) {

         nodeService.deleteNode(node);
      }
   }

}



and this is the script i running


public class BehaviorBugWebScript extends AbstractWebScript {

   public static NodeService nodeService;

   public void setNodeService(NodeService nodeService) {
      this.nodeService = nodeService;
   }
   public static final QName TEST_ASPECT_1 = QName.createQName("http://www.example.com/model/dummy/1.0", "testAspect1");
   public static final QName TEST_ASSOC= QName.createQName("http://www.example.com/model/dummy/1.0", "testAssoc");
   @Override
   public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException {
      NodeRef homeFolder = getAdminHomeFolder();
      NodeRef folder = createFolder(homeFolder, "rootFolder");   
      NodeRef firstSubFolder = createFolder(folder, "firstFolder");
      nodeService.addAspect(firstSubFolder, TEST_ASPECT_1, null);
      System.out.println("first: "+firstSubFolder);
      NodeRef secondSubFolder = createFolder(folder, "secondFolder");
      System.out.println("second: "+secondSubFolder);
      nodeService.addAspect(secondSubFolder, TEST_ASPECT_1, null);
      nodeService.createAssociation(firstSubFolder, secondSubFolder, TEST_ASSOC);

   }
   public NodeRef createFolder(NodeRef parent, String name) {

      ChildAssociationRef childAssoc = nodeService.createNode(parent, ContentModel.ASSOC_CONTAINS,

      QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, name),
            ContentModel.TYPE_FOLDER);

      return childAssoc.getChildRef();
   }

   public static NodeRef getAdminHomeFolder() {
      PersonService personService = Services.getServiceRegistry().getPersonService();
      NodeRef personNode = personService.getPerson("admin");
         NodeRef homeFolderRef = (NodeRef) Services.getNodeService().getProperty(personNode,
            ContentModel.PROP_HOMEFOLDER);
      return homeFolderRef;
   }
   
   
   
   public static List<NodeRef> getTargetAssoc(NodeRef nodeRef, QName type) {
      List<NodeRef> result = new ArrayList<NodeRef>();

      if (!Services.getNodeService().exists(nodeRef)) {
         return result;
      }
      List<AssociationRef> childs = Services.getNodeService().getTargetAssocs(nodeRef, type);

      for (AssociationRef childRef : childs) {
         result.add(childRef.getTargetRef());
      }

      return result;
   }
}

1 REPLY 1

afigan
Champ in-the-making
Champ in-the-making
workaround is to run code in a new thread, but thats a bad solution:

Thread thread = new Thread() {
   public void run() {
      RunAsWork<Object> raw = new RunAsWork<Object>() {
         public Object doWork() throws Exception {
            List<NodeRef> list = BehaviorBugWebScript.getTargetAssoc(nodeRef, BehaviorBugWebScript.TEST_ASSOC);
            for (NodeRef node : list) {
               nodeService.deleteNode(node);
            }
         }
      };
      AuthenticationUtil.runAs(raw, AuthenticationUtil.getAdminUserName());
   }
};
thread.start();