#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. Это кажется излишним.