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]);//打印所有參數


                }


        }


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章