Класс доступа в проекте EJB из проекта War в проекте EAR?

#java #eclipse #jakarta-ee

#java #eclipse #джакарта-ee

Вопрос:

Я создаю проект на основе MDB и классов, поддерживающих эти MDB. Мне также нужно использовать ServletContextListener для взаимодействия со вселенной MDB (подробности ниже), что означает, что мне нужен проект WAR.

Вопрос: Как ServletContextListener может получить доступ к классу в проекте EJB?

Организация проекта (стандартный проект EAR EAR Eclipse):

В проекте EAR есть несколько jar, в проекте EJB есть несколько MDB, а множество других классов, используемых WAR-проектом MDB, имеют ServletContextListener.

Зачем я это делаю? Мне нужно запустить поток при запуске проекта. Этому потоку необходим доступ к куче классов, также используемых MDB.

Я понимаю, что я мог бы поместить эти общие классы в jar в проекте EAR. Если есть способ сделать это так, чтобы одно затмение «Отлаживалось как» -> «На сервере», то это было бы хорошим решением. Любое предоставляемое решение должно поддерживать эту отладку на сервере с пошаговой отладкой во всех классах.

ПРИМЕЧАНИЕ 2: Я могу сказать Eclipse, что проект WAR зависит от проекта EJB, который удаляет флаги ошибок Eclipse, но eclipse показывает предупреждение о том, что эта зависимость не будет существовать в развернутом проекте, что означает, что мои классы, к которым обращаются из WAR, не смогут создать экземпляр во время выполнения.

Ответ №1:

При «стандартном» развертывании на сервере Java EE (имеется в виду: с политикой загрузки классов по умолчанию) классы WAR «могут видеть» все, что находится во вложенном EAR, и классы EAR имеют приоритет.

Я могу сказать Eclipse, что проект WAR зависит от проекта EJB

Разве вы не делаете это наоборот? Это проект EAR, в котором должен быть ваш проект WAR в разделе «Свойства -> Сборка развертывания» проекта.

Другая возможность, которая приходит на ум, заключается в том, что, возможно, вы пытаетесь выполнить развертывание на сервере, отличном от Java EE, например Tomcat, который не поддерживает EARs. Возможно, поэтому Eclipse говорит, что зависимость не будет существовать в развернутом проекте.

Комментарии:

1. Я прочитал веб-страницу, которая согласилась с вами, прежде чем я сделал сообщение. Возможно, что на Glassfish (моя цель) он работает так, как вы говорите. Однако Eclipse показывает ошибку. Я создал свой проект в Eclipse следующим образом: (1) Создайте проект EAR. (2) Создайте проект EJB в качестве члена EAR. (3) Создайте проект WAR в качестве члена EAR. Класс в проекте WAR не может видеть класс в проекте EJB — по флагу ошибки Eclipse. Я решил проблему, создав проект «Утилита» (библиотека) как часть того же EAR и переместив в него все мои классы, кроме MDB и ServletContextListener. Это кажется излишним.