Maven не распознает EJB как зависимость проекта при попытке определить модуль - PullRequest
18 голосов
/ 19 ноября 2011

Сегодня я обновил свой локальный сервер Glassfish до 3.1.1 в рамках подготовки к обновлению серверов моей компании до той же версии. Я пытаюсь преобразовать свой проект веб-службы в приятную игру с новым сервером и столкнулся с проблемой.

В файле pom моего уха я ранее указывал в качестве зависимостей и веб-приложение, и ejb. В pom веб-приложения ejb также был указан как зависимость. При попытке развернуть эту конфигурацию в Glassfish 3.1.1 я получил эту ошибку:

Ошибка при развертывании: Исключительная ситуация при развертывании приложения [ear]: Не удается разрешить ссылку. Локальное имя ejb-ref = имя, локальный интерфейс 3.x = интерфейс, ejb-link = null, lookup =, mappedName =, jndi- name =, refType = Session, потому что в приложении есть 2 ejbs с интерфейсом интерфейса. Некоторые из возможных причин: 1. Класс EJB-компонентов был упакован в библиотеку ear lib (или с помощью любого другого библиотечного механизма, который делает библиотеку видимой для всех компонентов), что делает все компоненты-компоненты косвенно включающими этот класс EJB. 2. Класс EJB-компонентов был упакован в компонентный модуль, который прямо или косвенно ссылается на EJB через Manifest, WEB-INF / lib. Класс EJB-компонентов должен быть упакован только в декларирующий модуль EJB, а не в ссылочные модули. Модули ссылок должны включать только интерфейсы EJB. См. Server.log fo .... msg.seeServerLog

По сути, я считаю, что это говорит о том, что, поскольку у меня EJB указан как зависимость в двух разных областях, Glassfish 3.1.1 не знает, на какую зависимость смотреть. Это не было проблемой в 2.1.1. Из-за этого я удалил зависимость в ухе, так как она по-прежнему будет частью эффективного уха уха.

Однако теперь, когда ear генерирует файл application.xml, он пропускает всю информацию ejb из файла. Теперь я могу нормально развернуть приложение, но когда я пытаюсь что-либо запустить, я получаю исключения NameNotFoundException в отношении ejbs.

Я попытался добавить модули ejb в наушник вручную с помощью тега, но при попытке создать проект я получаю сообщение об ошибке:

Артефакт [ejb] не является зависимостью проекта.

Это несмотря на то, что когда я смотрю на эффективный pom для уха, я вижу, что ejb указан как зависимость.

Как правильно сгенерировать файл application.xml, в то же время соответствуя более жесткому набору правил Glassfish 3.1.1?

Дайте мне знать, если вам нужна дополнительная информация, и спасибо за помощь!

1 Ответ

25 голосов
/ 21 ноября 2011

Ответ оказался довольно простым, и я немного себе за это отвечаю. В pom-файле веб-приложения мне просто нужно было добавить строку контекста к зависимости ejb:

<dependency>
    <groupId>com.groupId</groupId>
    <artifactId>webservice-service-ejbs</artifactId>
    <version>${project.version}</version>
    <type>ejb</type>
    <scope>provided</scope>
</dependency>

Теперь я могу сохранить зависимость ejb в наушниках, приложение.xml сгенерировано правильно, и Glassfish 3.1.1 не запутается, думая, что существует несколько классов ejb с одинаковыми именами.

РЕДАКТИРОВАТЬ: Вот как выглядит зависимость ejb в наушниках

<dependency>
    <groupId>com.groupId</groupId>
    <artifactId>webservice-service-ejbs</artifactId>
    <type>ejb</type>
</dependency>

Спасибо тем, кто помог мне.

...