Предположим, у меня есть EJB, образующую два вида:Обнаружение того, что был использован вид EJB
- местного бизнеса,
- удаленного бизнеса.
Оба интерфейса имеют одинаковые сигнатуры метода, так как:
public interface MyBusinessCommon {
void myMethod(Object o);
}
@Local
public interface MyBusinessLocal extends MyBusinessCommon { }
@Remote
public interface MyBusinessRemote extends MyBusinessCommon { }
@Stateless
public class MyBusinessBean implements MyBusinessLocal, MyBusinessRemote {
public void myMethod(Object o) {
// ...
}
}
Есть ли способ, чтобы выяснить, что вид EJB был вызван из самого EJB (или его перехватчика?)
Предположим, что я хотел бы выполнять различные процедуры авторизации в зависимости от используемого вида. Удаленный должен быть более ограниченным, а локальный - не должен.
Я могу вызывать SessionContext#getInvokedBusinessInterface()
, но это дает мне информацию только о объекте класса, а не о семантике EJB. Простое использование отражения для проверки присутствия аннотаций на интерфейсах или компонентах недостаточно (как насчет представлений, определенных в ejb-jar.xml
?)
Я сомневаюсь, что это возможно, используя прямую спецификацию EJB, но, возможно, есть что-то, что я пропустил.
Если нет, возможно ли получить эту информацию от внутренних серверов приложений? (давайте рассмотрим только JBoss AS 7.x, Glassfish 3.x и TomEE 1.5.1).
Мое ощущение кишки говорит, что это невозможно в переносном режиме. Если это так, я тоже что-то пропустил. Трюк может заключаться в использовании соглашения об именах интерфейсов. Вы уже это делаете; 'MyBusinessLocal' заканчивается' Local' и т. Д. Немного хрупкий, но соглашения работают, например. JavaBeans. –
Спасибо Arjan. Я согласен - здесь может быть какое-то соглашение. Я предполагаю, что такое распознавание вида EJB может быть возможно только с использованием внутренних серверов ... Если это вообще возможно! –
Добро пожаловать. Если вы чувствуете, что EJB нуждается в этой способности, то почему бы не добавить запрос функции для него по адресу http://java.net/jira/browse/EJB_SPEC? –