- 浏览: 406784 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (325)
- 数据中台 (15)
- 设计模式 (7)
- 数据结构 (4)
- JavaScript (51)
- 网页设计与制作 (7)
- Flex (4)
- Fckeditor (7)
- Struts (12)
- Spring (19)
- Hibernate (14)
- EJB3.0 (19)
- Java EE 6 (2)
- JSP (22)
- 辅助框架 (9)
- WebService (1)
- XML (8)
- 正则表达式 (5)
- 并发(多线程) (2)
- Java网络 (10)
- 开发工具 (25)
- Oracle (15)
- MySQL (8)
- Git (4)
- SQL Server (2)
- C# (9)
- php (14)
- asp (2)
- ColdFusion (5)
- Tex (1)
- 云游戏 (1)
最新评论
-
CSDNBenbenChong:
...
SQL里desc和asc是什么意思 -
雪狐一号:
非常好 顶一个
SQL里desc和asc是什么意思 -
boyleichinasoft:
thinking...
该如何去使用设计模式呢? -
nforce_com:
写的很好,学习了!不过Student 一般情况下不会删除所有 ...
JPA多对多 -
TaoistWar:
那是FCKEditor的,详细信息只能查看官方文档,或者直接看 ...
1.fckeditor-java-2.5给上传图片添加水印
EJB3的拦截器的开步骤:
1.开发拦截器
使用@AroundInvoke注释指定拦截器方法,方法格式为:
public Object XXX(InvocationContext ctx) throws Exception
其中,方法名XXX可以任意
2.在Session Bean中加入拦截器
@Interceptors( { 拦截器一.class,拦截器二.class })
方法二:
直接在Session Bean中,编写拦截器方法(只拦截该会话):
使用@AroundInvoke注释指定拦截器方法,方法格式为:
public Object XXX(InvocationContext ctx) throws Exception
其中,方法名XXX可以任意
例子:
一。实体Bean
package com.tao.ejb3.entity; import java.io.Serializable; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; /** * 管理员 * * @author TaoistWar */ @Entity @Table(name = "t_operator") @SuppressWarnings("serial") public class Operator implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column private Long id; /** 用户名 */ @Column(length = 32, unique = true, nullable = false) private String username; /** 密码 */ @Column(length = 16, nullable = false) private String password; /** 创建日期 */ @Temporal(TemporalType.TIMESTAMP) private Date createDate; /** 最后修改日期 */ @Temporal(TemporalType.TIMESTAMP) private Date lastEdit; /** 启用状态 true启用,false禁用 */ @Column(length = 2, nullable = false) private Boolean enable = true; /** 最后登录 */ @Temporal(TemporalType.TIMESTAMP) private Date lastLogin; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Date getLastEdit() { return lastEdit; } public void setLastEdit(Date lastEdit) { this.lastEdit = lastEdit; } public Boolean getEnable() { return enable; } public void setEnable(Boolean enable) { this.enable = enable; } public Date getLastLogin() { return lastLogin; } public void setLastLogin(Date lastLogin) { this.lastLogin = lastLogin; } }
二、会话Bean
package com.tao.ejb3.service; import javax.ejb.Remote; import com.tao.ejb3.entity.Operator; @Remote public interface OperatorService { public void save(Operator operator); }
package com.tao.ejb3.service; import javax.ejb.Local; @Local public interface OperatorServiceLocal extends OperatorService { }
package com.tao.ejb3.service.bean; import javax.ejb.Stateless; import javax.interceptor.Interceptors; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import com.tao.ejb3.entity.Operator; import com.tao.ejb3.interceptor.OperatorInterceptor; import com.tao.ejb3.service.OperatorService; import com.tao.ejb3.service.OperatorServiceLocal; @Stateless @Interceptors( { OperatorInterceptor.class }) public class OperatorServiceBean implements OperatorService, OperatorServiceLocal { @PersistenceContext(unitName="ejb3_unit") EntityManager em; public void save(Operator operator) { em.persist(operator); } }
package com.tao.ejb3.service.bean; import javax.ejb.Stateless; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import com.tao.ejb3.entity.Operator; import com.tao.ejb3.service.OperatorService; import com.tao.ejb3.service.OperatorServiceLocal; @Stateless public class OperatorServiceBeanWithInterceptor implements OperatorService, OperatorServiceLocal { @PersistenceContext(unitName = "ejb3_unit") EntityManager em; public void save(Operator operator) { em.persist(operator); } /** * @AroundInvoke 注释指定了要用作拦截器的方法.用@AroundInvoke注释指定的方法必须遵守以下格式: * public Object XXX(InvocationContext ctx) throws Exception * XXX代表方法名可以任意. */ @AroundInvoke public Object log(InvocationContext ctx) throws Exception { long l1 = System.currentTimeMillis(); try { if (ctx.getMethod().getName().equals("save")) { System.out.println("添加管理员"); } return ctx.proceed(); } catch (Exception e) { e.printStackTrace(); return null; } finally { l1 = System.currentTimeMillis() - l1; System.out.println("执行时间:" + l1); } } }
三、拦截器
package com.tao.ejb3.interceptor; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; public class OperatorInterceptor { /** * @AroundInvoke 注释指定了要用作拦截器的方法.用@AroundInvoke注释指定的方法必须遵守以下格式: public Object * XXX(InvocationContext ctx) throws Exception XXX代表方法名可以任意. */ @AroundInvoke public Object log(InvocationContext ctx) throws Exception { long l1 = System.currentTimeMillis(); try { if (ctx.getMethod().getName().equals("save")) { System.out.println("添加管理员"); } return ctx.proceed(); } catch (Exception e) { e.printStackTrace(); return null; } finally { l1 = System.currentTimeMillis() - l1; System.out.println("执行时间:" + l1); } } }
四、测试
package com.tao.ejb3.test; import java.util.Date; import javax.naming.InitialContext; import com.tao.ejb3.entity.Operator; import com.tao.ejb3.service.OperatorService; public class OperatorServericeBeanTest { public static void main(String[] args) { OperatorService cs = null; try { InitialContext ic = new InitialContext(); Date date = new Date(); /*cs = (OperatorService) ic.lookup("OperatorServiceBean/remote"); Operator operator = new Operator(); operator.setUsername("tao2008"); operator.setPassword("123"); operator.setCreateDate(date); operator.setLastEdit(date); operator.setLastLogin(date); operator.setEnable(true); cs.save(operator);*/ cs = (OperatorService) ic.lookup("OperatorServiceBeanWithInterceptor/remote"); Operator operator2 = new Operator(); operator2.setUsername("Taoist2008"); operator2.setPassword("123"); operator2.setCreateDate(date); operator2.setLastEdit(date); operator2.setLastLogin(date); operator2.setEnable(true); cs.save(operator2); } catch (Exception e) { e.printStackTrace(); System.out.println("init error!"); } } }
注意:实体Bean的username惟一不能相同
代码的环境变量需加入EJB容器环境,本代码加的是JBoss_HOME/client下所有的jar
- EJB3.rar (14.4 KB)
- 下载次数: 9
发表评论
-
Caused by: org.hibernate.HibernateException: unknown Oracle major version [0]
2010-02-24 09:34 1789昨天试了一下把mysql的数据源配置mysql-ds.xml放 ... -
detached entity passed to persist
2010-02-02 08:01 1727detached entity passed to persi ... -
实体的状态
2009-06-17 23:04 605新建状态:新建的实体对象,尚未拥有持久化主键,没有和一个持久化 ... -
EJB3的一些常见注解
2009-06-17 22:58 9360.实体管理器 @Persisten ... -
JPA双向一对多和多对一
2009-06-16 01:03 4698JPA中一对多和多对一双向关系中,多的一方为关系维护端 ... -
JPA一对多和多对一关系
2009-05-16 11:18 60421-m:多的一方为关系维护端,关系维护端负责外键纪录 ... -
JPA多对多
2009-05-16 10:38 8501维护端注解 @ManyToMany (cascade ... -
JPA(HIberante)环境的搭建
2009-04-19 14:18 19011.添加jar包 hibernate & jpa j ... -
6.2 配置JBoss数据源(Oracle10G)
2009-03-17 10:38 16281.配置数据源 <?xml version=" ... -
6.1 配置JBoss数据源(MS SQL Server2005)
2009-03-17 09:35 17511.SQL Server 2005 配置内容: <?xm ... -
8.开发消息驱动Bean
2009-03-13 22:59 10511.配置消息服务 <?xml version=&qu ... -
7.单表实体Bean
2009-03-09 23:47 1033(1):建表SQL语句(MySQL) ... -
6.配置JBoss数据源
2009-03-09 18:57 2399以MySQL为例: (1):添 ... -
5.开发有状态Bean
2009-03-05 23:37 8341.无状态Bean使用实例池技术管理Bean.性能 ... -
4.开发本地接口的无状态会话Bean
2009-03-05 23:03 821远程接口需要 ... -
3.通过ANT来提高应用的开发效率
2009-03-05 22:21 627<?xml version="1.0" ... -
2.开发EJB的客户端
2009-03-05 20:49 922EJB是业务层,通常被客户端调用,客户端可以是J ... -
1.EJB的HelloWorld!
2009-03-05 20:32 1736用Eclipse开发EJB需要用到EJB的类库 ...
相关推荐
- **外部拦截器**:定义在单独的类中,并通过`@Interceptors`注解指定给Session Bean使用。 **示例代码**: ```java @Interceptors({HelloInterceptor.class}) @Stateless public class StatelessService ...
EJB3相关的类可能包含实体bean(代表数据库中的表)、会话bean(实现业务逻辑)和服务接口等。同时,可能会有相关的部署描述符(如ejb-jar.xml、web.xml)以及Struts2的配置文件(struts.xml)。 综上所述,这个...
3. 方法级截获器:仅作用于指定的业务方法,不拦截生命周期事件。 4. bean级截获器:即自我截获器,截获器与EJB bean本身相同。 截获器调用顺序遵循一定的规则,如按照声明顺序调用同类别的截获器,优先调用父类的...
- 介绍了EJB3中拦截器的功能和用途。 - 包括如何编写和使用自定义拦截器来增强会话Bean的行为。 - **依赖注入**: - 解释了依赖注入的概念及其在EJB3中的实现方式。 - 通过示例演示了如何利用依赖注入简化应用...
**2.10 拦截器(INTERCEPTOR)** 用于在方法调用前后执行特定代码,例如日志记录或性能监控。 **2.11 依赖注入(DEPENDENCY INJECTION)** 依赖注入是一种设计模式,用于自动管理组件间的依赖关系,提高代码的可测试...
拦截器是EJB3.0中的另一个强大功能,它们允许在方法调用前后插入自定义逻辑。`Interceptor`示例解释了如何创建自定义拦截器,并演示了在哪些操作(如调用、事务、生命周期方法等)中可以插入拦截。 #### 2.5 `...
- **拦截器类**:实现事务逻辑的类,可以通过 `@Interceptors` 注解应用于特定的 EJB 或方法上。 - **实现步骤**: 1. 在类或方法前添加 `@Interceptors(XXX.class)` 注解。 2. 实现 `XXX.class` 注解中所引用的...
- **拦截器**:用于在方法调用前后执行特定逻辑,例如日志记录、性能监控等。 - **依赖注入**:自动装配Bean所需的资源和服务,减少代码复杂度。 - **定时服务**:支持定时任务的创建和管理,提高应用的灵活性。 - *...
Struts 2 提供了拦截器、主题和国际化、数据绑定等特性,增强了可扩展性和灵活性,使得应用程序更加模块化和易于维护。 Spring 框架则是一个全面的企业级应用开发框架,涵盖了依赖注入(DI)、面向切面编程(AOP)...
7. **给EJB增加功能**: 包括Bean调用、通用注解、依赖注入、拦截器等内容。 8. **实体Bean高级**: 探讨实体Bean更高级的应用场景。 9. **事务处理**: 讲解EJB中的事务处理机制。 10. **EJB中的安全**: 探讨如何在...