2012-05-19 2 views
0

Я использую Groovy 1.7.8. и написали Groovy DSL, который я выполняю одновременно на разных объектах домена.Тупики в оценках оболочки Groovy

В последнее время я начал сталкиваться с тупиками при сильном параллелизме, когда DSLs компилируются/выполняются одновременно.

Я компиляция/выполнение Groovy DSL во время выполнения с помощью:

Script s = compileScript(dsl) 
def binding = new Binding() 
binding.setVariable("domainObj", domainObj) 
s.setBinding(binding) 
s.run() 

def Script compileScript(String dsl) { 
    def scriptText = getScriptText(dsl) 
    def conf = new CompilerConfiguration() 
    conf.setScriptBaseClass(GroovyViewExecutionBase.class.getName()) 
    new GroovyShell(conf).parse(scriptText) 
} 

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

взаимоблокировки-участника-1:

at java.beans.PropertyDescriptor.getReadMethod(PropertyDescriptor.java:158) 

- waiting to lock <0x00007f41a3363960> (a java.beans.PropertyDescriptor) 

at java.beans.Introspector.processPropertyDescriptors(Introspector.java:683) 

at java.beans.Introspector.getTargetPropertyInfo(Introspector.java:615) 

at java.beans.Introspector.getBeanInfo(Introspector.java:407) 

at java.beans.Introspector.getBeanInfo(Introspector.java:164) 

- locked <0x00007f41a3358c28> (a java.lang.Object) 

at groovy.lang.MetaClassImpl$15.run(MetaClassImpl.java:2940) 

at java.security.AccessController.doPrivileged(Native Method) 

at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:2938) 

at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:2921) 

- locked <0x00007f429f011268> (a groovy.lang.ExpandoMetaClass) 

at groovy.lang.ExpandoMetaClass.initialize(ExpandoMetaClass.java:463) 

- locked <0x00007f429f011268> (a groovy.lang.ExpandoMetaClass) 

at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:166) 

at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:182) 

at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:210) 

at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:751) 

at groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:32) 

at groovy.lang.Script.<init>(Script.java:40) 

at groovy.lang.Script.<init>(Script.java:37) 

at flipkart.cms.views.core.GroovyViewExecutionBase.<init>(GroovyViewExecutionBase.groovy) 

at Script1.<init>(Script1.groovy) 

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 

at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 

at java.lang.Class.newInstance0(Class.java:355) 

at java.lang.Class.newInstance(Class.java:308) 

at org.codehaus.groovy.runtime.InvokerHelper.createScript(InvokerHelper.java:408) 

at groovy.lang.GroovyShell.parse(GroovyShell.java:743) 

at groovy.lang.GroovyShell.parse(GroovyShell.java:770) 

at groovy.lang.GroovyShell.parse(GroovyShell.java:761) 

at groovy.lang.GroovyShell$parse.call(Unknown Source) 

at cms.views.core.GroovyDSLViewComputer.compileScript(GroovyDSLViewComputer.groovy:85) 

==================

взаимоблокировки-участника-2: в java.beans .Introspector.getPublicDeclaredMethods (Introspector.java:1277)

- waiting to lock <0x00007f41a3358c28> (a java.lang.Object) 

at java.beans.Introspector.internalFindMethod(Introspector.java:1312) 

at java.beans.Introspector.findMethod(Introspector.java:1383) 

at java.beans.Introspector.findMethod(Introspector.java:1363) 

at java.beans.PropertyDescriptor.getReadMethod(PropertyDescriptor.java:179) 

- locked <0x00007f41a3363960> (a java.beans.PropertyDescriptor) 

at groovy.lang.MetaClassImpl.applyPropertyDescriptors(MetaClassImpl.java:2215) 

at groovy.lang.MetaClassImpl.setupProperties(MetaClassImpl.java:1995) 

at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:2950) 

at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:2921) 

- locked <0x00007f42a12972b8> (a groovy.lang.ExpandoMetaClass) 

at groovy.lang.ExpandoMetaClass.initialize(ExpandoMetaClass.java:463) 

- locked <0x00007f42a12972b8> (a groovy.lang.ExpandoMetaClass) 

at org.codehaus.groovy.runtime.HandleMetaClass.replaceDelegate(HandleMetaClass.java:66) 

at org.codehaus.groovy.runtime.HandleMetaClass.setProperty(HandleMetaClass.java:91) 

at org.codehaus.groovy.runtime.InvokerHelper.setProperty(InvokerHelper.java:179) 

at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setProperty(ScriptBytecodeAdapter.java:483) 

at flipkart.cms.views.core.GroovyViewExecutionBase.setupAttrProperties(GroovyViewExecutionBase.groovy:60) 

at flipkart.cms.views.core.GroovyViewExecutionBase$setupAttrProperties$0.callCurrent(Unknown Source) 

at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) 

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) 

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) 

at cms.views.core.GroovyViewExecutionBase.computeView(GroovyViewExecutionBase.groovy:32) 

==================

Любые идеи, как я Ĉ исправление/обходное решение?

ответ

1

Отправлено это на форум groovy-user и выглядит как взаимоблокировки вызваны из-за проблем с синхронизацией в java.beans java.bans.Introspector класса, который, по-видимому, был исправлен на Java 7. Также получен backport этих классов для java 6 и я тестирую backported классы для воспроизведения тупиков.

Подробнее здесь:

http://groovy.329449.n5.nabble.com/Groovy-deadlocks-when-executing-DSL-from-GroovyShell-td5709889.html

Смежные вопросы