【发布时间】:2021-03-07 18:09:00
【问题描述】:
在将 Alfresco 从 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
通常在 .parallel() 期间。集合执行。有完整的堆栈跟踪 https://pastebin.com/7d7NBwkn 并且有代码 https://pastebin.com/RyPt5d0g 。其实我连控制流都看不懂,为什么会涉及到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 版中。它已经设置好了。那是不同行为的问题(https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ForkJoinPool.html 中的详细信息)。 V 6.2 设置了 SecurityManager 和 v 5.2。没有。解决方案是将 Dockerfile 中的 catalina.sh 替换为新修改的 cataliha.sh,它删除了安全 JVM 选项。
【问题讨论】:
-
请发布完整的堆栈跟踪。部分堆栈跟踪不是很有帮助。看到这个answer。
-
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "accessDeclaredMembers")- 您的问题是:您在 Java SecurityManager 中运行 Alfresco 进程,但没有正确/适当的策略文件。 Alfresco 本身不提供细粒度的策略文件,使用 AllPermission 授权(请参阅github.com/Alfresco/alfresco-community-repo/blob/master/…)。如果您在 webapp 之外部署自定义模块,您还需要授予 JAR 必要的权限。 -
我们有权限 java.lang.RuntimePermission "accessDeclaredMembers";在 catalina.policy 中
-
您是否还检查过是否已授予 Alfresco Web 应用程序及其所有构成代码/库的权限?如果仅授予某些 Tomcat 库,则无济于事。