Question

environment: play-1.2.5

I need to put datas to the database while starting the play framework application, so I let it be done in the Bootstrap.java.

Basically, I'm just calling a Model and new an instance for it and storing data to the database repeatedly. Like below.

{
  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();
        }
      }
    }
  }
}

But the data is quite large, so the length of the code in Bootstrap.java is over 5000 lines.

When the length of code is under 3000 lines, the flamework will be started just fine, but exceptions occurred if the code length exceeds 3000 lines.

Below is the log for the exception, any suggestion will be appreciated. Thanks in advance.

14:42:20,855 WARN ~ You're running Play! in DEV mode
14:42:21,023 INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...

14:42:35,275 ERROR ~


@6edp5mkl9

Internal Server Error (500) for request GET /


Oops: UnexpectedException

An unexpected error occured caused by exception UnexpectedException: While applying class
play.classloading.enhancers.PropertiesEnhancer on Bootstrap


play.exceptions.UnexpectedException: While applying play.CorePlugin@1f0b7d3 on Bootstrap

at play.plugins.PluginCollection.enhance(PluginCollection.java:454)

at play.classloading.ApplicationClasses$ApplicationClass.enhance (ApplicationClasses.java:208)

at play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:157)

at play.classloading.ApplicationClassloader.getAllClasses(ApplicationClassloader.java:417)

at play.classloading.ApplicationClassloader.getAssignableClasses(ApplicationClassloader.java:441)

at {module:crud}/app/views/tags/crud/types.tag.(line:3)

at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:229)

at play.templates.GroovyTemplate$ExecutableTemplate.invokeTag(GroovyTemplate.java:374)

at {module:crud}/conf/routes.(line:4)

at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:229)

at play.templates.Template.render(Template.java:26)

at play.templates.GroovyTemplate.render(GroovyTemplate.java:184)

at play.mvc.Router.parse(Router.java:162)

at play.mvc.Router.parse(Router.java:190)

at play.mvc.Router.parse(Router.java:164)

at play.mvc.Router.load(Router.java:50)

at play.mvc.Router.detectChanges(Router.java:219)

at Invocation.HTTP Request(Play!)

Caused by: play.exceptions.UnexpectedException: While applying class play.classloading.enhancers.PropertiesEnhancer on Bootstrap

at play.CorePlugin.enhance(CorePlugin.java:296)

at play.plugins.PluginCollection.enhance(PluginCollection.java:451)

at play.classloading.ApplicationClasses$ApplicationClass.enhance(ApplicationClasses.java:208)

at play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:157)

at play.classloading.ApplicationClassloader.getAllClasses(ApplicationClassloader.java:417)

at play.classloading.ApplicationClassloader.getAssignableClasses(ApplicationClassloader.java:441)

at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:229)

at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:52)

at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124)

at Template_1001$_run_closure1.doCall(types.tag:6)

at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)

at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)

at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)

at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)

at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)

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 Template_1001$_run_closure1.doCall(types.tag)

at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)

at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)

at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod (ClosureMetaClass.java:273)

at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)

at groovy.lang.Closure.call(Closure.java:282)

at groovy.lang.Closure.call(Closure.java:277)

at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:99)

at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.access$300(GroovyCategorySupport.java:61)

at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:239)

at org.codehaus.groovy.runtime.DefaultGroovyMethods.use(DefaultGroovyMethods.java:333)

at org.codehaus.groovy.runtime.dgm$717.invoke(Unknown Source)

at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoMetaMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:307)

at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51)

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:153)

at Template_1001.run(types.tag:2)

at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:229)

at play.templates.GroovyTemplate$ExecutableTemplate.invokeTag(GroovyTemplate.java:374)

at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)

at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)

at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:362)

at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)

at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)

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:161)

at Template_1000$_run_closure1.doCall(routes:41)

at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)

at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)

at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)

at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)

at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)

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 Template_1000$_run_closure1.doCall(routes)

at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)

at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)

at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)

at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)

at groovy.lang.Closure.call(Closure.java:282)

at groovy.lang.Closure.call(Closure.java:277)

at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:99)

at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.access$300(GroovyCategorySupport.java:61)

at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:239)

at org.codehaus.groovy.runtime.DefaultGroovyMethods.use(DefaultGroovyMethods.java:333)

at org.codehaus.groovy.runtime.dgm$717.invoke(Unknown Source)

at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoMetaMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:307)

at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51)

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:153)

at Template_1000.run(routes:2)

... 9 more

Caused by: javassist.CannotCompileException: invalid opcode address

at javassist.expr.ExprEditor.doit(ExprEditor.java:116)

at javassist.CtBehavior.instrument(CtBehavior.java:618)

at play.classloading.enhancers.PropertiesEnhancer.enhanceThisClass(PropertiesEnhancer.java:130)

at play.CorePlugin.enhance(CorePlugin.java:293)

... 83 more

Caused by: javassist.bytecode.BadBytecode: invalid opcode address

at javassist.bytecode.CodeIterator.nextOpcode(CodeIterator.java:586)

at javassist.bytecode.CodeIterator.next(CodeIterator.java:157)

at javassist.bytecode.stackmap.Liveness.analyze(Liveness.java:237)

at javassist.bytecode.stackmap.Liveness.computeUsage(Liveness.java:216)

at javassist.bytecode.stackmap.Liveness.compute(Liveness.java:38)

at javassist.bytecode.stackmap.TypedBlock.makeBlocks(TypedBlock.java:54)

at javassist.bytecode.stackmap.MapMaker.make(MapMaker.java:91)

at javassist.bytecode.MethodInfo.rebuildStackMap(MethodInfo.java:404)

at javassist.bytecode.MethodInfo.rebuildStackMapIf6(MethodInfo.java:389)

at javassist.expr.ExprEditor.doit(ExprEditor.java:112)

... 86 more

Was it helpful?

Solution

Java class size is limited to 64 kb so your class might be too big.

For such a use case I prefer to put all thi initialization in a sql file and use an sql load script in the bootstrap, it scales better.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top