2012-04-23 2 views
1

У меня есть 2 проекта:Как разделить класс Entity между клиентом и сервером?

1) Клиент - Android
2) Сервер - Google App Engine

На стороне сервера у меня есть класс сущностей, который называется, как Профиль.
Я включил его в путь сборки клиента в проект сервера. Я создаю новый экземпляр профиля в клиенте, который отправляет его на сервер и сохраняет его в 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

Как вы отправляете объект данных туда и обратно? Вы используете RMI? –

+0

Нет RMI. Я сериализую объекты. – Rami

ответ

1

Я хотел бы использовать не-бинарный формат для транспортировки данных, таких как JSON или XML. Попытка использовать двоичную сериализацию приведет к головным болям, даже если вы устраните проблему с контентом сборки и даже используете более простые «транспортные» объекты bean. Например, если вы хотите обмануть клиента или сервера, вы должны держать их в совершенстве в синхронизации (JAR), вы не можете использовать старый клиент для связи с новым сервером (или наоборот) без LOT Дополнительная работа. Но, используя JSON или XML, клиент и сервер могут развиваться несколько независимо.

Работа с XML или JSON на Android очень проста, такая же для Java EE (сервер).

+0

Возможно, это лучший способ решить мою проблему, спасибо – Rami

0

В моем случае у нас есть много спящих объектов. Вы не можете отправить эти объекты клиенту по разным причинам. Вы в одной лодке.

В моих проектах я создаю отдельные простые компоненты, используемые для переноса данных между сервером и клиентом. Затем есть код для перевода с внутренних объектов на эти внешние переносимые, сериализуемые объекты и обратно. Раньше мы использовали RMI для отправки этих объектов взад и вперед. В эти дни мы используем гессиан.

Вы должны поместить эти классы в отдельный проект, чтобы вы могли иметь как клиент, так и сервер в своем пути к классам.

0

Вам нужно поместить классы Entity в банку и распространить ту же версию банки на сервер и на клиент. Хотя десериализации объектов виртуальная машина будет проверять, если они принадлежат к одной и той же версии класса, используя serialVersionUID

Лучше, если в какой-либо Сущности вы объявляете serialVersionUID

+0

Если это новое приложение, вам не нужно генерировать serialVersionUID. Просто установите его в 1L. Если вы уже развернули это для клиентов и должны оставаться совместимыми с ними, вам нужно запустить serialver, чтобы получить этот номер и установить его на этот номер. –

+0

Спасибо за ваш комментарий, я заменил «generate» на «declare» – Teg

+0

. Я все еще получаю: проект не был построен, так как его путь сборки неполный. Не удается найти файл класса для javax.jdo.spi.PersistenceCapable. Тип javax.jdo.spi.PersistenceCapable не может быть разрешен. Это косвенно ссылается на требуемые .class файлы – Rami

Смежные вопросы