EJB3.0拦截器
来源:互联网 发布:三姑六婆软件 编辑:程序博客网 时间:2024/05/19 12:15
拦截器可以监听程序的一个或所有方法.拦截器对方法调用流提供了细粒度控制.可以在无状态会话 bean,有状态会话 bean 和消息驱动 bean 上使用它们.拦截器可以是同一 bean 类中的方法或是一个外部类.
下面介绍如何在Session Bean类中使用外部拦截器类.
@Interceptors 注释指定一个或多个在外部类中定义的拦截器.上面拦截器HelloInterceptor对HelloChinaBean中
的所有方法进行监听.
@AroundInvoke 注释指定了要用作拦截器的方法.用@AroundInvoke注释指定的方法必须遵守以下格式:
public Object XXX(InvocationContext ctx) throws Exception
XXX代表方法名可以任意.
下面是HelloChinaBean的本地及远程业务接口
除了可以在外部定义拦截器之外,还可以将Session Bean中的一个或多个方法定义为拦截器.
上面只需一个@AroundInvoke 注释就指定了要用作拦截器的方法.
下面介绍如何在Session Bean类中使用外部拦截器类.
HelloChinaBean.java
- package com.foshanshop.ejb3.impl;
- import com.foshanshop.ejb3.HelloChina;
- import com.foshanshop.ejb3.HelloChinaRemote;
- import javax.ejb.Local;
- import javax.ejb.Remote;
- import javax.ejb.Stateless;
- import javax.interceptor.Interceptors;
- @Stateless
- @Remote ({HelloChinaRemote.class})
- @Local(HelloChina.class)
- @Interceptors({HelloInterceptor.class})
- public class HelloChinaBean implements HelloChina,HelloChinaRemote {
- public String SayHello(String name) {
- return name +"说:你好!中国.";
- }
- public String Myname() {
- return "我是佛山人";
- }
- }
@Interceptors 注释指定一个或多个在外部类中定义的拦截器.上面拦截器HelloInterceptor对HelloChinaBean中
的所有方法进行监听.
HelloInterceptor.java
- package com.foshanshop.ejb3.impl;
- import javax.interceptor.AroundInvoke;
- import javax.interceptor.InvocationContext;
- public class HelloInterceptor {
- @AroundInvoke
- public Object log(InvocationContext ctx) throws Exception {
- System.out.println("*** HelloInterceptor intercepting");
- long start = System.currentTimeMillis();
- try{
- if (ctx.getMethod().getName().equals("SayHello")){
- System.out.println("*** SayHello 已经被调用! *** " );
- }
- if (ctx.getMethod().getName().equals("Myname")){
- System.out.println("*** Myname 已经被调用! *** " );
- }
- return ctx.proceed();
- }catch (Exception e) {
- throw e;
- }finally {
- long time = System.currentTimeMillis() - start;
- System.out.println("用时:"+ time + "ms");
- }
- }
- }
@AroundInvoke 注释指定了要用作拦截器的方法.用@AroundInvoke注释指定的方法必须遵守以下格式:
public Object XXX(InvocationContext ctx) throws Exception
XXX代表方法名可以任意.
下面是HelloChinaBean的本地及远程业务接口
HelloChinaRemote .java
- package com.foshanshop.ejb3;
- public interface HelloChinaRemote {
- public String SayHello(String name);
- public String Myname();
- }
HelloChina.java
- package com.foshanshop.ejb3;
- public interface HelloChina extends HelloChinaRemote{
- }
除了可以在外部定义拦截器之外,还可以将Session Bean中的一个或多个方法定义为拦截器.
HelloChinaBean.java
- package com.foshanshop.ejb3.impl;
- import com.foshanshop.ejb3.HelloChina;
- import com.foshanshop.ejb3.HelloChinaRemote;
- import javax.ejb.Local;
- import javax.ejb.Remote;
- import javax.ejb.Stateless;
- import javax.interceptor.AroundInvoke;
- import javax.interceptor.InvocationContext;
- @Stateless
- @Remote ({HelloChinaRemote.class})
- @Local(HelloChina.class)
- public class HelloChinaBean implements HelloChina,HelloChinaRemote {
- public String SayHello(String name) {
- return name +"说:你好!中国.";
- }
- public String Myname() {
- return "我是佛山人";
- }
- @AroundInvoke
- public Object log(InvocationContext ctx) throws Exception {
- try{
- if (ctx.getMethod().getName().equals("SayHello")){
- System.out.println("*** HelloChinaBean.SayHello() 已经被调用! *** " );
- }
- if (ctx.getMethod().getName().equals("Myname")){
- System.out.println("*** HelloChinaBean.Myname() 已经被调用! *** " );
- }
- return ctx.proceed();
- }catch (Exception e) {
- throw e;
- }
- }
- }
上面只需一个@AroundInvoke 注释就指定了要用作拦截器的方法.
- EJB3.0拦截器
- ejb3.0 拦截器获取参数
- EJB3.0中拦截器的实现
- EJB3拦截器(Interceptor)
- EJB3 CORE规范(第十二章拦截器)
- eclipse + JBoss 5 + EJB3开发指南(15):拦截器方法和拦截器类
- 在EJB3中编写拦截器以及如何配置默认拦截器
- EJB3。0
- EJB3.0
- EJB3.0
- EJB3.0
- EJB3.0
- EJB3.0
- EJB3.0
- EJB3.0概览
- EJB3.0概览
- ejb3.0新特性
- Jboss EJB3.0 security
- 技术的位置
- MFC 编程小技巧日积月累 ( 一 )
- FreeBSD 6.0 下安装X Windows系统
- JPivot内部结构简析
- .net里对图片文件进行质量压缩以及即时预览
- EJB3.0拦截器
- VB.NET 抓屏截屏
- echo的简单介绍
- 如何利用VMware创建测试环境
- 今天第一次写博客,欢迎各位IT大哥大姐们多多关照!!
- 认识 BASH Shell
- 构造函数与初始化函数
- 丫的!这日子!
- reg export和regedit /e的区别?(持续增加ing,)