2011-11-10 72 views
1

在新EJB項目中從Hibernate遷移到JPA2時,我有這樣的問題。JPA2一對多序列化異常

在無狀態bean中,我獲取一個父類實例,該實例的名稱爲ProductType,具有TypeItems的單向一對多關係。它完全從數據庫中提取出來,我在服務器日誌中看到它,但是當我從無狀態bean方法返回ProductType實體時,客戶端突然崩潰而異常。好。在第一時間,我制止了這種關係,並且他們的每個部分都成功地從服務器傳遞到了客戶端。後期我做了一個假的方法,它產生了這樣的結構,但沒有從數據庫中提取出來......它起作用了!

我真的不知道爲什麼通過一對多關係從數據庫實體中獲取將我的系統關閉。 順便說一句。我使用glassfish 3.1.1和hibernate 3.5.0作爲持久性提供者。

現在有點代碼。我會跳過吸氣者和制定者的原始。 這是父類:

@Entity 
@Table(name = "product_types") 
@XmlRootElement 
public class ProductType implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "type_id") 
    private Integer typeId; 
    @Basic(optional = false) 
    @Column(name = "type_name") 
    private String typeName; 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinColumn(name="type_id") 
    private Set<TypeItem> typeItems = new HashSet<TypeItem>(); 


    public Set<TypeItem> getTypeItems() { 
     return typeItems; 
    } 


    public void setTypeItems(Set<TypeItem> items) { 
     this.typeItems = new HashSet<TypeItem>(items); 
    } 
} 

和TypeItem(壞名聲BTW)

@Entity 
@Table(name = "types_list") 
@XmlRootElement 
public class TypeItem implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id") 
    private Integer id; 
    @Basic(optional = false) 
    @Column(name = "type_name") 
    private String typeName; 
    @Basic(optional = false) 
    @Column(name = "type_translation") 
    private String typeTranslation; 
    @Basic(optional = false) 
    @Column(name = "type_var") 
    private String typeVar; 
    @Basic(optional = false) 
    @Column(name = "type_measure") 
    private String typeMeasure; 
    @Basic(optional = false) 
    @Column(name = "type_id") 
    private int typeId; 

}

和例外是:

10.11.2011 21:52:45 com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator handleFullLogging 
WARNING: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream 
org.omg.CORBA.MARSHAL: WARNING: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248) 
    at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95) 
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387) 
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107) 
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511) 
    at com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99) 
    at $Proxy24.valuehandlerReadException(Unknown Source) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1022) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123) 
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531) 
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:384) 
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readResult(DynamicMethodMarshallerImpl.java:483) 
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:203) 
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152) 
    at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:227) 
    at hameleon.session.productmanagement.__ProductTypeManagerRemote_Remote_DynamicStub.getProductType(hameleon/session/productmanagement/__ProductTypeManagerRemote_Remote_DynamicStub.java) 
    at hameleon.session.productmanagement._ProductTypeManagerRemote_Wrapper.getProductType(hameleon/session/productmanagement/_ProductTypeManagerRemote_Wrapper.java) 
    at hameleonclient.HameleonClient.main(HameleonClient.java:34) 
Caused by: java.lang.NullPointerException 
    at com.sun.corba.ee.impl.orbutil.ClassInfoCache$ClassInfo.<init>(ClassInfoCache.java:156) 
    at com.sun.corba.ee.impl.orbutil.ClassInfoCache.get(ClassInfoCache.java:281) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1097) 
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:2162) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2404) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1224) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:425) 
    at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:308) 
    at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015) 
    ... 10 more 
Exception in thread "main" javax.ejb.EJBException: java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is: 
    org.omg.CORBA.MARSHAL: WARNING: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe 
    at hameleon.session.productmanagement._ProductTypeManagerRemote_Wrapper.getProductType(hameleon/session/productmanagement/_ProductTypeManagerRemote_Wrapper.java) 
    at hameleonclient.HameleonClient.main(HameleonClient.java:34) 
Caused by: java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is: 
    org.omg.CORBA.MARSHAL: WARNING: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe 
    at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:267) 
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:213) 
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152) 
    at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:227) 
    at hameleon.session.productmanagement.__ProductTypeManagerRemote_Remote_DynamicStub.getProductType(hameleon/session/productmanagement/__ProductTypeManagerRemote_Remote_DynamicStub.java) 
    ... 2 more 
Caused by: org.omg.CORBA.MARSHAL: WARNING: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248) 
    at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95) 
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387) 
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107) 
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511) 
    at com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99) 
    at $Proxy24.valuehandlerReadException(Unknown Source) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1022) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123) 
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531) 
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:384) 
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readResult(DynamicMethodMarshallerImpl.java:483) 
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:203) 
    ... 5 more 
Caused by: java.lang.NullPointerException 
    at com.sun.corba.ee.impl.orbutil.ClassInfoCache$ClassInfo.<init>(ClassInfoCache.java:156) 
    at com.sun.corba.ee.impl.orbutil.ClassInfoCache.get(ClassInfoCache.java:281) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1097) 
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:2162) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2404) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1224) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:425) 
    at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:308) 
    at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015) 
    ... 10 more 
Java Result: 1 

UPD。我繼續研究並通過屬性複製由entityManager.find()返回的新對象屬性中的對象。它的工作原理!錯誤/功能還是我個人誤解的J2EE?

對不起,英語不好。

回答

1

我得到了完全相同的錯誤使用休眠,這可能是在JPA2類似。

問題是我的遠程客戶端沒有包含必要的hibernate庫,這是必需的,因爲hibernate在內部將像Set,Bag這樣的實體的屬性轉換爲像PersistentSet這樣的自己的對象。

還有一點要從遠程傳遞的實體中刪除hibernate,因爲在我的遠程客戶端中根本不需要知道hibernate!

搜索了兩天後,我發現它在這個論壇: http://www.guj.com.br/java/251468-resolvido-problema-em-ejb-ao-retornar-objeto-recuperado-do-banco