1

私は2つのプロジェクトを持っています:

1) クライアント - Android
2) サーバー - Google App Engine

サーバー側には、 Profileと呼ばれるクラス Entity があります。
クライアントサーバープロジェクトのビルドパスに含めました。クライアントでプロファイルの新しいインスタンスを作成してサーバーに送信し、JPA DB に保存しています。
特定の時間後にサーバー側で、サーバーベクターからサーバー内のすべてのクライアントをユーザーに送信します。

問題は次のとおりです。

プロファイルのビルド パスを追加すると、次のようになります。

The project was not built since its build path is incomplete. Cannot find the class file for javax.jdo.spi.PersistenceCapable. 
The type javax.jdo.spi.PersistenceCapable cannot be resolved. It is indirectly referenced from required .class files

したがって、クライアントにjdo2-api-2.3-eb.jar. そして問題は消えたようです。しかし、実行時にプロファイル ベクトルをサーバーからクライアントに送信すると、次のようになります。

 java.io.InvalidClassException: javax.jdo.identity.LongIdentity; Incompatible class (SUID): javax.jdo.identity.LongIdentity: static final long serialVersionUID =2472141538875317527L; but expected javax.jdo.identity.LongIdentity: static final long serialVersionUID =2940818939440220368L; 

私が追加したことが原因だと私は信じてい jdo2-api-2.3-eb.jarます。

だから私はこれを正しく行う方法を尋ねていますか?Maven または Ant がこの問題を解決できることは理解していますが、非常に面倒です。これを解決するために基本的なEclipseを使用するだけの古い方法はありますか? そうでない場合は、優れたチュートリアルに付属する他のソリューションに感謝します。

4

3 に答える 3

1

データの転送には、JSON や XML などの非バイナリ形式を使用します。バイナリ シリアライゼーションを使用しようとすると、たとえビルド パスの問題が解決されたとしても、さらに単純な「トランスポート」Bean オブジェクトを使用したとしても、頭痛の種になります。たとえば、クライアントまたはサーバーのいずれかを更新する場合、完全に同期 (JAR) を維持する必要があります。残業。しかし、JSON または XML を使用することで、クライアントとサーバーはある程度独立して進化できます。

Android での XML または JSON の操作は非常に簡単で、Java EE (サーバー) の場合も同様です。

于 2012-04-23T19:04:44.680 に答える
0

私の場合、休止状態のオブジェクトがたくさんあります。さまざまな理由により、これらのオブジェクトをクライアントに送信することはできません。あなたは同じ船に乗っています。

私のプロジェクトでは、サーバーとクライアント間でデータを転送するために使用される個別の単純なBeanを作成します。次に、内部オブジェクトからこれらの外部のポータブルでシリアル化可能なオブジェクトに変換したり、元に戻したりするためのコードもあります。以前は、RMIを使用してこれらのオブジェクトを送受信していました。最近はヘシアンを使用しています。

これらのクラスを別のプロジェクトに配置して、クライアントとサーバーの両方がそれらをクラスパスに含めることができるようにします。

于 2012-04-23T12:47:48.003 に答える
0

Entity クラスを jar に入れ、同じバージョンの jar をサーバーとクライアントに配布する必要があります。オブジェクトをデシリアライズする際、JVM はそれらが serialVersionUID を使用して同じバージョンのクラスに属しているかどうかをチェックします。

任意のエンティティでserialVersionUIDを宣言する方が良い

于 2012-04-23T13:01:08.757 に答える