| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Spring и EJB Module |
| Автор: ShurikA 20.7.2009, 04:22 | ||||
| Такое дело: До сих пор все мои разработки сводились к Веб Сервисам либо апикациям на базе EJB и их клиентов. Так как всё это делалось под GlassFish, то создавался EJB Module который который общался с Persistence Layer и поддержывал всю нужную функциональность. По другую сторону реки создавалось веб приложение (которое в результате становилось на пример веб сервисом). Всё это собиралось в одну Enterprise Application. В какой то момент мы решили воспользоваться спрингом со стороны клиента. Главным образом в связи с MVC и Spring Security. И вот тут, как говорится началось веселье. Начьну с самого назойливого: Приложение требует определённую сущность для пользователя.Достичь это можно при помощи имплементации класса UserDetailsService в котором, внутри метода loadUserByUsername собираем такого юзера какой на придёт в голову. и то что мне удалось достичь это создание этого пользователя с помощью прямого обращение к БД через DataSource. Но дело всё в том что у нас уже есть EJB Module который делает следующее:
и SystemUser выгладит так:
но мне так и не удалось обраться к SysUserMgrBean из loadUserByUsername, и чем дальше я двигаюсь тем больше путаюсь. Может быть я вообще иду не в том направлении... |
| Автор: ShurikA 20.7.2009, 08:13 | ||||||||||
| powerOn, Мда, запутанно, но всё таки правильно Вот допустим самопальный UserDetailsService:
просто у бина метод тоже называется loadUserByUsername... Добавлено через 11 минут и 2 секунды Кстати, я ради спортивного интереса попробовал достать тестовый бин из контроллера. вот ejb:
в отдельном проекте (EJB Module). едиственный способ которым мне удалось достучаться до бина это через lookup кодом:
Но никаким другим способом, ну так:
ни через конфигурацию:
не работает... Кроме того, когда я пытаюсь задеплоить оба модуля как одно приложение (Enterprise Application) не удаётся найти EJB даже через код. И единственный способ, это отдельно деплоить сначало EJB Module а потом Web Application. |
| Автор: powerOn 20.7.2009, 09:41 | ||
ЕМНИП, то в application.xml можно указать чтобы деплой модулей проходил в порядке их объявления. Я так понимаю что задача сводится к доступу к EJB из спринга? Если так, то об этом почитать можно http://static.springsource.org/spring/docs/2.0.x/reference/ejb.html. |
| Автор: ShurikA 20.7.2009, 09:49 | ||||||||
хе хе, читал и перечитывал... не помогло. На пример, как я уже и сказал выше, если попробовать делать injection так:
то ошибка такая:
и соответственно:
так тоже не работает. Добавлено через 3 минуты и 19 секунд Но допустим, с контроллером я решу в какой то момент, благо в документации спринга описанно, то есть работать должно. Но каким образом мне получить бин внутри SystemUserDetailsService? |
| Автор: MisterCleric 20.7.2009, 15:07 | ||||||
Через DependencyInjection:
в общем это быстрый пример из моего проекта. Ну собственно, если почитать referance, который идет из дистрибутивом самого спринга и spring-security, то все более-менее становится понятно. Я уже давно работаю в связке: RemoteEJB - WebSpring Добавлено через 2 минуты и 43 секунды
Вот этот не заработал, там какие-то методы надо еще к бинам добавлять. Да и в доке посоветовали юзать простой JndiLookUp, т.е. тот бин пример, что я показал |
| Автор: ShurikA 20.7.2009, 18:29 |
| MisterCleric, Спасибо, а вопрос такой: есть ли какая то разница если делать lookup кодом или DependencyInjection? Меня главное интересует скорость отработки... |
| Автор: MisterCleric 20.7.2009, 23:59 |
| По-моему у JndiObjectFactoryBean есть какое-то кеширование инстансов, которые он производит. Нету под рукой исходников |
| Автор: ShurikA 21.7.2009, 01:02 | ||
| MisterCleric, Так как я совсем не привыкший к этим XML-ам, ты не мог бы пояснить что точьно делает каждая часть. Главным образом вот эти две:
заранее спасибо. |
| Автор: MisterCleric 21.7.2009, 11:05 | ||||
| Привет. Попробую растолковать. Первый - PropertyPlaceholderConfigurer - предназначен для того, что бы читать проперти и их значения из properties-файлов и вставлять в то место, где мы просим эти проперти специальной конструкцией, что мы и видим в следующем примере:
Так же у него есть возможность читать проперети из
что я и использую в моем примере. Второй - PropertiesFactoryBean - просто создает объект типа Properties с тем набором, который мы ему перечисляем. В моем примере это будет набор пропертей для InitialContext, которые я потом инджектчу в бин для lookup по JNDI |
| Автор: ShurikA 8.8.2009, 12:44 | ||||
| продолжение: Вычитал много всего, в том чесле и то что EJB3 нужно инджектать так:
при этом контроллер выглядит следующим образом:
Во время деплоя в setOrgConfEjb метод передаётся переменная типа: org.ejb._OrganizationConfigRemote_Wrapper Правильно ни это? если да, то по идее после этого, в this.orgConfEjb я должен иметь свой бин. но не тут то было, по какойто причине, когда я пытаюсь воспользоваться им в showOrganizationTypesList то он равен NULL. и естественно я вылетаю по NullPointerException. Что я попускаю? |
| Автор: acvilon 8.8.2009, 18:14 |
| Привет, я разбирался с подобным, и выложил конечные исходники. http://forum.vingrad.ru/forum/topic-268674/kw-ejb-spring-springmvc.html |