Эта проблема несколько сложна, и я немного над головой. Я постараюсь описать его максимально кратко.
У меня есть приложение J2EE, которое работает на Glassfish v2 и использует сообщения CCD, используя реализацию EMF (МДГТ). Когда это вызывается из веб-сервиса, который вызывает EJB, он работает отлично и работает уже более года. Недавно у нас была причина вызвать это из WAR, тестовый случай — это пользователь, загружающий тот же файл, который обычно отправляется через веб-сервис. Когда вызываем это из ВОА, то не работает, ЭДС EPackage.Registry
пустая!
Когда мы вызываем это из WAR, WAR получает экземпляр сеансового компонента EJB и просто вызывает EJB. Мы хотим сохранить в EJB как можно больше логики, чтобы не дублировать код.
Основано на обсуждении списка пользователей MDHT Меня заставили поверить, что это скорее проблема EMF, чем проблема MDHT, и она связана с тем, какой загрузчик классов используется.
Библиотеки MDHT и EMF упакованы в EJB JAR и видны загрузчику классов EJB.
Я пробовал несколько обходных путей и точек, чтобы сузить эту проблему:
- переместил JAR-файлы, чтобы увидеть, не связано ли это с тем, что загрузчик классов не может видеть библиотеки MDHT
- Проверено в отладчике, чтобы увидеть, какие загрузчики классов используются при заполнении реестра.
- Копался в EMF и искал
ClassNotFoundExceptions
- Установите точку останова для ведения журнала, чтобы увидеть, какой загрузчик классов используется при заполнении реестра. Кажется, он использует загрузчик классов EJB, как и ожидалось.
Существуют ли какие-либо известные или общие случаи использования, когда реализация EMF будет вести себя по-другому при вызове из WAR вместо EJB?
Это действительно проблема EMF или это более общая проблема, когда WAR вызывает EJB?
Какие еще шаги по отладке следует предпринять, чтобы изолировать и определить основную причину этой проблемы?