Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java EE (J2EE) и Spring > интерфейсы и EJB 3.0 |
Автор: Grishanya 10.7.2009, 15:08 |
Здравствуйте! Я относительно недавно начал разбираться с технологией EJB 3.0. В связи с этим есть вопрос: Имеется задача написания приложения EE, которое должно быть расширяемо. Т.е. в идеале необходимо разработаь некий интерфейс, который реализовывали компоненты. Т.е. есть некоторый серверный компонент, который может общаться с другими компонентами через интерфейс, который в нём же и определён. Т.е. все EJB компоненты должны помимо своих Remote и Local интерфейсов реализовать ещё один - некий универсальный интерфейс. Коим образом можно это реализовать? Заранее спасибо! |
Автор: MisterCleric 10.7.2009, 15:24 | ||
Берешь и наследуешь в Remote и Local этот интерфейс вот тебе пример:
Ну, у меня тут может немного сложновато, так как генерики используются, но собственно зато видно, что наследование в EJB3 такое же, как и везде |
Автор: Grishanya 10.7.2009, 16:58 | ||||
Может я чего-то не догоняю, но у меня вот какой вопрос возник. Допустим я создаю интерфейс SomeInterface и затем наследуюсь от него в Remote и Local интерфейсах другого бина. Далее, чтобы определить наличие таких вот бинов я делаю что-то наподобие: InitialContext context = new InitialContext(); NamingEnumeration<NameClassPair> enumeration = context.list(""); while (enumeration.hasMore()) { String className = enumeration.nextElement().getClassName(); SomeInterface int = (SomeInterface) context.lookup(className); } и вот на строчке, где я делаю Lookup у меня появляется исключение, Class Not found ибо в бине нет Remote класса... Может я что не правильно делаю... Но суть состоит в том, чтобы получать информацию о классах, удалённые интерфейсы которых отсутствуют, а присутствует только предопределённый интерфейс. Может я несколько сумбурно изъясняюсь... Прошу прощения... P.S. Очень бы поспособствовал кусочек кода... ![]() ![]() |
Автор: MisterCleric 10.7.2009, 17:30 | ||||||
Утверждение не верно: lookupв JNDI делается по тому имени, которые ты указал бину использовать или по-умолчанию что-то типа такого:
что за Class Not found в каком месте? И такое: если интерфейс бина наследует какой-то другой интерфейс, то
Собственно не понятно пока даже в чем суть вопроса? Примеры ваших бинов в студию!!! Под какими JNDI-имена они байндятся? Опредлены ли Local Remote на уровне бина. Да и еще такое вспомнил: разные бины могут имплементить один и тот же интерфейс, главное, что бы они были забайндены под разными именами. И с другой стороны: один и тот же интерфейс может быть и Local и Remote |
Автор: Grishanya 10.7.2009, 23:25 | ||||||||
Собственно бины: импорты я опустил
// Кошечки
// Собаки
// Бин, взаимодействующий с предыдущими бинами через объявленный в начале интерфейс
|
Автор: Grishanya 13.7.2009, 14:53 |
Всё, проблема решена! ![]() |
Автор: MisterCleric 13.7.2009, 14:59 | ||
Не-е. так не пойдет. Нам тоже хочется знать, что было не так. Поясняй. Мы здесь и собираемся для того, что бы друг друга выручать. Я тебе что-то писал-писал, а оно ли надо было не ясно. А вдруг та проблема, какая у тебя возникла, когда-нибудь вылезет и у меня... |
Автор: Grishanya 13.7.2009, 16:11 | ||||||||||
Думал, что никому не интересно... Ок. По просьбам трудящихся рассказываю как дело было. В приведённом выше примере необходимо исправить следующее:
// Для бинов, расширяющих функциональность указываем JNDI имя ПЛЮС делаем его имплементацией вышеуказанного интерфейса. Это два
Ну и на последок, в бине, который пользуется расширениями и в котором содержится интерфейс AnimalInterface делаем следующее:
Собственно то, что и требовалось... Надеюсь, это кому-нибудь пигодится... ![]() |