2010-11-15 5 views
1

Я работаю app1.ear, содержащий:несколько Уши, JPA и интерфейсы

  • JPA сущность, MyObjectImpl, в реализации интерфейса MyObject от api.jar
  • апи. jar с Интерфейс MyObject и EJB Удаленный интерфейс
  • ejb.jar с EJBs предоставления методов доступа и изменения JPA сущностей

Second app2.ear должен общаться с app1.ear используя только интерфейсы в api.jar. Все отлично работает при передаче базовых типов Java между ушами. Но когда app2.ear пытается извлечь из app1.ear экземпляр MyObject - CORBA МАРШАЛ возбуждается исключение, говоря, что MyObjectImpl класс не может быть найдено:

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

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

PS: GF Сервера 3.0.1, не GF конкретных дескрипторов развертывания, оба уха, работающее на одной и тот же виртуальную машину Java

ответ

1

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

+0

моей главной задачей является скрыть аннотации JPA. возможно ли так: MyObjectImpl реализует MyObject, MyObjectJPA расширяет (просто комментирует) MyObjectImpl, имея MyObject и MyObjectImpl для других ушей? Будет ли десериализация контейнера MyObjectJPA в MyObjectImpl? Не могу поверить, что нельзя скрывать аннотацию JPA от клиентов. – Osw