`
8366
  • 浏览: 812993 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ejb3 定时器开发

    博客分类:
  • ejb
阅读更多

 

       定时服务用作在一段特定的时间后执行某段程序,估计各位在不同的场合中已经使用过。下面就直接介绍EJB3.0
定时服务的开发过程。定时服务的开发过程与会话Bean 的开发过程大致相同,但比会话Bean 多了几个操作,那
就是使用容器对象SessionContext 创建定时器,并使用@Timeout 注释声明定时器方法。
下面定义一个每隔3 秒触发一次事件的定时器,当定时事件触发次数超过5 次的时候便终止定时器的执行

 

步骤1:首先写一个远程接口,主要的目的是创建一个定时器 TimerService.java

 

package cn.com.xinli.ejb3.task;

public interface TimerService
{
	public void scheduleTimer(long milliseconds);
}

 

步骤2: 在定义一个无状态的会话bean,它实现了 TimerService 接口,并且使用 @Timeout 注解 表明了 当定时器工作的时候需要直接的业务方法,供容器回调使用 TimerServiceBean.java

 

 

 

通过依赖注入@Resource SessionContext ctx,我们获得SessionContext 对象,调用ctx.getTimerService().createTimer
(Date arg0, long arg1, Serializable arg2)方法创建定时器,三个参数的含义如下:
Date arg0 定时器启动时间,如果传入时间小于现在时间,定时器会立刻启动。
long arg1 间隔多长时间后再次触发定时事件。单位:毫秒
Serializable arg2 你需要传给定时器的参数,该参数必须实现Serializable 接口。
当定时器创建完成后,我们还需声明定时器方法。定时器方法的声明很简单,只需在方法上面加入@Timeout 注
释,另外定时器方法必须遵守如下格式:
void XXX(Timer timer)

 

注意:createTimer() 有4个重载的方法,分别代表不同的定时器,此例创建的是一个

 

每隔规定的时间反复执行的定时器,其他3种定时器 读者可以自行实验

 

 


在定时事件发生时,此方法将被执行

 

package cn.com.xinli.ejb3.task.impl;

import java.util.Date;

import javax.annotation.Resource;
import javax.ejb.Remote;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;

import cn.com.xinli.ejb3.task.TimerService;
@Stateless
@Remote ({TimerService.class})
public class TimerServiceBean implements TimerService 
{
	private int count = 1;
	private @Resource SessionContext ctx;
	public void scheduleTimer(long milliseconds)
	{
		count = 1;
		ctx.getTimerService().
		createTimer(new Date(new Date().getTime() +
		milliseconds),milliseconds, "大家好,这是我的第一个定时器");
	}
	@Timeout
	public void timeoutHandler(Timer timer)
	{
		System.out.println("---------------------");
		System.out.println("定时器事件发生,传进的参数为: " + timer.getInfo());
		System.out.println("定时器事件发生,传进的参数为: " + timer.getNextTimeout());
		System.out.println("---------------------");
		if (count>=5)
		{
			timer.cancel();//如果定时器触发5次,便终止定时器
		}
		count++;
	}
}

 

 

 

步骤3:写测试用例:

 

package cn.com.xinli.ejb3.test;
import java.util.Date;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import cn.com.xinli.ejb3.task.TimerService;
public class TaskClient
{
	public static void main(String[] args)
	{
		Hashtable evn = new Hashtable();
		evn.put(Context.PROVIDER_URL, "127.0.0.1:1099");
		evn.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
		
//		Properties properties=new Properties();
//		properties.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
//		properties.setProperty("java.naming.provider.url", "localhost:1099");
	
		try
		{
			System.out.println(new Date().getTime());
			InitialContext ctx=new InitialContext(evn);
			TimerService timer = (TimerService) ctx.lookup("TimerServiceBean/remote");
			timer.scheduleTimer((long)3000);
			System.out.println("定时器已经启动,请观察Jboss控制台输出,如果定时器触发5次,便终止定时器");
			
		} 
		catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

 

 

eclipse 控制台日志:

 

定时器已经启动,请观察Jboss控制台输出,如果定时器触发5次,便终止定时器

 

jboss 日志:

 

08:25:02,328 INFO  [STDOUT] 定时器事件发生,传进的参数为: 大家好,这是我的第一个
定时器
08:25:02,328 INFO  [STDOUT] 下次触发时间为: Wed Oct 28 08:25:05 CST 2009
08:25:02,328 INFO  [STDOUT] ---------------------
08:25:05,328 INFO  [STDOUT] ---------------------
08:25:05,328 INFO  [STDOUT] 定时器事件发生,传进的参数为: 大家好,这是我的第一个
定时器
08:25:05,328 INFO  [STDOUT] 下次触发时间为: Wed Oct 28 08:25:08 CST 2009
08:25:05,328 INFO  [STDOUT] ---------------------
08:25:08,328 INFO  [STDOUT] ---------------------
08:25:08,328 INFO  [STDOUT] 定时器事件发生,传进的参数为: 大家好,这是我的第一个
定时器
08:25:08,328 INFO  [STDOUT] 下次触发时间为: Wed Oct 28 08:25:11 CST 2009
08:25:08,328 INFO  [STDOUT] ---------------------
08:25:11,328 INFO  [STDOUT] ---------------------
08:25:11,343 INFO  [STDOUT] 定时器事件发生,传进的参数为: 大家好,这是我的第一个
定时器
08:25:11,343 INFO  [STDOUT] 下次触发时间为: Wed Oct 28 08:25:14 CST 2009
08:25:11,343 INFO  [STDOUT] ---------------------
08:25:14,906 INFO  [STDOUT] ---------------------
08:25:14,906 INFO  [STDOUT] 定时器事件发生,传进的参数为: 大家好,这是我的第一个
定时器
08:25:14,906 INFO  [STDOUT] 下次触发时间为: Wed Oct 28 08:25:17 CST 2009
08:25:14,906 INFO  [STDOUT] ---------------------

 

 

附件中是项目源文件和ant脚本

分享到:
评论

相关推荐

    MyEclipse进行Ejb快速开发配置

    除了基础的EJB开发,MyEclipse还支持EJB的高级特性,如EJB定时器(Timer Service)、EJB的并发控制(Concurrent annotations)、依赖注入(Dependency Injection)等。这些功能可以通过配置EJB元数据或使用Java EE的...

    jboss7ejb配置文件

    在`ejb-jar.xml`中,还可以定义安全性、依赖注入、定时器服务等高级特性。 `jboss-ejb3.xml`是JBoss AS 7特有的配置文件,用于扩展或覆盖`ejb-jar.xml`中的配置。这个文件允许开发者针对特定的JBoss实现进行更细致...

    Jboss下开发ejb应用之一会话bean的应用

    本文将围绕“Jboss下开发ejb应用之一会话bean的应用”这一主题,深入探讨如何在Jboss应用服务器上开发和部署会话Bean,以及涉及到的相关工具和源码。 会话Bean是EJB的一种类型,它代表了业务逻辑组件,为客户端提供...

    EJB3-JBOSS7-分布式事务示例

    EJB3引入了许多改进,包括简化API、注解驱动的开发和依赖注入,使得开发人员能够更轻松地利用企业级功能,如持久化、事务处理和安全。 **EJB3的核心特性:** 1. **注解驱动**:EJB3允许通过注解(如`@Stateless`、`...

    EJB系统开发实战录

    - **会话上下文(Session Context)**:提供对环境和EJB服务的访问,如事务、安全性、定时器等。 在"j2ee ejb编程实例"这个压缩包中,读者可能找到与J2EE(Java 2 Platform, Enterprise Edition)相关的EJB实践示例...

    企业级EJB3高级培训PPT3

    EJB3是其第三个主要版本,引入了许多改进,使得开发过程更为简洁和高效。本培训PPT3将深入探讨EJB3的高级特性,帮助开发者提升专业技能。 1. **注解驱动的编程模型** EJB3的一大革新就是引入了注解,极大地简化了...

    Ejb 3 In Action

    通过以上章节内容的概述,可以看出《EJB 3 In Action》是一本全面覆盖EJB 3.0技术栈的实用指南,适合于想要深入了解并掌握EJB 3.0的企业级开发人员阅读。无论是基础知识还是高级特性,《EJB 3 In Action》都能够为...

    企业级EJB3高级培训PPT1

    在实际开发中,了解和掌握EJB3的高级特性,如拦截器(Interceptors)、定时器(Timers)服务、安全性(Security)和并发控制(Concurrency Management)等,能够帮助开发者构建出更高效、稳定的企业级应用。...

    ejb-3_1-pr-api.zip_EJB a_ejb_ejb api

    ejb-3_1-pdr-api可能包含EJB 3.1的编程接口文档,这对于理解和使用EJB 3.1 API进行开发至关重要。开发者可以通过这些API了解如何创建、管理和部署EJB组件,以及如何与其他Java EE技术(如JPA、JTA、JMS)集成。 ...

    EJB3 facts

    在 EJB3 中,**依赖注入** 极大地简化了访问 EJB 资源(如 JDBC 数据源、JMS 对象和 JPA 实体管理器)和服务(如定时器、用户事务和 Web 服务)的过程。这使得开发者能够更加专注于业务逻辑而不是基础设施配置。 - ...

    EJB3.0.rar_EJB3.0_ejb_ejb 3.0

    3. **创建定时器** - **编程方式创建**: 通过调用`TimerService.createTimer()`或`TimerService.schedule()`方法,可以创建单次或周期性的定时器。 - **注解方式创建**: 使用`@Schedule`注解,可以直接在实体Bean...

    EJB3-SourceCode

    EJB3.0是EJB的一个重要版本,引入了许多改进,使得开发过程更为简化,降低了对Java EE程序员的复杂性要求。本篇文章将基于"EJB3.0书中的代码"来深入探讨EJB3.0的核心概念和关键特性。 1. **数据源配置** - `mysql-...

    EJB学习PPT(上)

    之后的版本EJB 3.1和EJB 3.2继续优化,增加了更多功能,如轻量级会话bean和定时器服务。 9. **比较与JPA、JSF和Spring**:EJB通常与JPA(对象关系映射)结合使用,提供数据持久化;JSF(JavaServer Faces)常用于...

    javax.ejb-3.1.2.2.jar下载

    - `javax.ejb.TimerService`:提供了定时任务的管理,可以在EJB中创建和管理定时器。 描述中提到的“开发EJB项目时需要的jar包”表明了`javax.ejb-3.1.2.2.jar`对于EJB项目的必要性。在开发环境中,这个jar需要被...

    hello-ejb.rar_ejb_ejb java

    EJB(Enterprise JavaBeans)是Java EE平台中的一个核心组件,用于构建企业级分布式应用程序。...同时,不断探索和学习EJB的高级特性,如定时器服务、安全性、事务管理等,将有助于提升你在企业级应用开发中的技能。

    EJB3.1讲解

    - **定时器的创建**:通过EJB组件的方法创建定时器,定义任务的执行时间。 - **定时器的管理**:支持对定时器的查询、取消等操作。 通过上述内容可以看出,EJB 3.1为企业级应用提供了强大的支持,不仅涵盖了基本的...

    EJB学习源代码

    通过深入学习和理解这些源代码,开发者可以更全面地掌握EJB的使用,包括会话bean的生命周期管理、数据访问、事务控制、定时任务、对象查询、Web服务调用以及依赖注入等关键技能,这对于提升企业级应用开发的能力至关...

Global site tag (gtag.js) - Google Analytics