运行Bootstrap加载时播放框架1.2.5异常
Posted
技术标签:
【中文标题】运行Bootstrap加载时播放框架1.2.5异常【英文标题】:play framework 1.2.5 exception occurred while running Bootstrap loading 【发布时间】:2013-05-28 06:57:27 【问题描述】:环境:play-1.2.5
我需要在启动播放框架应用程序时将数据放入数据库,所以我让它在Bootstrap.java中完成。
基本上,我只是调用一个模型并为其新建一个实例并将数据重复存储到数据库中。如下所示。
MagazineType magazineType = new MagazineType();
magazineType.abbreviation = "XX";
magazineType.save();
MagazineTypeFirstCat magazineTypeFirstCat = new MagazineTypeFirstCat();
magazineTypeFirstCat.name = "XX_First";
magazineTypeFirstCat.magazineType = magazineType;
magazineTypeFirstCat.save();
MagazineTypeSecondCat magazineTypeSecondCat = new MgazineTypeSecondCat();
magazineTypeSecondCat.name = "XX_Second_1";
magazineTypeSecondCat.magazineTypeFirstCat = magazineTypeFirstCat;
magazineTypeSecondCat.save();
MagazineTypeSecondCat magazineTypeSecondCat = new MgazineTypeSecondCat();
magazineTypeSecondCat.name = "XX_Second_2";
magazineTypeSecondCat.magazineTypeFirstCat = magazineTypeFirstCat;
magazineTypeSecondCat.save();
但是数据量很大,所以Bootstrap.java中的代码长度超过5000行。
当代码长度在3000行以下时,flamework会正常启动,但如果代码长度超过3000行,则会出现异常。
以下是异常日志,如有任何建议,我们将不胜感激。提前致谢。
14:42:20,855 警告 ~ 您正在运行 Play!在 DEV 模式下 14:42:21,023 INFO ~ 在端口 9000 上侦听 HTTP(等待第一个请求开始)...
14:42:35,275 错误 ~
@6edp5mkl9
请求 GET /
的内部服务器错误 (500)糟糕:意外异常
UnexpectedException: While application class 异常导致发生意外错误 引导上的 play.classloading.enhancers.PropertiesEnhancer
play.exceptions.UnexpectedException:在 Bootstrap 上应用 play.CorePlugin@1f0b7d3 时
在 play.plugins.PluginCollection.enhance(PluginCollection.java:454)
在 play.classloading.ApplicationClasses$ApplicationClass.enhance (ApplicationClasses.java:208)
在 play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:157)
在 play.classloading.ApplicationClassloader.getAllClasses(ApplicationClassloader.java:417)
在 play.classloading.ApplicationClassloader.getAssignableClasses(ApplicationClassloader.java:441)
在 module:crud/app/views/tags/crud/types.tag.(line:3)
在 play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:229)
在 play.templates.GroovyTemplate$ExecutableTemplate.invokeTag(GroovyTemplate.java:374)
在 module:crud/conf/routes.(line:4)
在 play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:229)
在 play.templates.Template.render(Template.java:26)
在 play.templates.GroovyTemplate.render(GroovyTemplate.java:184)
在 play.mvc.Router.parse(Router.java:162)
在 play.mvc.Router.parse(Router.java:190)
在 play.mvc.Router.parse(Router.java:164)
在 play.mvc.Router.load(Router.java:50)
在 play.mvc.Router.detectChanges(Router.java:219)
在 Invocation.HTTP 请求(播放!)
原因:play.exceptions.UnexpectedException:在 Bootstrap 上应用 play.classloading.enhancers.PropertiesEnhancer 类时
在 play.CorePlugin.enhance(CorePlugin.java:296)
在 play.plugins.PluginCollection.enhance(PluginCollection.java:451)
在 play.classloading.ApplicationClasses$ApplicationClass.enhance(ApplicationClasses.java:208)
在 play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:157)
在 play.classloading.ApplicationClassloader.getAllClasses(ApplicationClassloader.java:417)
在 play.classloading.ApplicationClassloader.getAssignableClasses(ApplicationClassloader.java:441)
在 org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:229)
在 org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:52)
在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124)
在 Template_1001$_run_closure1.doCall(types.tag:6)
在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
在 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
在 org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)
在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
在 org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)
在 Template_1001$_run_closure1.doCall(types.tag)
在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
在 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
在 org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod (ClosureMetaClass.java:273)
在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
在 groovy.lang.Closure.call(Closure.java:282)
在 groovy.lang.Closure.call(Closure.java:277)
在 org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:99)
在 org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.access$300(GroovyCategorySupport.java:61)
在 org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:239)
在 org.codehaus.groovy.runtime.DefaultGroovyMethods.use(DefaultGroovyMethods.java:333)
在 org.codehaus.groovy.runtime.dgm$717.invoke(来源不明)
在 org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoMetaMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:307)
在 org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51)
在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:153)
在 Template_1001.run(types.tag:2)
在 play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:229)
在 play.templates.GroovyTemplate$ExecutableTemplate.invokeTag(GroovyTemplate.java:374)
在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
在 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
在 org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:362)
在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
在 org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:161)
在 Template_1000$_run_closure1.doCall(routes:41)
在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
在 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
在 org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)
在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
在 org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)
在 Template_1000$_run_closure1.doCall(routes)
在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
在 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
在 org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)
在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
在 groovy.lang.Closure.call(Closure.java:282)
在 groovy.lang.Closure.call(Closure.java:277)
在 org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:99)
在 org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.access$300(GroovyCategorySupport.java:61)
在 org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:239)
在 org.codehaus.groovy.runtime.DefaultGroovyMethods.use(DefaultGroovyMethods.java:333)
在 org.codehaus.groovy.runtime.dgm$717.invoke(来源不明)
在 org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoMetaMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:307)
在 org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51)
在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:153)
在 Template_1000.run(routes:2)
...还有 9 个
原因:javassist.CannotCompileException:操作码地址无效
在 javassist.expr.ExprEditor.doit(ExprEditor.java:116)
在 javassist.CtBehavior.instrument(CtBehavior.java:618)
在 play.classloading.enhancers.PropertiesEnhancer.enhanceThisClass(PropertiesEnhancer.java:130)
在 play.CorePlugin.enhance(CorePlugin.java:293)
... 83 更多
原因:javassist.bytecode.BadBytecode:操作码地址无效
在 javassist.bytecode.CodeIterator.nextOpcode(CodeIterator.java:586)
在 javassist.bytecode.CodeIterator.next(CodeIterator.java:157)
在 javassist.bytecode.stackmap.Liveness.analyze(Liveness.java:237)
在 javassist.bytecode.stackmap.Liveness.computeUsage(Liveness.java:216)
在 javassist.bytecode.stackmap.Liveness.compute(Liveness.java:38)
在 javassist.bytecode.stackmap.TypedBlock.makeBlocks(TypedBlock.java:54)
在 javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:91)
在 javassist.bytecode.MethodInfo.rebuildStackMap(MethodInfo.java:404)
在 javassist.bytecode.MethodInfo.rebuildStackMapIf6(MethodInfo.java:389)
在 javassist.expr.ExprEditor.doit(ExprEditor.java:112)
... 86 更多
【问题讨论】:
想知道 - 您是否尝试过使用准备好的语句 executeBatch 并在线程上使用 sleep 来查看是否可以解决问题? @alihaider 很抱歉,我不太明白你的意思,但我已经放弃了我采取的步骤。现在我用 sql 文件中的数据初始化数据库,而不是让 Bootstrap.java 来完成这项工作。当然,问题解决了。 【参考方案1】:Java 类大小限制为 64 kb,因此您的类可能太大。
对于这样的用例,我更喜欢将所有 thi 初始化放在一个 sql 文件中,并在引导程序中使用一个 sql 加载脚本,它可以更好地扩展。
【讨论】:
以上是关于运行Bootstrap加载时播放框架1.2.5异常的主要内容,如果未能解决你的问题,请参考以下文章
在播放框架 1.2.5 中,扩展作业运行后台阻止请求/响应的类