бобовая скорлупа - проблема тупика - PullRequest
0 голосов
/ 26 июня 2018

У кого-нибудь есть опыт взаимоблокировок с бобами?Это то, с чем мы недавно сталкивались в нашей производственной системе, где выполнение скриптов блокирует другие потоки из-за блокировки загрузки классов через tomcat.Ниже приведена трассировка стека для владельца блокировки в дампе потока:

"Thread-64" : 150 : BLOCKED : cpu=37812500000 : cpuLoad= 0.0
BlockedCount:93354 BlockedTime:-1 LockName:java.lang.Object@219d66b6 LockOwnerID:151 LockOwnerName:Thread-65
WaitedCount:13 WaitedTime:-1 InNative:false IsSuspended:false   at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntries(AbstractSingleArchiveResourceSet.java:66)
    at org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:262)
    at org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)
    at org.apache.catalina.webresources.Cache.getResource(Cache.java:62)
    at org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)
    at org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2173)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:811)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1260)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    at java.lang.Class.forName0(Class.java:-2)
    at java.lang.Class.forName(Class.java:348)
    at bsh.classpath.ClassManagerImpl.classForName(null:-1)
    at bsh.NameSpace.classForName(null:-1)
    at bsh.NameSpace.getImportedClassImpl(null:-1)
    at bsh.NameSpace.getClassImpl(null:-1)
    at bsh.NameSpace.getClass(null:-1)
    at bsh.Name.consumeNextObjectField(null:-1)
    at bsh.Name.toObject(null:-1)
    at bsh.BSHAmbiguousName.toObject(null:-1)
    at bsh.BSHAmbiguousName.toObject(null:-1)
    at bsh.BSHPrimaryExpression.eval(null:-1)
    at bsh.BSHPrimaryExpression.eval(null:-1)
    at bsh.BSHVariableDeclarator.eval(null:-1)
    at bsh.BSHTypedVariableDeclaration.eval(null:-1)
    at bsh.Interpreter.eval(null:-1)
    at bsh.Interpreter.eval(null:-1)
    at bsh.Interpreter.eval(null:-1)
    at my.package.MyClassFile(MyClassFile:2332)

Я вижу, что Groovy является более популярным выбором для сценариев Java, но я не видел много сообщений, в которых говорится, что bsh может вызватьтупики.

Было бы хорошо получить некоторые идеи от пользователей SO.

С уважением,

1 Ответ

0 голосов
/ 26 июня 2018

Существует исправление для одной мертвой блокировки в GUI не запускается в Java 8 найдено в Beanshell (почти последняя) версия 2.0b5.

Вы можете открыть новую проблему в проекте Beanshell.

Может быть подключен к ClassManagerImpl :

Bsh имеет многоуровневую архитектуру загрузки классов.Загрузчик классов не создается, если / пока не будет создан класс, не изменен путь к классу или не загружен класс.

Примечание: здесь может потребоваться некоторая синхронизация

...