IllegalStateException when using ANT Enhanced Classes under Ebean 12.11.5

50 views
Skip to first unread message

XC

unread,
Oct 5, 2021, 1:09:00 PM10/5/21
to Ebean ORM
We recently switched from Ebean 7 -> 12.11.5 and are now trying to reproduce the Ebean-class -enhancement-on-disk functionality we had in Ebean 7 using the ANT example given on the Ebean web page. Unfortunately it seems the enhanced POJO classes do not see properties from their base POJO classes, since we get exceptions like the one below when executing a simple Ebean test that uses GooPojo (ENTITY_ID  is a property defined in a base class of GooPojo, classes worked in Ebean 7 and work in Ebean 12 when using the IntelliJ javaagent based Ebean plugin).

Any idea what we are doing wrong ?

Environment:
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)
Groovy 3.0.9
WIN10
IntelliJ 2021.1.1 

Exception:
[2021-10-04 22:35:33|ERROR|main|io.ebeaninternal.server.deploy.BeanDescriptorManager] Error in deployment
java.lang.IllegalStateException: If you are running in an IDE with enhancement plugin try a Build -> Rebuild Project to recompile and enhance all entity beans. Error - property ENTITY_ID not found in [VISIBLE, VISIBLE_VA, PARENT_EID_IDH, NAME, CREATED_BY_IDH, LAST_CHANGED_BY] for type class com.domain.my.orm.entities.pojos.GooPojo
at io.ebeaninternal.server.deploy.BeanDescriptorManager.setBeanReflect(BeanDescriptorManager.java:1310)
at io.ebeaninternal.server.deploy.BeanDescriptorManager.createByteCode(BeanDescriptorManager.java:1270)
at io.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1195)
at io.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:669)
at io.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:293)
at io.ebeaninternal.server.core.InternalConfiguration.<init>(InternalConfiguration.java:177)
at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:109)
at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:35)
at io.ebean.DatabaseFactory.createInternal(DatabaseFactory.java:136)
at io.ebean.DatabaseFactory.create(DatabaseFactory.java:85)
at io.ebean.EbeanServerFactory.create(EbeanServerFactory.java:50)
at io.ebean.EbeanServerFactory$create.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
at com.domain.my.orm.OrmHelper.createEbeanServer(OrmHelper.groovy:123)
...


ANT task we use for the enhancement:
<?xml version="1.0" encoding="UTF-8"?>
<project basedir=".">
   <taskdef
           name="ebeanEnhanceTask"
           classname="io.ebean.enhance.ant.AntEnhanceTask"
           classpath="./lib/ebean/ebean-12.11.5/agent/ebean-agent-12.12.0.jar"
   />
   <target name="ebeanEnhance">
        <ebeanEnhanceTask classSource="./out/production/groovyutil" packages="com.domain.my.*" transformArgs="debug=1" />
       <ebeanEnhanceTask classSource="./out/production/groovysql" packages="com.domain.my.*" transformArgs="debug=1" />
       <ebeanEnhanceTask classSource="./out/production/groovydomino" packages="com.domain.my.*" transformArgs="debug=1" />
       <ebeanEnhanceTask classSource="./out/production/groovydomino_legacy" packages="com.domain.my.*" transformArgs="debug=1" />
       <ebeanEnhanceTask classSource="./out/production/groovyldap" packages="com.domain.my.*" transformArgs="debug=1" />
        <ebeanEnhanceTask classSource="./out/production/groovyebean" packages="com.domain.my.*" transformArgs="debug=1" />
       <ebeanEnhanceTask classSource="./out/production/groovyvaadin" packages="com.domain.my.*" transformArgs="debug=1" />
        <ebeanEnhanceTask classSource="./out/production/groovyidh_vaadin_ebean" packages="com.domain.my.*" transformArgs="debug=1" />
        <ebeanEnhanceTask classSource="./out/test/groovysql" packages="com.domain.my.*" transformArgs="debug=1" />
       <ebeanEnhanceTask classSource="./out/test/groovyutil" packages="com.domain.my.*" transformArgs="debug=1" />
       <ebeanEnhanceTask classSource="./out/test/groovyvaadin" packages="com.domain.my.*" transformArgs="debug=1" />
    </target>    
</project>

XC

unread,
Oct 6, 2021, 6:36:35 PM10/6/21
to Ebean ORM
Update: Upgrading Ebean to 12.12.1 and applying the ANT ebeanEnhance task to an artifact (./out/artifact/... instead of  . /out/ production/... => we have only one  <ebeanEnhanceTask ...> term in the ANT script, since all package paths are under the same root directory) alas leads to the same error...

XC

unread,
Oct 6, 2021, 6:42:44 PM10/6/21
to Ebean ORM
Update 2: Disassembling the resulting classes on disk, they have definitely been enhanced.
Message has been deleted

XC

unread,
Oct 24, 2021, 7:26:25 PM10/24/21
to Ebean ORM
We are still stuck at this point. We would prefer to use the old approach, since it has worked very well in the past: Once the class files on disk are enhanced, we can deploy them etc, and can be sure that everything will work as expected. 
Contrary to that, in the new approach we have (at least) 3 different scenarios to take care of and keep up to date:
  1. Enhancing in for execution from IntelliJ (e.g. tests and scripts)
  2. Enhancing for web deployment (currently Tomcat) - the way Tomcat deployment is done in our organization does not add itself well to having to call a JAR in a specific deployed web application to do the enhancement
  3. Executing Groovy non-web applications and scripts

Reply all
Reply to author
Forward
0 new messages