Glassfish: Weld не будет вводить из классов в одной банке в классы в соседней банке в WEB-INF / lib - PullRequest
4 голосов
/ 22 июня 2011

У меня проблемы с использованием внедрения зависимостей (с CDI / Weld) в библиотеках, используемых в войне при развертывании на Glassfish 3.1.У меня есть две библиотеки, скажем:

WEB-INF/lib/library1.jar
WEB-INF/lib/library2.jar

library1 содержит открытый класс, скажем, «InjectMe».Library2 содержит другой общедоступный класс, скажем, «InjectionTarget» с сайтом внедрения, например «@Inject public InjectMe injectMe;».

Сбой развертывания:

WELD-001408 Unsatisfied dependencies for type [InjectMe] with qualifiers [@Default] at injection point [[field] @Inject packagename.InjectionTarget.injectionSite].

Оба архива являются действительными архивами CDI с META-INF / beans.xml.

Я обновил weld-osgi-bundle.jar в Glassfish 3.1 и до сих пор вижу проблему.

Если я вручную распаковываю library1 и library2, помещая их классы непосредственно в WEB-INF / classes, развертывание завершается успешно и внедрение работает как положено.

Это быстро сводит меня с ума.Я нахожусь на грани реструктуризации своих модулей так, чтобы подпакеты jar были распакованы с плагином maven-dependency-plugin и заархивированы как объединенный jar, от которого я затем зависел от моей войны.Хотя это довольно ужасно.

Идеи?Разве это не должно "просто работать"?

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Это оказалось ошибкой PEBKAC.Я обновил weld-osgi-bundle.jar на своем настольном компьютере и рабочей станции, но не на ноутбуке, но думал, что обновил и на ноутбуке.

Если вы читаете это, возможно, у вас похожая проблема,Проверьте версию комплекта weld-osgi-bundle:

asadmin list-modules | grep org.jboss.weld.osgi-bundle

(пользователи Windows: используйте findstr вместо grep, но в остальном команда не изменяется).

Вы должны получить результат:

Module : org.jboss.weld.osgi-bundle:1.1.1.Final

Если вы видите более старую версию, обновите сварочный узел в соответствии с приведенными ниже инструкциями:

http://seamframework.org/Seam3/CompatibilityHome#H-UpgradingWeldInGlassFish31

Эти инструкции применимы, даже если вы не используете Seam.Weld 1.1.1 исправляет несколько существенных ошибок в CDI.Это вне меня, почему Glassfish 3.1.2 не был выпущен с ним, потому что они важные исправления.

3 голосов
/ 22 июня 2011

Может быть, вы столкнулись с этой ошибкой?

https://issues.jboss.org/browse/WELD-846

http://java.net/jira/browse/GLASSFISH-15721

http://java.net/jira/browse/GLASSFISH-15735

Я думаю, что Glassfish 3.1.1-b04 и новее используют Weld 1.1.1.Final, который помечен как исправление для основной ошибки Weld. Тестирование с этой точной версией может быть достаточно для подтверждения.

...