- 浏览: 7339171 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在quartz2.0中只支持EJb2.0的服务支持,但是对EJB3.0没有提供支持,所以自定义quartz相关的job类EJB3InvokerJob对EJb3.0的支持。
EJb3.0的接口:
package easyway.tbs.app.ejb; /** * EJB服务接口类 * @author longgangbai * */ public interface SysTimeEngine { public String helloword(String username); }
EJb3.0的服务实现类:
package easyway.tbs.app.ejb; import java.util.Date; import javax.ejb.Remote; import javax.ejb.Stateless; /** * EJB服务接口实现类 * @author longgangbai * */ @Stateless(name = "SysTimeEngine") @Remote(SysTimeEngine.class) public class SysTimeBean implements SysTimeEngine { public String helloword(String username) { return "helloworld ,"+username+new Date(); } }
package easyway.tbs.app.ejb; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Hashtable; import javax.naming.InitialContext; import javax.naming.NamingException; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * 一个调用EJb3.0的Job类 * @author longgangbai * */ public class EJB3InvokerJob implements Job { public static final String EJB_JNDI_NAME_KEY = "ejb"; public static final String EJB_METHOD_KEY = "method"; public static final String EJB_ARG_TYPES_KEY = "argTypes"; public static final String EJB_ARGS_KEY = "args"; public static final String INITIAL_CONTEXT_FACTORY = "java.naming.factory.initial"; public static final String OBJECT_FACTORIES = "java.naming.factory.object"; public static final String STATE_FACTORIES = "java.naming.factory.state"; public static final String URL_PKG_PREFIXES = "java.naming.factory.url.pkgs"; public static final String PROVIDER_URL = "java.naming.provider.url"; public static final String DNS_URL = "java.naming.dns.url"; public static final String AUTHORITATIVE = "java.naming.authoritative"; public static final String BATCHSIZE = "java.naming.batchsize"; public static final String REFERRAL = "java.naming.referral"; public static final String SECURITY_PROTOCOL = "java.naming.security.protocol"; public static final String SECURITY_AUTHENTICATION = "java.naming.security.authentication"; public static final String SECURITY_PRINCIPAL = "java.naming.security.principal"; public static final String SECURITY_CREDENTIALS = "java.naming.security.credentials"; public static final String LANGUAGE = "java.naming.language"; public static final String APPLET = "java.naming.applet"; public EJB3InvokerJob() { } /** * */ public void execute(JobExecutionContext context) throws JobExecutionException { InitialContext jndiContext; //获取相关的job数据Map JobDataMap dataMap = context.getMergedJobDataMap(); //获取ejb的jndi名称 String ejb = dataMap.getString("ejb"); //调用ejb的方法 String method= dataMap.getString("method"); //调用方法的输入参数 Object[] arguments = (Object[])(Object[])dataMap.get("args"); if(arguments == null) arguments = new Object[0]; if(ejb == null) throw new JobExecutionException(); //获取EJB的jndi中的Context上下文信息 jndiContext = null; try { jndiContext = getInitialContext(dataMap); } catch(NamingException ne) { throw new JobExecutionException(ne); } //获取EJB的代理对象 Object ejbobject = null; try { ejbobject = jndiContext.lookup(ejb); } catch(NamingException ne) { throw new JobExecutionException(ne); } //通过反射执行方法的信息 Class ejbClass=ejbobject.getClass(); Method methodExecute = null; try { //调用方法的输入参数类型 Class argTypes[] = (Class[])(Class[])dataMap.get("argTypes"); if(argTypes == null) { argTypes = new Class[arguments.length]; for(int i = 0; i < arguments.length; i++) argTypes[i] = arguments[i].getClass(); } //执行EJB方法 methodExecute = ejbClass.getMethod(method, argTypes); } catch(NoSuchMethodException nsme) { throw new JobExecutionException(nsme); } //存储EJB的执行结果 try { Object returnObj = methodExecute.invoke(ejbobject, arguments); System.out.println(returnObj); context.setResult(returnObj); } catch(IllegalAccessException iae) { throw new JobExecutionException(iae); } catch(InvocationTargetException ite) { throw new JobExecutionException(ite); } //关闭上下文的信息 if(jndiContext != null) { try { jndiContext.close(); } catch(NamingException e) { e.printStackTrace(); } } } /** * 创建EJB的上下文信息 * @param jobDataMap * @return * @throws NamingException */ private InitialContext getInitialContext(JobDataMap jobDataMap) throws NamingException { Hashtable<String,String> params = new Hashtable<String,String>(3); String initialContextFactory = jobDataMap .getString(InitialContext.INITIAL_CONTEXT_FACTORY); if (initialContextFactory != null) params.put(InitialContext.INITIAL_CONTEXT_FACTORY, initialContextFactory); String providerUrl = jobDataMap.getString(InitialContext.PROVIDER_URL); if (providerUrl != null) params.put(InitialContext.PROVIDER_URL, providerUrl); String urlpkgprefixes = jobDataMap .getString(EJB3InvokerJob.URL_PKG_PREFIXES); if (urlpkgprefixes != null) params.put(EJB3InvokerJob.URL_PKG_PREFIXES, urlpkgprefixes); return params.size() != 0 ? new InitialContext(params) : new InitialContext(); } }
创建触发器并调用相关的job任务
package easyway.tbs.app.ejb; import static org.quartz.DateBuilder.evenMinuteDate; import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger; import java.util.Date; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.impl.StdSchedulerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 调用EJB3.0的方法的 * @author longgangbai * */ public class QuartzEJB { public static void main(String[] args) throws SchedulerException { Logger log = LoggerFactory.getLogger(QuartzEJB.class); log.info("------- Initializing ----------------------"); // First we must get a reference to a scheduler //创建调度工厂 SchedulerFactory sf = new StdSchedulerFactory(); //创建一个调度对象 Scheduler sched = sf.getScheduler(); log.info("------- Initialization Complete -----------"); // computer a time that is on the next round minute Date runTime = evenMinuteDate(new Date()); log.info("------- Scheduling Job -------------------"); // define the job and tie it to our HelloJob class //创建job的详细信息 JobDetail job = newJob(EJB3InvokerJob.class) .withIdentity("job1", "group1") .build(); //设置ejb调用相关的参数信息 JobDataMap jobDataMap=job.getJobDataMap(); jobDataMap.put(EJB3InvokerJob.EJB_JNDI_NAME_KEY, "SysTimeEngine/remote"); jobDataMap.put(EJB3InvokerJob.EJB_METHOD_KEY, "helloword"); jobDataMap.put(EJB3InvokerJob.EJB_ARG_TYPES_KEY,new Class[]{ String.class}); jobDataMap.put(EJB3InvokerJob.EJB_ARGS_KEY,new Object[]{ "wangxingchen"}); jobDataMap.put(EJB3InvokerJob.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); jobDataMap.put(EJB3InvokerJob.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces"); jobDataMap.put(EJB3InvokerJob.PROVIDER_URL, "jnp://localhost:1099"); log.info(job.getJobDataMap().toString()); // Trigger the job to run on the next round minute //创建一个触发器的 Trigger trigger = newTrigger() .withIdentity("trigger1", "group1") .startAt(runTime) .build(); // Tell quartz to schedule the job using our trigger //设置调度相关的job和触发器 sched.scheduleJob(job, trigger); log.info(job.getKey() + " will run at: " + runTime); // Start up the scheduler (nothing can actually run until the // scheduler has been started) //调度开始执行 sched.start(); log.info("------- Started Scheduler -----------------"); // wait long enough so that the scheduler as an opportunity to // run the job! log.info("------- Waiting 65 seconds... -------------"); try { // wait 65 seconds to show job Thread.sleep(65L * 1000L); // executing... } catch (Exception e) { } // shut down the scheduler log.info("------- Shutting Down ---------------------"); sched.shutdown(true); log.info("------- Shutdown Complete -----------------"); } }
发表评论
-
【转】Django resources
2014-01-23 14:35 10828Django resources This page li ... -
使用国内镜像源来加速python pypi包的安装
2014-01-16 11:16 197843pipy国内镜像目前有: http://pypi.d ... -
[转 ]vagrant使用简介
2014-01-10 13:53 257531> 简介: vagrant提供了易于配置,重复性 ... -
[转]在Java中调用Python
2014-01-07 13:08 9220在执行之前都需要把jython对应的包加载进去,这个是必须的 ... -
[转]Eclipse配置PyDev插件
2014-01-02 14:25 2840安装python解释器 安装PyDev: 首 ... -
RestFuse的研究(五) Http请求的封装
2014-06-14 15:50 3648在RestFuse中封装了Http请 ... -
RestFuse的研究(四) Junit的Statement的分析
2013-12-06 11:46 1674在RestFuse提供了多种单 ... -
RestFuse的研究(三) Junit的Rule的使用和分析
2013-12-06 11:01 2239在junit中定义一些可以公用的规则(R ... -
RestFuse的研究(二) Junit的Runner的分类和模式
2013-12-06 10:40 1605在Junit4中的调用JunitCore可以采 ... -
RestFuse的研究(一) HttpJunitRunner的实现
2013-12-06 10:11 1748在RestFuse是一种针对Rest We ... -
[转]An open-source JUnit extension to test HTTP/REST APIs
2013-12-06 09:57 1101http://developer.eclipsesource ... -
TestNG简单的学习(十三)TestNG中Junit的实现
2013-12-04 09:00 3356TestNG和junit的整合 ... -
TestNG简单的学习(十二)TestNG运行
2013-12-03 09:08 51588文档来自官方地址: ... -
TestNG简单的学习(十一)TestNG学习总结
2013-12-03 09:08 14199最近一直在学习关于TestNG方面的知识,根 ... -
TestNG简单的学习(十)TestNG @Listeners 的使用
2013-12-03 09:07 8695TestNG官方网站: http://testng.or ... -
TestNG简单的学习(九)TestNG Method Interceptors 的使用
2013-12-03 09:07 2715TestNG官方网站: http://testng ... -
TestNG简单的学习(八)TestNG Annotation Transformers 的使用
2013-12-03 09:07 2812TestNG官方网站: http://testng.or ... -
TestNG简单的学习(七)TestNG编程方式运行
2013-12-02 09:22 2455TestNG官方网站: http://testng.or ... -
TestNG简单的学习(六)测试工厂注释的使用
2013-12-02 09:22 2785TestNG官方网站: http://testng.or ... -
TestNG简单的学习(五)参数化测试数据的定制
2013-12-02 09:22 2703TestNG官方网站: http://testng.or ...
相关推荐
quartz 2.2.1 定时调度 java 最新版jar
Quartz是一款开源的作业调度框架,它允许开发者创建、组织和执行定时任务。在Java开发环境中,Quartz被广泛用于实现应用程序的自动化任务调度。这个压缩包“quartz动态定时调度完整代码”提供了使用Quartz进行动态...
本篇文章将详细探讨如何在Spring Boot项目中整合Quartz实现任务定时调度。 首先,我们需要理解Spring Boot与Quartz的整合基础。Spring Boot简化了Quartz的集成过程,我们可以通过添加相应的依赖来引入Quartz。在`...
结合使用Quartz.NET和TopShelf,我们可以构建一个在Windows服务中运行的定时任务调度系统。 Quartz.NET的特性包括: 1. **灵活的调度**:Quartz.NET支持多种调度模式,如简单触发器、cron触发器,可以按照精确时间...
Quartz.NET是一个强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。它提供了高度灵活的调度功能,使得开发者可以轻松地定义和控制任务的执行时间。在"Quartz.net作业调度自定义定时执行任务多任务执行...
总结,Quartz.NET v3.0.7.0提供了强大的任务调度功能,通过QuartzDemo项目,你可以深入理解其工作原理,并将其应用于实际项目中,实现灵活、高效的任务调度。在实践中,需要注意合理设计作业和触发器,确保任务的...
在“quartz 定时任务调度”这个主题中,我们将深入探讨Quartz的主要特性、如何使用cron表达式以及在MVC版本中的应用,同时也会提及插件部署。 1. **Quartz简介** Quartz是一个开源的作业调度库,它允许开发人员将...
Java 是一种广泛使用的编程语言,尤其在企业级应用中,而 Quartz 将 Java 的强大功能与灵活的定时任务调度相结合,为开发者提供了强大的工具。 在描述中提到的"quartz java定时调度代码"示例,它演示了如何配置和...
在这个"quartz定时调度完整实例"中,我们将深入理解Quartz的工作原理和如何在项目中实际应用。 1. **Quartz简介** - Quartz是Cron-like和Calendar-based作业调度的Java实现,它允许开发人员在应用程序中定义、安排...
【标题】"C# quartz.net 定时任务源码 可以远程控制"涉及的核心知识点主要集中在C#编程语言、Quartz.NET库以及系统服务的安装与管理。Quartz.NET是一个开源的作业调度框架,它允许开发人员在.NET环境中创建和执行...
Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...
在IT行业中,定时调度任务服务是不可或缺的一部分,它使得系统能够按预设的时间间隔自动执行某些任务,提高了工作效率并降低了人为操作的复杂性。本文将深入探讨如何利用C#语言,结合Quartz.NET任务调度库以及Log4...
Spring Quartz是一个强大的、开源的作业调度框架,允许开发者定义和执行复杂的定时任务。然而,当多个服务器实例并行运行时,如果不采取适当的策略,同一定时任务可能会在每个服务器上都执行,导致数据不一致和资源...
在IT行业中,Spring框架是Java企业级应用开发的首选,而Quartz则是一个强大的任务调度库,能够帮助我们实现应用程序中的定时任务。本篇将详细探讨如何在Spring中结合Quartz进行定时调度,并通过Maven进行项目部署。 ...
Quartz3.0定时任务学习之异步调度器
spring3.2.4+quartz2.2.0 定时调度例子,能正常运行的程序
在这个场景中,我们关注的是Quartz3.0.1.0版本,它提供了对Job调度的更高效和灵活的支持。"Job scheduling"是Quartz的核心功能,允许开发者定义一系列的任务(Job)并设置触发器(Trigger)来决定何时执行这些任务。...
本文将深入探讨Spring 3.0中的定时任务实现,并结合Quartz库来进一步扩展定时任务的能力。 首先,我们要了解Spring 3.0中的定时任务主要依赖于`org.springframework.scheduling`包。这个包提供了`TaskExecutor`接口...
Spring Quartz 定时调度是Java应用中广泛使用的任务调度框架,它允许开发者在Spring应用程序上下文中定义和管理定时任务。这个jar包包含了Spring与Quartz的整合,使得开发者能够利用Quartz的强大功能,同时享受...