假設我定義兩種觀點的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語義。顯然使用反射來檢查界面或bean上的註釋存在是不夠的(ejb-jar.xml
中定義的視圖怎麼辦?)
我懷疑是否可以使用直接的EJB規範,但也許有一些我錯過了。
如果沒有,是否可以從應用程序服務器的內部獲取此信息? (我們只考慮JBoss AS 7.x,Glassfish 3.x和TomEE 1.5.1)。
我的直覺告訴我們,這不可能以便攜的方式進行。如果是這樣,我也錯過了一些東西。一個竅門可能是使用命名接口的約定。你已經這樣做了; 'MyBusinessLocal'以'Local'結尾等。有點脆弱,但是慣例可以用於例如。 JavaBeans的。 – 2013-03-19 09:24:53
謝謝Arjan。我同意 - 一些公約可能是一個解決方案。我猜這樣的EJB視圖識別可能只能使用服務器內部實現......如果可能的話! – 2013-03-19 18:36:06
不客氣。如果您對EJB需要這種能力感到強烈,那麼爲什麼不在http://java.net/jira/browse/EJB_SPEC上添加對它的功能請求? – 2013-03-19 20:04:23