ManyToMany read past end of file
aneh Apr 29, 2012 6:58 AMUnusually I cannot find anything on the web refering to this issue so I am at a loss as to a starting point to try and understand what is going on.
I am using 7.1.1.Final, Eclipse Indigo (windows), JBoss Tools 3.3.3
So the situation I have two Entity Beans Activity and Resource there are two ManyToMany associations between Activity and Resource. Prior to adding these associations the JPA archive deployed and executed as expected so I am sure (mostly) that it is the introduction of these two new associations that is causing the problem.
The Activity class is the owner of both of the associations
@Entity (name="Activity")
@Table (name="Activity", schema="Istana")
public class JpaActivity
implements Activity, Serializable
{
private String m_oid;
private List<Resource> m_consumers;
private List<Resource> m_producers;
@Column (name="oid")
@Id
@Override
public String getOid()
{
return m_oid;
}
protected void setOid(String oid)
{
m_oid = oid;
}
@ManyToMany (targetEntity=JpaResource.class,cascade=CascadeType.ALL)
@JoinTable (name="activity_consumer_resource"
,joinColumns={@JoinColumn(name="activity_oid",referencedColumnName="oid")}
,inverseJoinColumns={@JoinColumn(name="resource_oid",referencedColumnName="oid")}
)
@Override
public List<Resource> getConsumers()
{
return m_consumers;
}
protected void setConsumers(List<Resource> consumers)
{
m_consumers = consumers;
}
@ManyToMany(targetEntity=JpaResource.class,cascade=CascadeType.ALL)
@JoinTable (name="activity_producer_resource"
,joinColumns={@JoinColumn(name="activity_oid",referencedColumnName="oid")}
,inverseJoinColumns={@JoinColumn(name="resource_oid",referencedColumnName="oid")}
)
@Override
public List<Resource> getProducers()
{
return m_producers;
}
protected void setProducers(List<Resource> producers)
{
m_producers = producers;
}
}
@Entity (name="Resource")
@Table (name="Resource", schema="Istana")
abstract
public class JpaResource
implements Resource, Serializable
{
private String m_oid;
private Set<Activity> m_consumerActivitys;
private Set<Activity> m_producerActivitys;
@Column (name="oid")
@Id
@Override
public String getOid()
{
return m_oid;
}
protected void setOid(String oid)
{
m_oid = oid;
}
@ManyToMany (targetEntity=JpaActivity.class,fetch=FetchType.EAGER,mappedBy="consumers")
@Override
public Set<Activity> getConsumerActivitys()
{
return m_consumerActivitys;
}
protected void setConsumerActivitys(Set<Activity> consumerActivitys)
{
m_consumerActivitys = consumerActivitys;
}
@ManyToMany (targetEntity=JpaActivity.class,fetch=FetchType.EAGER,mappedBy="producers")
@Override
public Set<Activity> getProducerActivitys()
{
return m_producerActivitys;
}
protected void setProducerActivitys(Set<Activity> producerActivitys)
{
m_producerActivitys = producerActivitys;
}
}
When I attempt to execute the following "Select a FROM Activity a" I get the following stack dump
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
at $Proxy0.getActivitys(Unknown Source)
at com.istana.schedule.session.jee.JeeManager.getActivitys(JeeManager.java:54)
at com.istana.schedule.session.sui.ActivityPanel.init(ActivityPanel.java:45)
at com.istana.schedule.session.sui.ActivityPanel.<init>(ActivityPanel.java:40)
at com.istana.schedule.session.sui.Main.createPage(Main.java:34)
at com.istana.panticon.client.sui.SuiSiteFactory.createSite(SuiSiteFactory.java:28)
at com.istana.schedule.session.sui.Main.main(Main.java:50)
Caused by: java.io.EOFException: Read past end of file
at org.jboss.marshalling.SimpleDataInput.eofOnRead(SimpleDataInput.java:126)
at org.jboss.marshalling.SimpleDataInput.readUnsignedByteDirect(SimpleDataInput.java:263)
at org.jboss.marshalling.SimpleDataInput.readUnsignedByte(SimpleDataInput.java:224)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
at org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1677)
at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1593)
at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1557)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1235)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:272)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
at org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1677)
at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1593)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1235)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:272)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadCollectionObject(RiverUnmarshaller.java:180)
at org.jboss.marshalling.river.RiverUnmarshaller.readCollectionData(RiverUnmarshaller.java:771)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:649)
at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:37)
at org.jboss.ejb.client.remoting.MethodInvocationResponseHandler$MethodInvocationResultProducer.getResult(MethodInvocationResponseHandler.java:107)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:270)
at org.jboss.ejb.client.TransactionInterceptor.handleInvocationResult(TransactionInterceptor.java:47)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:272)
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocationResult(ReceiverInterceptor.java:132)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:260)
at org.jboss.ejb.client.EJBClientInvocationContext.awaitResponse(EJBClientInvocationContext.java:399)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:140)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121)
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104)
... 7 more
Caused by: an exception which occurred:
in field storedSnapshot
in object of type org.hibernate.collection.internal.PersistentBag
in field m_consumers
in object of type com.istana.schedule.feature.jpa.JpaActivity
in element at index [0] of size [4]
Note I have [4] Activity records in the database and the stack dump occurs when calling and returning the [0] Activity and presumeably the persistence manager is attempting to initialise the m_consumers field in Activity via the setConsumers() method. The return error is "Caused by: java.io.EOFException: Read past end of file" which I assume refers to the ManyToMany association but I am unsure how this relates and/or how I can instrument the application inorder to discover what is really going on.
Some pointer, hints, or scrying would be muchly appreciated.
@JoinTable (name="activity_consumer_resource"
,joinColumns={@JoinColumn(name="activity_oid",referencedColumnName="oid")}
,inverseJoinColumns={@JoinColumn(name="resource_oid",referencedColumnName="oid")}
)
@Override
public List<Resource> getConsumers()
{
return m_consumers;
}
protected void setConsumers(List<Resource> consumers)
{
m_consumers = consumers;
}
/* (non-Javadoc)
* @see com.istana.schedule.feature.Activity#getProducers()
*/
@ManyToMany(targetEntity=JpaResource.class,cascade=CascadeType.ALL)
@JoinTable (name="activity_producer_resource"
,joinColumns={@JoinColumn(name="activity_oid",referencedColumnName="oid")}
,inverseJoinColumns={@JoinColumn(name="resource_oid",referencedColumnName="oid")}
)
@Override
public List<Resource> getProducers()
{
return m_producers;
}