У меня есть 2 ejbs.Ejb-A, который вызывает Ejb-B.Они не в одном ухе.
Для переносимости Ejb-B может существовать или не существовать на одном сервере.(Существует внешний файл свойств с URL-адресами поставщика Ejb-B. Я не могу это контролировать.)
Пример кода: в Ejb-A
EjbBDelegate delegateB = EjbBDelegateHelper.getRemoteDelegate(); // lookup from list of URLs from props...
BookOfMagic bom = delegateB.getSomethingInteresting();
Использовать случаи / результаты :
- Когда Ejb-B НЕ СУЩЕСТВУЕТ на том же сервере, что и Ejb-A, все работает правильно.(он циклически перебирает URL-адреса)
- Когда Ejb-B EXIS EXIST на том же сервере, и Ejb-A вызывает Ejb-B на том же сервере, все работает правильно.
- Когда Ejb-B СУЩЕСТВУЕТ на одном сервере, а Ejb-A вызывает Ejb-B на другом сервере, я получаю:
javax.ejb.EJBException: вложенное исключение: java.lang.ClassCastException: $ Proxy126 java.lang.ClassCastException: $ Proxy126
Я использую Weblogic 10.0, Java 5, EJB3
По сути, если Ejb-B существует на сервере, он должен вызываться ТОЛЬКО на этом сервере.
Что наводит меня на мысль, что класс загружается локальным загрузчиком классов (при развертывании?), Затем при удаленном вызове его загружает другой загрузчик классов.(вызывая Исключение) Но это должно работать, как это должно быть Сериализовано в загрузчик классов назначения ...
Что я делаю не так ??
Кроме того, при локальном воспроизведении Ejb-A предпочитает Ejb-B на том же сервере, поэтому его было сложно воспроизвести.Но на других машинах это было не так.
ПРИМЕЧАНИЕ. Это все работало правильно для EJB2