2012-04-23 2 views
1

私は2プロジェクトを持っています。
私はそれをサーバープロジェクトのクライアントのbuildpathに含めました。 クライアントにプロファイルを新規に作成し、それをサーバーに送信してJPA DBに保管しています。
サーバー側 特定の時間が経過した後、サーバー内のすべてのクライアントをサーバーベクトルからユーザーに送信します。クライアントとサーバーの間でクラスエンティティを共有する方法はありますか?私は<strong>プロフィール</strong>と呼ばれるクラスのエンティティを持っているサーバ側ではGoogle App Engineの</p> <p>- サーバ)<br> 2アンドロイド -</p> <p>1)クライアント:

の問題がある:

私は私が得るプロファイルのビルド・パス追加している:クライアントでそう

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を使用するだけで古い方法はありますか?そうでなければ、私は良いチュートリアルに付随する他の解決策に感謝します。

+0

どのようにデータオブジェクトを送りますか? RMIを使用していますか? –

+0

RMIはありません。私はオブジェクトをシリアライズしています。 – Rami

答えて

1

を宣言した場合、JVMがチェックされますデータ(JSONやXMLなど)。バイナリシリアライゼーションを使用しようとすると頭痛に繋がります。ビルドパスの問題が解決されても、さらに単純な "トランスポート" Beanオブジェクトを使用したとしてもです。たとえば、クライアントまたはサーバーのいずれかをudpする場合は、それらを完全に同期させておく必要があります(JAR)。古いクライアントを新しいサーバーと通信することはできません(またはその逆)。残業。しかし、JSONやXMLを使用することで、クライアントとサーバーはいくらか独立して進化することができます。

AndroidでXMLまたはJSONのいずれかを操作することは、Java EE(サーバー)と同じように非常に簡単です。

+0

おそらくこれが最良の方法です私の問題を解決するために、ありがとう – Rami

0

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

私のプロジェクトでは、サーバーとクライアント間でデータを転送するために使用される別の単純なBeanを作成します。内部オブジェクトから移植可能なシリアライズ可能なオブジェクトの外部に翻訳して戻すコードもあります。これらのオブジェクトを前後に送信するためにRMIを使用しました。最近では、ヘッセ行列を使用しています。

これらのクラスを別々のプロジェクトに配置すると、クライアントとサーバーの両方にクラスパスを持たせることができます。

0

エンティティクラスをjarファイルに入れ、同じバージョンのjarファイルをサーバーとクライアントに配布する必要があります。 オブジェクトをデシリアライズしながら、彼らがより良いserialVersionUIDの

を使用して、クラスの同じバージョンに属している場合は任意のエンティティにあなたは私が輸送するための非バイナリ形式を使用しますserialVersionUID

+0

これは新しいアプリの場合、実際にはserialVersionUIDを生成する必要はありません。ただ1Lに設定してください。これをすでにクライアントにデプロイしていて互換性を維持する必要がある場合は、この番号を取得するためにserialverを実行して、この番号に設定する必要があります。 –

+0

ご意見ありがとうございます。私は "生成"を "宣言"に置き換えました – Teg

+0

私はまだ手に入ります:ビルドパスが不完全なのでプロジェクトはビルドされませんでした。 javax.jdo.spi.PersistenceCapableのクラスファイルが見つかりません。 javax.jdo.spi.PersistenceCapableタイプは解決できません。要求された.classファイルから間接参照される – Rami

関連する問題

 関連する問題