我有2个项目:
1)客户端 - Android
2)服务器 - Google App Engine
在服务器端,我有类实体,称为配置文件 我把它包含在服务器项目的客户端的buildpath中。 我正在客户端创建一个新的配置文件实例,将其发送到服务器并将其存储在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来解决这个问题?如果不是我会感谢其他解决方案附带的好教程。
答案 0 :(得分:1)
我会使用非二进制格式来传输数据,例如JSON或XML。尝试使用二进制序列化会导致头痛,即使您解决了构建路径问题,即使您使用更简单的“传输”bean对象。例如,当你想要udpate客户端或服务器时,你必须保持它们完全同步(JAR),你不能让旧客户端与新服务器通信(反之亦然)没有很多额外的工作。但是通过使用JSON或XML,客户端和服务器可以在某种程度上独立发展。
在Android上使用XML或JSON非常简单,对于Java EE(服务器)也是如此。
答案 1 :(得分:0)
在我的例子中,我们有很多hibernate对象。由于各种原因,您无法将这些对象发送到客户端。你在同一条船上。
在我的项目中,我创建了用于在服务器和客户端之间传输数据的单独的简单bean。然后还有用于从内部对象转换到这些外部可移植,可序列化对象和返回的代码。我们曾经使用RMI来回发送这些对象。这些天我们使用Hessian。
您可以将这些类放在一个单独的项目中,这样您就可以让客户端和服务器在类路径中都有它们。
答案 2 :(得分:0)
您需要将Entity类放在jar中,并将相同版本的jar分发到服务器和客户端。 在反序列化对象时,JVM将使用serialVersionUID检查它们是否属于同一版本的类
如果在任何实体中声明serialVersionUID
,则更好