[2.0.3 - java] Error reading annotations for models.xxx

1,811 views
Skip to first unread message

Jay Q.

unread,
Aug 20, 2012, 9:23:22 AM8/20/12
to play-fr...@googlegroups.com
During development, I run play like this:

play ~run

I used to can just modify the source and save then refresh browser and all my changes would take effect immediately. Now when I update even just a *.scala.html file and try to do a refresh I get an exception and need to restart the entire server before I can see my changes. This only just started happening today on v2.0.2. I updated to v2.0.3 hoping it would fix problem but had no luck. Other than that my app works just fine. Play has spoiled me that it's now frustrating to have to restart the server on each change. :\


[info] Compiling 1 Scala source to /Users/jay/Documents/projects/java/networking/target/scala-2.9.1/classes...
[success] Compiled in 729ms

--- (RELOAD) ---

[error] c.a.e.s.d.BeanDescriptorManager - Error in deployment
java.lang.RuntimeException: Error reading annotations for models.Order
at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:73) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1100) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:630) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:277) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.core.InternalConfiguration.<init>(InternalConfiguration.java:150) [ebean.jar:na]
at com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:209) [ebean.jar:na]
Caused by: java.lang.RuntimeException: Error with association to [class models.Member] from [models.Order.member]. Is class models.Member registered?
at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.readOneToOne(AnnotationAssocOnes.java:208) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.readAssocOne(AnnotationAssocOnes.java:86) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.parse(AnnotationAssocOnes.java:73) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:64) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1100) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:630) ~[ebean.jar:na]
[error] application - 

! @6bdbid1f8 - Internal server error, for request [GET /admin/members] ->

play.api.UnexpectedException: Unexpected exception [RuntimeException: Error reading annotations for models.Order]
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3$$anonfun$1.apply(ApplicationProvider.scala:134) ~[play_2.9.1.jar:2.0.3]
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3$$anonfun$1.apply(ApplicationProvider.scala:112) ~[play_2.9.1.jar:2.0.3]
at scala.Option.map(Option.scala:133) ~[scala-library.jar:0.11.3]
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3.apply(ApplicationProvider.scala:112) ~[play_2.9.1.jar:2.0.3]
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3.apply(ApplicationProvider.scala:110) ~[play_2.9.1.jar:2.0.3]
at scala.Either$RightProjection.flatMap(Either.scala:277) ~[scala-library.jar:0.11.3]
Caused by: java.lang.RuntimeException: Error reading annotations for models.Order
at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:73) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1100) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:630) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:277) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.core.InternalConfiguration.<init>(InternalConfiguration.java:150) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:209) ~[ebean.jar:na]
Caused by: java.lang.RuntimeException: Error with association to [class models.Member] from [models.Order.member]. Is class models.Member registered?
at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.readOneToOne(AnnotationAssocOnes.java:208) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.readAssocOne(AnnotationAssocOnes.java:86) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.parse(AnnotationAssocOnes.java:73) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:64) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1100) ~[ebean.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:630) ~[ebean.jar:na]

Sean Brady

unread,
Aug 20, 2012, 10:10:02 AM8/20/12
to <play-framework@googlegroups.com>, play-fr...@googlegroups.com
I have seen something similar. However, running without the tilda should still get you incremental compile and evolutions.  Have you tried just "play run"?

Sent from my mobile device
--
You received this message because you are subscribed to the Google Groups "play-framework" group.
To view this discussion on the web visit https://groups.google.com/d/msg/play-framework/-/au1-gjNnxvwJ.
To post to this group, send email to play-fr...@googlegroups.com.
To unsubscribe from this group, send email to play-framewor...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/play-framework?hl=en.

Jay Q.

unread,
Aug 20, 2012, 10:36:24 AM8/20/12
to play-fr...@googlegroups.com
Yes, I just tried now and I still get the error. :\
To post to this group, send email to play-f...@googlegroups.com.
To unsubscribe from this group, send email to play-framewo...@googlegroups.com.

adel alfar

unread,
Feb 11, 2013, 11:25:14 AM2/11/13
to play-fr...@googlegroups.com
Did any of you found a solution to this problem?  I am getting the same error

 with/without ~ before run....I even compile successfully using play compile....

On Monday, October 22, 2012 8:41:20 AM UTC-5, Thomas Wilson wrote:
If this is any help, the code that chokes the second go around is this:

obj.getClass().isAnnotationPresent(Searchable.class)

This code works find when the application is compile initially, but when it's incrementally compiled thereafter this snippet is the failure point. Searchable is one of the annotations that I created. Nothing special.

adel alfar

unread,
Feb 11, 2013, 11:26:00 AM2/11/13
to play-fr...@googlegroups.com
Oh and I am using play 2.1


On Monday, October 22, 2012 8:41:20 AM UTC-5, Thomas Wilson wrote:
If this is any help, the code that chokes the second go around is this:

obj.getClass().isAnnotationPresent(Searchable.class)

This code works find when the application is compile initially, but when it's incrementally compiled thereafter this snippet is the failure point. Searchable is one of the annotations that I created. Nothing special.

On Monday, 20 August 2012 10:36:24 UTC-4, Jay Q. wrote:

Nilanjan Raychaudhuri

unread,
Feb 11, 2013, 12:40:45 PM2/11/13
to play-fr...@googlegroups.com
Which error? "Error reading annotation" error? maybe it is missing the @Entity annotation?

Nilanjan, Developer & Consultant
Typesafe Inc.
Twitter: @nraychaudhuri

adel alfar

unread,
Feb 11, 2013, 12:59:26 PM2/11/13
to play-fr...@googlegroups.com
I made sure that @Entity is places aove the "Model" classes I have....

! @6dabk34i5 - Internal server error, for (GET) [/] ->

play.api.UnexpectedException: Unexpected exception[RuntimeException: Error reading annotations for models.DriverRegionId]
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$1.apply(ApplicationProvider.scala:142) ~[play_2.10.jar:2.1.0]
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$1.apply(ApplicationProvider.scala:106) ~[play_2.10.jar:2.1.0]
at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:106) ~[play_2.10.jar:2.1.0]
at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:104) ~[play_2.10.jar:2.1.0]
at scala.util.Either$RightProjection.flatMap(Either.scala:523) [scala-library.jar:na]
Caused by: java.lang.RuntimeException: Error reading annotations for models.DriverRegionId
at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:54) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1034) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.createEmbedded(BeanDescriptorManager.java:493) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEmbeddedDeployment(BeanDescriptorManager.java:516) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:249) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.core.InternalConfiguration.<init>(InternalConfiguration.java:124) ~[avaje-ebeanorm-server.jar:na]
Caused by: java.lang.RuntimeException: Error with association to [class models.Driver] from [models.DriverRegionId.driver]. Is class models.Driver registered?
at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.readManyToOne(AnnotationAssocOnes.java:163) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.readAssocOne(AnnotationAssocOnes.java:63) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.parse(AnnotationAssocOnes.java:54) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:45) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1034) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.createEmbedded(BeanDescriptorManager.java:493) ~[avaje-ebeanorm-server.jar:na]



And here are my Classes:

@Embeddable

public class DriverRegionId implements Serializable {

private static final long serialVersionUID = -6004669670091375590L;


@ManyToOne

private Driver driver;


@ManyToOne

private Region region;


public Driver getDriver() {

return driver;

}


public void setDriver(Driver driver) {

this.driver = driver;

}


public Region getRegion() {

return region;

}


public void setRegion(Region region) {

this.region = region;

}


//@Override

public int hashCode() {

int result;

result = (driver != null ? driver.hashCode() : 0);

result = 31 * result + (region != null ? region.hashCode() : 0);

return result;

}


//@Override

public boolean equals(Object o) {

if (this == o)

return true;

if (o == null || getClass() != o.getClass())

return false;


DriverRegionId that = (DriverRegionId) o;


if (driver != null ? !driver.equals(that.driver) : that.driver != null)

return false;

if (region != null ? !region.equals(that.region) : that.region != null)

return false;


return true;

}


}



@Entity

@Table(name = "region_driver")

@AssociationOverrides({

@AssociationOverride(name = "pk.driver"

joinColumns = @JoinColumn(name = "driver_id")),

@AssociationOverride(name = "pk.region"

joinColumns = @JoinColumn(name = "region_id")) })

public class DriverRegion extends BaseModel {

private static final long serialVersionUID = 3233477537300849362L;

private DriverRegionId pk = new DriverRegionId();

@Column(name="is_active")

private boolean isActive;

@EmbeddedId

public DriverRegionId getPk() {

return pk;

}

 

public void setPk(DriverRegionId pk) {

this.pk = pk;

}

 

@Transient

@XmlTransient

public Driver getDriver() {

return getPk().getDriver();

}

 

public void setDriver(Driver driver) {

getPk().setDriver(driver);

}

 

@Transient

@XmlTransient

public Region getRegion() {

return getPk().getRegion();

}

 

public void setRegion(Region region) {

getPk().setRegion(region);

}

 

 

public boolean equals(Object o) {

if (this == o)

return true;

if (o == null || getClass() != o.getClass())

return false;

 

DriverRegion that = (DriverRegion) o;

 

if (getPk() != null ? !getPk().equals(that.getPk())

: that.getPk() != null)

return false;

 

return true;

}

 

public int hashCode() {

return (getPk() != null ? getPk().hashCode() : 0);

}


}


@Entity

@Table(name = "region")

@XmlRootElement

@NamedQueries({

@NamedQuery(name = "Region.findAll", query = "SELECT r FROM Region r"),

@NamedQuery(name = "Region.findById", query = "SELECT r FROM Region r WHERE r.id = :id"),

@NamedQuery(name = "Region.findByName", query = "SELECT r FROM Region r WHERE r.name = :name")

})

public class Region extends BaseModel {

private static final long serialVersionUID = 1569807861428929099L;

public static Finder<Long, Region> find = new Finder<Long, Region>(Long.class, Region.class);

@Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Basic(optional = false)

    @Column(name = "id", nullable = false)

private Long id;


@Basic(optional = false)

    @Column(name = "name", nullable = false, length = 255)

private String name;

//@OneToMany(cascade = CascadeType.ALL, mappedBy = "Region")

@OneToMany(mappedBy = "region")

private List<RrSite> rrSiteList;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.region")

private List<DriverRegion> driverRegions = new ArrayList<DriverRegion>();

public Region() {

}


public Region(Long id) {

this.id = id;

}


public Region(Long id, String name) {

this.id = id;

this.name = name;

}


public Long getId() {

return id;

}


public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}



@Transient

@XmlTransient

public List<RrSite> getRrSiteList() {

return rrSiteList;

}


public void setRrSiteList(List<RrSite> rrSiteList) {

this.rrSiteList = rrSiteList;

}


@Transient

@XmlTransient

public List<DriverRegion> getDriverRegion() {

return driverRegions;

}


public void setDriverRegion(List<DriverRegion> driverRegions) {

this.driverRegions = driverRegions;

}


@Override

public int hashCode() {

int hash = 0;

hash += (id != null ? id.hashCode() : 0);

return hash;

}


@Override

public boolean equals(Object object) {

// TODO: Warning - this method won't work in the case the id fields are not set

if (!(object instanceof Region)) {

return false;

}

Region other = (Region) object;

if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {

return false;

}

return true;

}

}


@Entity

@Table(name = "driver")

@XmlRootElement

//public class Driver extends Model {

public class Driver extends BaseModel {

private static final long serialVersionUID = -2378727866829160641L;

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "id", nullable = false)

private Long id;


@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.driver", cascade=CascadeType.ALL)

private List<DriverRegion> driverRegions = new ArrayList<DriverRegion>(0);


@Transient

@XmlTransient

public List<DriverRegion> getDriverRegion() {

return driverRegions;

}


public void setDriverRegion(List<DriverRegion> driverRegions) {

this.driverRegions = driverRegions;

}

@Override

public int hashCode() {

int hash = 0;

hash += (id != null ? id.hashCode() : 0);

return hash;

}


@Override

public boolean equals(Object object) {

// TODO: Warning - this method won't work in the case the id fields are

// not set

if (!(object instanceof Driver)) {

return false;

}

Driver other = (Driver) object;

if ((this.id == null && other.id != null)

|| (this.id != null && !this.id.equals(other.id))) {

return false;

}

return true;

}

}



@Entity

@Table(name = "region")

@XmlRootElement

@NamedQueries({

@NamedQuery(name = "Region.findAll", query = "SELECT r FROM Region r"),

@NamedQuery(name = "Region.findById", query = "SELECT r FROM Region r WHERE r.id = :id"),

@NamedQuery(name = "Region.findByName", query = "SELECT r FROM Region r WHERE r.name = :name")

})

public class Region extends BaseModel {

private static final long serialVersionUID = 1569807861428929099L;

public static Finder<Long, Region> find = new Finder<Long, Region>(Long.class, Region.class);

@Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Basic(optional = false)

    @Column(name = "id", nullable = false)

private Long id;


@Basic(optional = false)

    @Column(name = "name", nullable = false, length = 255)

private String name;

//@OneToMany(cascade = CascadeType.ALL, mappedBy = "Region")

@OneToMany(mappedBy = "region")

private List<RrSite> rrSiteList;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.region")

private List<DriverRegion> driverRegions = new ArrayList<DriverRegion>();

public Region() {

}


public Region(Long id) {

this.id = id;

}


public Region(Long id, String name) {

this.id = id;

this.name = name;

}


public Long getId() {

return id;

}


public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}



@Transient

@XmlTransient

public List<RrSite> getRrSiteList() {

return rrSiteList;

}


public void setRrSiteList(List<RrSite> rrSiteList) {

this.rrSiteList = rrSiteList;

}


@Transient

@XmlTransient

public List<DriverRegion> getDriverRegion() {

return driverRegions;

}


public void setDriverRegion(List<DriverRegion> driverRegions) {

this.driverRegions = driverRegions;

}


@Override

public int hashCode() {

int hash = 0;

hash += (id != null ? id.hashCode() : 0);

return hash;

}


@Override

public boolean equals(Object object) {

// TODO: Warning - this method won't work in the case the id fields are not set

if (!(object instanceof Region)) {

return false;

}

Region other = (Region) object;

if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {

return false;

}

return true;

adel alfar

unread,
Feb 11, 2013, 1:07:34 PM2/11/13
to play-fr...@googlegroups.com
Here is the constructors for the DriverRegionId class:

public DriverRegionId() {

super();

}


public DriverRegionId(Driver driver, Region region) {

super();

this.driver = driver;

this.region = region;

Nilanjan Raychaudhuri

unread,
Feb 11, 2013, 3:17:22 PM2/11/13
to play-fr...@googlegroups.com
I don't think @EmbeddedId is supported in Play-ebean right now. There is a pull request to fix that.

https://github.com/playframework/Play20/pull/724


Nilanjan, Developer & Consultant
Typesafe Inc.
Twitter: @nraychaudhuri

adel alfar

unread,
Feb 11, 2013, 3:26:29 PM2/11/13
to play-fr...@googlegroups.com
Can you tell me how I can apply the patch to my Play20 local (master) source so I can test my code against it?

Nilanjan Raychaudhuri

unread,
Feb 11, 2013, 3:35:34 PM2/11/13
to play-fr...@googlegroups.com
you really want to do that? Well it looks like an one line change

https://github.com/playframework/Play20/pull/724/files

adel alfar

unread,
Feb 11, 2013, 3:48:07 PM2/11/13
to play-fr...@googlegroups.com
Ok I created I branch and changed the line to include || f.isAnnotationPresent(javax.persistence.EmbeddedId.class)...then ./build...publish-local 

I then added
to my plugins.sbt

addSbtPlugin("play" % "sbt-plugin" % "2.1-SNAPSHOT") 


So now in order to  use this code in my project, what to add to the Build.scala?  

adel alfar

unread,
Feb 11, 2013, 4:18:45 PM2/11/13
to play-fr...@googlegroups.com
OK..after adding :

resolvers += Resolver.file("Local Repository", file("/Users/adel/git/Play20/repository/local"))(Resolver.ivyStylePatterns)

addSbtPlugin("play" % "sbt-plugin" % "2.2-SNAPSHOT")


I still get the same error.....Unless I am not really pointing to my "locally-published"  Play20 source built repo....

Reply all
Reply to author
Forward
0 new messages