Si supponga che ho un EJB definisce due punti di vista:Scoprire cosa è stata utilizzata vista EJB
- affari locale,
- affari remoto.
Entrambe le interfacce condividono gli stessi metodi firme, quindi è come:
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) {
// ...
}
}
C'è un modo per capire cosa vista EJB è stato chiamato dall'interno della EJB sé (o il suo intercettore?)
Diciamo che vorrei eseguire procedure di autorizzazione diverse a seconda della vista utilizzata. Remote dovrebbe essere più limitato e locale non dovrebbe.
Posso invocare SessionContext#getInvokedBusinessInterface()
ma questo mi dà informazioni solo sull'oggetto classe - non sulla semantica EJB di esso. Non è sufficiente usare la reflection per controllare la presenza di annotazioni su interfacce o bean (per quanto riguarda le viste definite in ejb-jar.xml
?)
Dubito che sia possibile utilizzare specifiche EJB diritte ma forse c'è qualcosa che mi è sfuggito.
In caso contrario, è possibile ottenere queste informazioni dagli interni di un server delle applicazioni? (prendiamo in considerazione solo JBoss AS 7.x, Glassfish 3.xe TomEE 1.5.1).
Il mio istinto dice che questo non è possibile in un modo portabile. Se lo è, ho perso qualcosa anch'io. Un trucco potrebbe essere utilizzare la convenzione delle interfacce di denominazione. Lo stai già facendo; 'MyBusinessLocal' termina con' Local' ecc. Un po 'fragile, ma le convenzioni funzionano per es. JavaBeans. –
Grazie Arjan. Sono d'accordo: alcune convenzioni potrebbero essere una soluzione qui. Immagino che un tale riconoscimento delle viste EJB potrebbe essere possibile solo utilizzando internals del server ... Se è possibile a tutti! –
Prego. Se ritieni fortemente che EJB necessiti di questa capacità, allora perché non aggiungere una richiesta di funzionalità per questo all'indirizzo http://java.net/jira/browse/EJB_SPEC? –