несколько EAR, JPA и интерфейсов

У меня есть работающий app1.ear, содержащий:

  • Сущность JPA, MyObjectImpl, реализация интерфейса MyObject из api.jar
  • api.jar с интерфейсом MyObject и интерфейсом EJB Remote
  • ejb.jar с компонентами EJB, предоставляющими методы для доступа и изменения объектов JPA.

Второй app2.ear должен взаимодействовать с app1.ear, используя ТОЛЬКО интерфейсы в api.jar. Все работает нормально при передаче базовых типов Java между ушами. Но когда app2.ear пытается получить из app1.ear экземпляр MyObject, возникает исключение CORBA MARSHAL, сообщающее, что MyObjectImpl< /em> класс не может быть найден:

"IOP00810257: (MARSHAL) Could not load class com.zzz.MyObjectImpl"

Размещение MyObjectImpl в app2.ear решает проблему, но я не хочу раскрывать реализацию JPA другим приложениям уха. Я что-то упустил или мой подход неверен? Посоветуйте что делать или куда копать. Спасибо заранее!

PS: Server GF 3.0.1, нет специфичных для GF дескрипторов развертывания, оба уха работают на одной и той же JVM.


person andbi    schedule 15.11.2010    source источник


Ответы (1)


Классы реализации требуются во время десериализации. Другим подходом может быть использование XML, JSON или protobuff, если вы не хотите раскрывать классы реализации.

person Aravind Yarram    schedule 15.11.2010
comment
моя главная задача - скрыть аннотации JPA. возможно ли это таким образом: MyObjectImpl реализует MyObject, MyObjectJPA расширяет (просто аннотирует) MyObjectImpl, имея MyObject и MyObjectImpl доступными для других ушей? Будет ли контейнер десериализовать MyObjectJPA в MyObjectImpl? Не могу поверить, что нет способа скрыть аннотацию JPA от клиентов. - person andbi; 15.11.2010