我們正在構建一個帶有Oracle數據庫的Java EE/JPA/CDI應用程序。數據模型(這一點,我們不能改變)部分使用的意見和CLIENT_INFO ...像實現安全..如何使用EntityManager注入調用dbms_application_info
create view the_view
as select *
from the_table
where organization_id = USERENV('CLIENT_INFO')
其中USERENV(「CLIENT_INFO」)基本上是通過調用
dbms_application_info.set_client_info(11);
設置
現在,我們有了一系列無狀態Bean,它們基本上注入了持久化上下文並執行查詢(本地查詢和常規POJO),我們需要一種方法將客戶端信息(我們可以從安全上下文獲取)注入PersistenceContext在打電話給EntityManager之前
概括地說,我需要能夠調用這個..
@PersistenceContext
EntityManager em;
@Inject
UserInfo userInfo;
public TheView getTableData(long id) {
// At this point security Information should be set..
// Call the query
return em.find(TheView.class, id);
}
,而不必手動調用setClientInfo()..這樣做的
一種方法很可能是使用攔截器和註釋的方法並在那裏打電話(假設我可以獲得該方法將使用的PersistenceContext ..)..這將甚至工作?
任何其他方式?
TIA!
如果在Apache中DeltaSpike什麼(https://cwiki.apache.org/DeltaSpike/)會爲你工作,請使用DeltaSpike。 Seam 3不再被開發,所有的努力都被投入DeltaSpike。 – LightGuard