|
|
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
Есть вопрос по работе с CDI в нескольких WAR модулях одного EAR приложения. Был написан WAR модуль с CDI объектами. Назрела необходимость разбить один WAR на два отдельных WAR модуля. Первый работает по HTTP, второй по HTTPS. Context-root разные. В обоих WAR модулях наборы классов одинаковые. JBoss ругается Код: plaintext 1. 2. 3. Оставляю только один WAR модуль, ошибка исчезает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2015, 18:05 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
gals, Вынести все одинаковые бины в отдельный EJB JAR, его использовать в обоих WAR. JBoss как бы намекает - нехорошо копипастить :) Если не секрет - зачем было так делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2015, 23:53 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
WGA, извините, не совсем понял. При чем здесь EJB бины? Они и так вынесены в ejb jar контейнеры. CDI должен работать в рамках одного WAR. Я же говорю о том, что в EAR приложении существует два WAR модуля. Архитектура, естественно, одна и та же. По этой причине, базовые компоненты будут одинаковыми. Например, регистрация сертификата для авторизации. Один модуль работает, когда пользователь входит в открытую часть системы и хочет пройти процедуру первичной регистрации. Второй модуль - закрытая часть системы, для авторизованных пользователей. При первичной регистрации надо указать сертификат, которым будет проверяться авторизация. В личном кабинете можно сменить сертификат, так как в сертификате есть срок действия и он иногда заканчивается. Логично, что процедура обработки веб запросов находится в WAR модуле, а обработка полученных данных в EJB модулях. Так зачем же выносить обработку WEB (ajax) запроса в EJB? И как это делать, минуя servlet или JAX-RS? Повторюсь еще раз CDI работает в рамках одного WAR модуля. Получается, что реализация Weld в JBoss противоречит спецификации самого Weld. Либо, я ничего не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2015, 15:21 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
galsWGA, извините, не совсем понял. При чем здесь EJB бины? Они и так вынесены в ejb jar контейнеры. CDI должен работать в рамках одного WAR.Вообще должен, но всякое случается... ( Правда, где Вы нашли в стандарте именно такие места - не понимаю...galsЯ же говорю о том, что в EAR приложении существует два WAR модуля. Архитектура, естественно, одна и та же. По этой причине, базовые компоненты будут одинаковыми. Например, регистрация сертификата для авторизации.Если проект сложный, то поймать 2 либы с одинаковыми бинами в качестве injection target - дело нехитрое. Другое дело, что по у вас WAR по бинам пересекаются в чем очень сомневаюсь. Скорее всего что-то другое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 02:58 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
WGA, У нас есть два WAR модуля. В каждом есть набор своих CDI объектов. Как нам любят показывать, есть компоненты обработки для разных валют или кредитных карт. Что нам нужно, в CDI, чтобы получить объект нужной реализации? Правильно, добавить свою аннотацию. В аннотации можно указать параметр value. Как по содержимому объекта найти нужную реализацию? Скажем, указан псевдоним валюты "RUR" или "USD". Мы используем специальный объект для поиска: Код: java 1. И пишем такую хитрую штуку: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Теперь мы можем найти нужную нам реализацию: Код: java 1. Если в каждом WAR модуле есть свой набор реализаций, то объекты первого модуля видны во втором? Ну, это как-то глупо выглядит. Уж лучше сразу ставить крест на EJB и переходить на OSGi. Там хотя бы PAX-CDI однозначно утверждает, что CDI работает только в переделах одного OSGi bundle. Ведь это реальная дыра в безопасности всего проекта. Со стороны клиента может прийти ajax запрос, который не должен обработаться в рамках первого WAR модуля, но успешно обрабатывается во втором WAR модуле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 08:46 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
galsПовторюсь еще раз CDI работает в рамках одного WAR модуля. Получается, что реализация Weld в JBoss противоречит спецификации самого Weld. Либо, я ничего не понимаю. Это немного странно, потому-что ear, вроде как, является цельным модулем, соответственно CDI должен быть один на весь ear. Оно так и есть, и из-за этого и происходит ошибка. Надо только разобраться почему каждый war создаёт свой экземпляр бина. Возможно он как-то связан с контекстом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 09:04 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
Ох уж этот форум. Редактировать нельзя, добавить еще, то же нельзя. В примере неправильно написал название конструктора. Вот и получается, что есть набор одинаковых CDI объектов в каждом WAR модуле. И Weld начинает ругаться. Выносить общие CDI объекты в оnдельный JAR модуль, то же глупо. Ведь это не решает проблемы видимости чужих CDI объектов. Если бы чужие CDI объекты были не видимы, тогда изначального конфликта не было бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 09:18 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
даже не альфа, а 2.1 в wildfly 8.1 (а уже есть и 8.2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 10:51 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
ivanragals, https://issues.jboss.org/browse/WELD-1065 Выход есть - использовать WildFly, там 2.0.0.Alpha4 Так и думал что не должно быть там разных экземпляров. Модуль-то один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 10:56 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
Немного не так, cdi бины должны повторять принципы видимости классов. Разные загрузчики - разные классы и разные бины. Таким образом, наличие одноименных бинов в разных war - не криминал, даже если они принадлежат одному ear, но в weld 1.1.5, который в jboss 7.1.1, проверка уникальности работает неправильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 11:07 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
ivanraТаким образом, наличие одноименных бинов в разных war - не криминал, даже если они принадлежат одному ear, но в weld 1.1.5, который в jboss 7.1.1, проверка уникальности работает неправильно Криминал, потому-что один ear это по-умолчанию один загрузчик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 11:14 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
У war модулей внутри ear собственные загрузчики, для других модулей настраивается (по умолчанию - модули не изолированы) https://docs.jboss.org/author/display/AS7/Class Loading in AS7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 11:33 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
ivanraУ war модулей внутри ear собственные загрузчики, для других модулей настраивается (по умолчанию - модули не изолированы) https://docs.jboss.org/author/display/AS7/Class Loading in AS7 Хороший пример того что JEE это какой-то адовый ад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 11:48 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
ivanraУ war модулей внутри ear собственные загрузчики, для других модулей настраивается (по умолчанию - модули не изолированы) https://docs.jboss.org/author/display/AS7/Class Loading in AS7 Легче разобраться с правилами в OSGi, из десятка страницах, нежели в одном предложении от JBoss. Чем отличается спецификация OSGi и JavaEE. В OSGi пишут спецификацию, потом реализацию. В JavaEE сначала реализацию, потом спецификацию и уже после латают реализацию. Если честно, я всегда считал, что у каждого WAR модуля обязан быть собственный загрузчик классов. Иначе, все web ресурсы создали кашу. А раз так, то и CDI должен был работать корректно, в рамках своего ClassLoader. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 12:58 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
gals, тут дело не спецификации, а в том, что в jboss 7 баг - реализация cdi не соответствует спецификации https://issues.jboss.org/browse/WELD-1065 Можно попробовать задеплоить приложение с weld 2, где баг исправлен, но лучше просто взять сервер поновее - wildfly. Мне кажется, это "наведенная" ошибка из-за того, что была путаница с @ApplicationScoped, так как вдруг выяснилось, что для EAR недостаёт @EARApplicationScoped либо @WARApplicationScoped А с загрузчиками классов никаких новостей - в jboss war-модули в enterprise-приложениях имеют собственные загрузчики, по крайней мере, с jboss4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 13:39 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
BlazkowiczivanraУ war модулей внутри ear собственные загрузчики, для других модулей настраивается (по умолчанию - модули не изолированы) https://docs.jboss.org/author/display/AS7/Class Loading in AS7 Хороший пример того что JEE это какой-то адовый ад.Класслоадинг в java вообще занимательная штука ))) В томкате тоже можно намутить так, что не горюй... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2015, 15:26 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
ivanra, Ну да, замечательно. Берем WildFly 8.2 и радуемся другим ошибкам. Раньше, я замечательно пользовался Код: java 1. 2. Теперь, я радостно ловлю JBAS014237. https://issues.jboss.org/browse/WFLY-1168 Ведь не все объекты в EAR приложении являются EJB CMT объектами. Некоторые, по старинке, создаются через старый, добрый new. И каким, таким способом, созданный объект осчастливить разрешением аннотаций @EJB, @Resource, @TransactionAttribute? JPA, это вообще, лебединая песня о транзакциях. Не поймешь, когда нужно начинать транзакцию от Hibernate Session (EntityManager) и руками ставить commit, а когда эта сессия работает в рамках JTA транзакции. Ведь мы познакомились с JBAS014237 от WildFly. И не дай бог, случайно сделать Код: java 1. 2. Да, и совсем уж в пику JavaEE 7. Есть @Transactional и @TransactionAttribute. Есть @Inject и @EJB/@Resource. @TransactionAttribute и @EJB/@Resource, вообще, надо запретить к использованию и предать анафеме в JavaEE API. В общем виде, спецификация JavaEE нервно курит в сторонке, пока усиленно правятся ошибки в JavaEE серверах. А относительно недавняя эпопея с изменением имен в lookup с JavaEE 2 на JavaEE 3 от JBoss 7, вам понравилась? Это то же, спецификация JavaEE была в отпуске? По поводу Weld CDI я скажу крамольную штуку. Ей не хватает много-модульности и приватных модулей из Guice. Если бы ребята взяли этот функционал, не было бы проблем с областями видимости объектов в разных JAR/WAR/EJB модулях. Всё бы ограничивалось кругом конкретного модуля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 12:58 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
galsЕсть вопрос по работе с CDI в нескольких WAR модулях одного EAR приложения. Был написан WAR модуль с CDI объектами. Назрела необходимость разбить один WAR на два отдельных WAR модуля. Первый работает по HTTP, второй по HTTPS. Context-root разные. В обоих WAR модулях наборы классов одинаковые. JBoss ругается Код: plaintext 1. 2. 3. Оставляю только один WAR модуль, ошибка исчезает. Может перед jboss serverом поставить прокси (например апач) -и разворачивать ваш https на нем а, уже в jboss ходить одинаково по http , передавая инфу в заголовках ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 13:36 |
|
||
|
CDI в JBoss 7.1.1
|
|||
|---|---|---|---|
|
#18+
Atum1Может перед jboss serverом поставить прокси (например апач) -и разворачивать ваш https на нем а, уже в jboss ходить одинаково по http , передавая инфу в заголовках ? Увы, это не выход из сложившейся ситуации. Легче тогда поднять два независимых EAR модуля на одном JBoss. Либо, потратить время на адаптацию кода под новые специфики WildFly 8.2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 13:50 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2124981]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
184ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 504ms |

| 0 / 0 |
