EJB 企業級應用的架構(5)
EJB擴展組件
EJB的依賴注入,都是依賴於JNDI的。
在EJB組建中調用其他的EJB組件
可以藉助於JNDI,查找到其他EJB組件,也可以藉助於業務接口,調用EJB實例中的業務方法,也可以同國直接引用其他的需要的EJB組件的業務接口,但是需要使用標註。
例:
@EJB
TaxRate tr;
標註
@Statless @Statful @MessageDriverBean
name=" ",mappedName=" " description=" "
name屬性是標識EJB的名字(可以通過JNDI來查找)。默認是EJB的名字。
mappedName屬性也是標識EJB的名字的是容器相關的,所以不要重置,降低可移植性。
description屬性是EJB的描述內容。
以上3個屬性是3個標籤共有的屬性。
@Remote @Local
這兩個標註是標註商業接口的,分別是標註遠程的和本地的商業接口的,如果不寫那就默認爲本地的。
用於有狀態SessionBean的標註
@Remove(retainIfExctption="true|false")
是否在Bean的實例拋出異常之後是否保留着個實例,@Remove標註能夠應用的有狀態SessionBean中的某個業務方法上。當調用到應用了這一註釋的方法時,EJB容器會將這個Bean的實例銷燬或是保留,
retainIfExctption屬性置爲true,則會在調用Bean的業務方法中出現異常則會保留這個Bean的實例,置爲false則會銷燬該實例。
EJB的依賴注入
@Resource標註能夠引用到EJB組件環境中的資源。
@Resource(name="" ,type="")
注意在使用資源引用的時候,也需要在廠商的部署描述文件中對資源進行配置,也就是配置資源的類型和名字,以及JNDIname
@EJB(name="",beanInterface="",beanName="",description="")
name屬性指定引用EJB組件的名字
beanInterface屬性用於指定被引用的EJB組件的接口類型
beanName屬性如果在要引入的EJB組件在相同模塊中也就是在同一個jar文件中,就需要自定beanName了
EJB攔截器
EJB攔截器,使用來截取客戶的調用方法的,就像是過濾器,他只適用於SessionBean MDB。
@Interceptors和@AroundInvoke
使用@AroundInvoke標註註釋方法,並且方法的返回值爲Object
例
public class Test{
@AroundInvoke
public Object test(InvocationContext inv){
System.out.println("Intercepted call via external class to:"+
inv.getMethod().getName());//打印客戶調用的方法的名字
Object[] params=inv.getParameters();//獲得客戶調用的方法的參數表
for(int i=0;i<param.length;i++){
System.out.println("\tparam: "+params[i]);//打印所有參數
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.