Załóżmy Mam EJB definiującą dwa widoki:dowiedzieć się, co widok EJB użyto
- lokalnego biznesu,
- Remote działalności.
Oba interfejsy te same podpisy metodzie, tak jak to jest:
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) {
// ...
}
}
Czy istnieje sposób, aby dowiedzieć się, co widok EJB nazwano od wewnątrz samego EJB (lub jego przechwytujących?)
Załóżmy, że chciałbym wykonać różne procedury autoryzacji w zależności od używanego widoku. Zdalny powinien być bardziej ograniczony, a lokalny nie powinien.
Mogę wywołać SessionContext#getInvokedBusinessInterface()
, ale to daje mi informacje tylko o obiekcie klasy - nie o jego semantyki EJB. Proste używanie odbicia do sprawdzania obecności adnotacji na interfejsach lub fasoli nie jest wystarczające (co z widokami zdefiniowanymi w ejb-jar.xml
?)
Wątpię, czy jest to możliwe przy użyciu prostej specyfikacji EJB, ale być może jest coś, co przeoczyłem.
Jeśli nie, to czy można uzyskać te informacje z wnętrza serwera aplikacji? (rozważmy tylko JBoss AS 7.x, Glassfish 3.x i TomEE 1.5.1).
Moje przeczucie mówi, że nie jest to możliwe w przenośny sposób. Jeśli tak, to też coś przeoczyłem. Sztuczką może być użycie konwencji nazewnictwa interfejsów. Już to robisz; 'MyBusinessLocal' kończy się na' Local' itd. Trochę kruchy, ale konwencje działają np. JavaBeans. –
Dzięki Arjan. Zgadzam się - pewna konwencja może być tutaj rozwiązaniem. Sądzę, że takie rozpoznawanie widoku EJB może być możliwe tylko przy użyciu wewnętrznych elementów serwera ... Jeśli to w ogóle możliwe! –
Nie ma za co. Jeśli masz silne odczucie, że EJB potrzebuje tej umiejętności, dlaczego nie dodać do niej żądania funkcji na http://java.net/jira/browse/EJB_SPEC? –