2011-11-10 3 views
1

新しいEJBプロジェクトでHibernateからJPA2に移行するときにこのような問題があります。JPA2 1対多シリアライゼーション例外

ステートレスBeanでは、ProductItemである親クラスインスタンスをフェッチし、TypeItemの一方向の1対多の関係で取得します。それはデータベースから完全に抽出された、私はそれをサーバーのログで見たが、ステートレスBeanメソッドからProductTypeエンティティを返すと、クライアントが突然例外を発生してクラッシュする。 OK。 firshで私はこの関係を制止し、それらの各部分はサーバーからクライアントに正常に渡されます。後半、私はそのような構造を生成する偽の方法を作りましたが、データベースからは取り出されませんでした...そしてそれは機能します!

1対多の関係を持つデータベースエンティティからフェッチされているため、システムがダウンすることはありません。 BTW。私は、持続性プロバイダとしてglassfish 3.1.1とhibernate 3.5.0を使用します。

ここで少しコードがあります。私は初心者のためにゲッターとセッターをスキップします。 これは、親クラスである:(BTW不良名)

@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

@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ライブラリを含んでいなかったことです。これは、HibernateがSet、BagのようなエンティティのプロパティをPersistentSetのような自身のCounterpartに内部的にキャストするためです。

遠隔で渡されたエンティティからhibernateを削除するもう1つのポイントは、リモートクライアントに休止状態を知る必要はないはずです。 http://www.guj.com.br/java/251468-resolvido-problema-em-ejb-ao-retornar-objeto-recuperado-do-banco

2日間検索した後、私はこのフォーラムでそれを見つけました
関連する問題