- 浏览: 7256991 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 10719Django resources This page li ... -
使用国内镜像源来加速python pypi包的安装
2014-01-16 11:16 197579pipy国内镜像目前有: http://pypi.d ... -
[转 ]vagrant使用简介
2014-01-10 13:53 256191> 简介: vagrant提供了易于配置,重复性 ... -
[转]在Java中调用Python
2014-01-07 13:08 9144在执行之前都需要把jython对应的包加载进去,这个是必须的 ... -
[转]Eclipse配置PyDev插件
2014-01-02 14:25 2785安装python解释器 安装PyDev: 首 ... -
RestFuse的研究(五) Http请求的封装
2014-06-14 15:50 3521在RestFuse中封装了Http请 ... -
RestFuse的研究(四) Junit的Statement的分析
2013-12-06 11:46 1610在RestFuse提供了多种单 ... -
RestFuse的研究(三) Junit的Rule的使用和分析
2013-12-06 11:01 2194在junit中定义一些可以公用的规则(R ... -
RestFuse的研究(二) Junit的Runner的分类和模式
2013-12-06 10:40 1560在Junit4中的调用JunitCore可以采 ... -
RestFuse的研究(一) HttpJunitRunner的实现
2013-12-06 10:11 1698在RestFuse是一种针对Rest We ... -
[转]An open-source JUnit extension to test HTTP/REST APIs
2013-12-06 09:57 1055http://developer.eclipsesource ... -
TestNG简单的学习(十三)TestNG中Junit的实现
2013-12-04 09:00 3291TestNG和junit的整合 ... -
TestNG简单的学习(十二)TestNG运行
2013-12-03 09:08 51456文档来自官方地址: ... -
TestNG简单的学习(十一)TestNG学习总结
2013-12-03 09:08 14000最近一直在学习关于TestNG方面的知识,根 ... -
TestNG简单的学习(十)TestNG @Listeners 的使用
2013-12-03 09:07 8630TestNG官方网站: http://testng.or ... -
TestNG简单的学习(九)TestNG Method Interceptors 的使用
2013-12-03 09:07 2662TestNG官方网站: http://testng ... -
TestNG简单的学习(八)TestNG Annotation Transformers 的使用
2013-12-03 09:07 2762TestNG官方网站: http://testng.or ... -
TestNG简单的学习(七)TestNG编程方式运行
2013-12-02 09:22 2402TestNG官方网站: http://testng.or ... -
TestNG简单的学习(六)测试工厂注释的使用
2013-12-02 09:22 2719TestNG官方网站: http://testng.or ... -
TestNG简单的学习(五)参数化测试数据的定制
2013-12-02 09:22 2647TestNG官方网站: http://testng.or ...
相关推荐
quartz 2.2.1 定时调度 java 最新版jar
quartz 定时任务调度支持cron表达式,mvc版本,支持插件部署
SpringBoot整合Quartz任务定时调度,可以参考我的博客进行学习https://blog.csdn.net/sujin_/article/details/80615823
quartz定时调度完整实例 完美调度quartz定时调度完整实例 完美调度
quartz java定时调度代码,例子中每一分钟执行一次,可修改任意时间。rar
Quartz.net作业调度自定义定时执行任务多任务执行c#,定时执行任务,如超时取消订单,自动确认收货等等
spring整合quartz定时任务调度..........
Spring中集成的一个定时任务调度器,以备以后使用
Java使用quartz实现任务调度定时任务
没有jar包的可以去http://blog.csdn.net/u012291718/article/details/61914649
spring3.2.4+quartz2.2.0 定时调度例子,能正常运行的程序
quartz-1.8.4 定时调度 timer quartz.jar
基于web开发的quartz定时任务调度整合配置源码....
Quartz定时调度
使用Quartz.net v3.0.7.0的任务调度demo,操作步骤见https://www.cnblogs.com/OwenCao/p/9827760.html
quartz.net+TopShelf
Spring Quartz 定时调度任务,带中文注解与jar文件,导入项目即可直接运行。
Spring + quartz 定时任务修改定时时间不重启服务
quartz定时调度器动态修改执行时间不用配置文件