2008-09-26 7 views
0

У меня проблемы с миграцией с OC4J 10.1.2.3 до 10.1.3.1.4. Проблема заключается в приложениях с несколькими EJB (все они равны 2.1, EJB 3.0). Jdeveloper возьмет по умолчанию ejb-jar.xml (тот, который требуется Jdeveloper для запуска его на автономном экземпляре OC4J) и упакуйте его в каждый модуль JAR JJB NO MATTER, что. Это приводит к бурению сервера приложений в каждом модуле JJB JAR при развертывании и находит один и тот же файл ejb-jar.xml N раз (где N = количество модулей EJB). Это приводит к дублированию ссылок EJB и разбивает любые запросы JNDI, такие как: «java: comp/env/ejb/EJBName». Таким образом, развертывание приложения с 3 EJB, EJB1, EJB2 и EJB3 заставляет сервер приложений регистрировать 9 EJB вместо 3. Мне нужен способ наилучшей практики, но между тем, как действуют действия 10.1.3.4 и JDeveloper, ситуация довольно dire ...OC4J 10.1.3.4 проблема с развертыванием нескольких 2.1 EJB

Замечание: они будут работать, если код поиска JNDI веб-приложения не применяется к «ejb/EJBName». Однако это нежелательно.

ответ

0

Проблема была множественной ссылкой в ​​наших профилях развертывания. Мы создали профиль развертывания для EACH EACH. Это означало, что каждый EJB имел свой собственный ejb-jar.xml (этот файл содержал описание всех EJBS в проекте). Поэтому каждый раз, когда JDeveloper создавал EJB, он помещал дескриптор всех EJBS в каждый созданный EJB, вызывая количество ссылок NxN. Поэтому Nx (N-1) дополнительные ссылки.

Теперь ключевым моментом является то, что Oracle Application Server 10.1.2.3.0 и ниже не заботились об этих дублирующих ссылках. Однако, как мы видим, 10.1.3.1.4 - это совсем другая версия, и это сломалось.

Наше решение: иметь только 1 профиль развертывания EJB, содержащий все классы EJB и POJO, которые они используют. Помните, перед тем, как был 1 профиль EJB для каждого EJB ... Все это позволило разрешить Jdeveloper (который является дерьмом IMHO) до правильно создать действительный EAR. Что вызвало это сочетание Jdeveloper и Oracle Application Server.

1

Вы должны проверить документацию Oracle, чтобы узнать, в каком случае. Контейнеры Oracle® для J2EE Enterprise JavaBeans Руководство разработчика - хорошее начало В соответствии с руководством Oracle® Containers для J2EE Services, глава 2: Использование JNDI при использовании формы «ejb/EJBName» вы выполняете «локальный» поиск. Если вы хотите использовать полную форму, вы должны проверить раздел «Включение глобального поиска JNDI» главы «Использование JNDI».

+0

Я считаю, что, заставляя его использовать локальный поиск, я избегаю дублирования ссылок, которые, похоже, нарушают это. – Zombies 2008-10-06 14:22:12