Alfresco 为什么在.parallel()期间出现MyBatisSystemException。露天执行6.2?

Alfresco 为什么在.parallel()期间出现MyBatisSystemException。露天执行6.2?,alfresco,mybatis,Alfresco,Mybatis,将Alfresco form 5.2版升级到6.2版后,它变得不稳定:有时我们会: org.mybatis.spring.MyBatisSystemException: nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class java.u

将Alfresco form 5.2版升级到6.2版后,它变得不稳定:有时我们会:

org.mybatis.spring.MyBatisSystemException: nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class java.util.ArrayList with invalid types () or values 
通常在。平行。集合执行。有完整的堆栈跟踪和代码。其实我甚至无法理解一个流程的控制,为什么会涉及MyBatis

请帮帮我

谢谢大家!

PS:事实上,这个误差的重现性不好。当我删除.parallel时,此异常不会出现。并使用单线程流处理

UPD:以下代码在.parallel的情况下引发异常。执行,并且在串行执行的情况下不会引发异常:

final SecurityManager sm = System.getSecurityManager();
   if (sm != null) {
        sm.checkPermission(new RuntimePermission("accessDeclaredMembers"));
    }

UPD 2解决方案:在Alfresco版本5.2 System.getSecurityManager==NULL!!!但是在版本6.2中。它已经建立起来了。这是不同行为细节的问题。V6.2设置SecurityManager和V5.2。不。解决方案是将Dockerfile中的catalina.sh替换为新的修改过的cataliha.sh,它删除了安全JVM选项。

此异常来自Java安全管理器。如果您使用的是Alfresco docker图像,则默认情况下启用安全管理器。如果您已经完成了非docker安装,那么您将使用-security开关启动tomcat。虽然建议使用安全管理器,因为它使您的安装更加安全,但并不需要

如果使用Alfresco的docker图像,则需要修改docker-compose.yml文件,并为Alfresco服务指定命令参数。开箱即用的命令参数是[catalina.sh run-security]。您需要删除-security标志。例如:

...
services:
    alfresco:
        image: alfresco/alfresco-content-repository-community:6.2.0-ga
        command: ["catalina.sh" "run"]
...
如果手动安装了Alfresco,只需更改启动方式即可。删除-security标志

根据:


使用并行执行会导致线程在没有安全配置的情况下繁殖。这意味着在这种情况下,除非禁用安全管理器,否则不能使用并行执行。因此,您可以选择使用上述步骤禁用安全管理器或使用串行执行。

此异常来自Java安全管理器。如果您使用的是Alfresco docker图像,则默认情况下启用安全管理器。如果您已经完成了非docker安装,那么您将使用-security开关启动tomcat。虽然建议使用安全管理器,因为它使您的安装更加安全,但并不需要

如果使用Alfresco的docker图像,则需要修改docker-compose.yml文件,并为Alfresco服务指定命令参数。开箱即用的命令参数是[catalina.sh run-security]。您需要删除-security标志。例如:

...
services:
    alfresco:
        image: alfresco/alfresco-content-repository-community:6.2.0-ga
        command: ["catalina.sh" "run"]
...
如果手动安装了Alfresco,只需更改启动方式即可。删除-security标志

根据:


使用并行执行会导致线程在没有安全配置的情况下繁殖。这意味着在这种情况下,除非禁用安全管理器,否则不能使用并行执行。因此,您可以选择使用上述步骤禁用安全管理器或使用串行执行。

请发布完整的堆栈跟踪。部分堆栈跟踪没有多大帮助。请参阅此.java.security.AccessControlException:access denied java.lang.RuntimePermission accessDeclaredMembers-这是您的问题:您在java SecurityManager中运行Alfresco进程时没有正确/适当的策略文件。Alfresco本身不使用AllPermission授予提供细粒度策略文件,请参阅。如果在webapp之外部署自定义模块,还需要授予JAR必要的权限;在catalina.policy中,您是否还检查了Alfresco web应用程序及其所有组成代码/库是否被授予了权限?如果只授予某些Tomcat库,则没有帮助。请发布完整的堆栈跟踪。部分堆栈跟踪没有多大帮助。请参阅此.java.security.AccessControlException:access denied java.lang.RuntimePermission accessDeclaredMembers-这是您的问题:您在java SecurityManager中运行Alfresco进程时没有正确/适当的策略文件。Alfresco本身不使用AllPermission授予提供细粒度策略文件,请参阅。如果在webapp之外部署自定义模块,还需要授予JAR必要的权限;在catalina.policy中,您是否还检查了Alfresco web应用程序及其所有组成代码/库是否被授予了权限?如果只授予一些Tomcat库,那就没用了。看起来我有完全不同的部署方案。请参阅的最新更新question@EkaterinaIvanovaic
有两种方法可以在户外部署:1。Docker图像,或2。手动。我涵盖了这两个方面。Alfresco未启用安全管理器。它由Tomcat启用。如果您没有使用docker,您只需要检查启动Tomcat的方法。-security命令行开关将启用安全管理器。还有其他命令行参数将启用它。看起来我有完全不同的部署方案。请参阅的最新更新question@EkaterinaIvanovaiceja.net露天部署有两种方法:1。Docker图像,或2。手动。我涵盖了这两个方面。Alfresco未启用安全管理器。它由Tomcat启用。如果您没有使用docker,您只需要检查启动Tomcat的方法。-security命令行开关将启用安全管理器。还有其他命令行参数将启用它。