微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误:操作总是访问存储库不建议在没有事务的情况下这样做

如何解决错误:操作总是访问存储库不建议在没有事务的情况下这样做

我正在尝试在我的 Java 类中调用操作: public void execute() {

    System.out.println("ScheduledJobExecuter_imapWF se poslusne hlasi");
    
    //potrebuju nejaky noderef
    ResultSet resSet = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACEsstORE,SearchService.LANGUAGE_FTS_ALFRESCO,"PATH:\" /app:company_home/st:sites/cm:sparta/cm:documentLibrary\"");
    if(resSet.length() != 1){
        throw new AlfrescoRuntimeException("Nasel jsem spatny pocet veci...resSet.length() != 1 (Error n420)");
    }
    NodeRef actionedUponNoderef = resSet.getNodeRef(0);

    //volam akci 
    Action a = actionService.createAction("get_mail_imap");
    
    //actionService.executeAction(a,actionedUponNoderef);
    AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Object>() {
        public Object doWork() throws Exception {
            actionService.executeAction(a,actionedUponNoderef);
            return null;
        }
    },AuthenticationUtil.getAdminUserName()); 

}

但突出显示的行:actionService.executeAction(a,actionedUponNoderef); 抛出错误

sparta-acs_1       | 2021-01-11 11:26:00,089  ERROR [quartz.core.JobRunShell] [DefaultScheduler_Worker-2] Job DEFAULT.org.springframework.scheduling.quartz.JobDetailfactorybean#46bdcf89 threw an unhandled Exception:
sparta-acs_1       |  java.lang.IllegalStateException: Actions invariably access the repository.  Doing so without a transaction is not recommended.
sparta-acs_1       |    at org.alfresco.repo.action.executer.ActionExecuterabstractBase.execute(ActionExecuterabstractBase.java:251)
sparta-acs_1       |    at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:856)
sparta-acs_1       |    at org.alfresco.repo.action.ActionServiceImpl.executeActionImpl(ActionServiceImpl.java:757)
sparta-acs_1       |    at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:581)
sparta-acs_1       |    at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:567)
sparta-acs_1       |    at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:865)
sparta-acs_1       |    at cz.signia.sparta.jobs.ScheduledJobExecuter_imapWF$1.doWork(ScheduledJobExecuter_imapWF.java:57)
sparta-acs_1       |    at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:602)
sparta-acs_1       |    at cz.signia.sparta.jobs.ScheduledJobExecuter_imapWF.execute(ScheduledJobExecuter_imapWF.java:55)
sparta-acs_1       |    at cz.signia.sparta.jobs.ScheduledJob_imapWF$1.doWork(ScheduledJob_imapWF.java:35)
sparta-acs_1       |    at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:602)
sparta-acs_1       |    at cz.signia.sparta.jobs.ScheduledJob_imapWF.execute(ScheduledJob_imapWF.java:33)
sparta-acs_1       |    at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
sparta-acs_1       |    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)

你知道如何解决这个问题吗?

谢谢

解决方法

希望您将 webscript 交易值设为 readwrite

<webscript>
  <shortname>{}</shortname>
  <description>{}</description>
  <url>/{name}</url>
  <format default="json">argument</format>
  <authentication>user</authentication>
  <transaction allow="readwrite" buffersize="0">required</transaction>
</webscript>
,

以给定用户的身份执行工作单元。调用后线程的认证用户会恢复到正常状态。

final Context cx = Context.getCurrentContext();
        final Scriptable scope = getScope();
 
        RunAsWork<Object> raw = new RunAsWork<Object>() {
            public Object doWork() throws Exception {
                func.call(cx,scope,new Object[] {});
                return null;
            }
        };
 
        AuthenticationUtil.runAs(raw,AuthenticationUtil.getAdminUserName());
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。