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 来回发送这些对象。这些天我们使用Hessian。

您可以将这些类放在一个单独的项目中,这样您就可以让客户端和服务器都将它们放在它们的类路径中。

于 2012-04-23T12:47:48.003 回答
0

您需要将实体类放在一个 jar 中,并将相同版本的 jar 分发到服务器和客户端。在反序列化对象时,JVM 将使用 serialVersionUID 检查它们是否属于同一版本的类

如果在任何实体中声明serialVersionUID会更好

于 2012-04-23T13:01:08.757 回答