- 浏览: 7339201 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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的服务,下面实例为Quartz2.0中EJB2.0的支持。
EJBInvokerJob的源代码如下:
public class EJBInvokerJob implements Job { /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Constants. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ 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 PROVIDER_URL = "java.naming.provider.url"; public static final String PRINCIPAL = "java.naming.security.principal"; public static final String CREDENTIALS = "java.naming.security.credentials"; /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Constructors. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ public EJBInvokerJob() { // nothing } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Interface. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap dataMap = context.getMergedJobDataMap(); String ejb = dataMap.getString(EJB_JNDI_NAME_KEY); String method = dataMap.getString(EJB_METHOD_KEY); Object[] arguments = (Object[]) dataMap.get(EJB_ARGS_KEY); if (arguments == null) { arguments = new Object[0]; } if (ejb == null) { // must specify remote home throw new JobExecutionException(); } InitialContext jndiContext = null; // get initial context try { jndiContext = getInitialContext(dataMap); } catch (NamingException ne) { throw new JobExecutionException(ne); } try { Object value = null; // locate home interface try { value = jndiContext.lookup(ejb); } catch (NamingException ne) { throw new JobExecutionException(ne); } // get home interface EJBHome ejbHome = (EJBHome) PortableRemoteObject.narrow(value, EJBHome.class); // get meta data EJBMetaData metaData = null; try { metaData = ejbHome.getEJBMetaData(); } catch (RemoteException re) { throw new JobExecutionException(re); } // get home interface class Class homeClass = metaData.getHomeInterfaceClass(); // get remote interface class Class remoteClass = metaData.getRemoteInterfaceClass(); // get home interface ejbHome = (EJBHome) PortableRemoteObject.narrow(ejbHome, homeClass); Method methodCreate = null; try { // create method 'create()' on home interface methodCreate = homeClass.getMethod("create", ((Class[])null)); } catch (NoSuchMethodException nsme) { throw new JobExecutionException(nsme); } // create remote object EJBObject remoteObj = null; try { // invoke 'create()' method on home interface remoteObj = (EJBObject) methodCreate.invoke(ejbHome, ((Object[])null)); } catch (IllegalAccessException iae) { throw new JobExecutionException(iae); } catch (InvocationTargetException ite) { throw new JobExecutionException(ite); } // execute user-specified method on remote object Method methodExecute = null; try { // create method signature Class[] argTypes = (Class[]) dataMap.get(EJB_ARG_TYPES_KEY); if (argTypes == null) { argTypes = new Class[arguments.length]; for (int i = 0; i < arguments.length; i++) { argTypes[i] = arguments[i].getClass(); } } // get method on remote object methodExecute = remoteClass.getMethod(method, argTypes); } catch (NoSuchMethodException nsme) { throw new JobExecutionException(nsme); } try { // invoke user-specified method on remote object Object returnObj = methodExecute.invoke(remoteObj, arguments); // Return any result in the JobExecutionContext so it will be // available to Job/TriggerListeners context.setResult(returnObj); } catch (IllegalAccessException iae) { throw new JobExecutionException(iae); } catch (InvocationTargetException ite) { throw new JobExecutionException(ite); } } finally { // Don't close jndiContext until after method execution because // WebLogic requires context to be open to keep the user credentials // available. See JIRA Issue: QUARTZ-401 if (jndiContext != null) { try { jndiContext.close(); } catch (NamingException e) { // Ignore any errors closing the initial context } } } } private InitialContext getInitialContext(JobDataMap jobDataMap) throws NamingException { Hashtable params = new Hashtable(2); String initialContextFactory = jobDataMap.getString(INITIAL_CONTEXT_FACTORY); if (initialContextFactory != null) { params.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory); } String providerUrl = jobDataMap.getString(PROVIDER_URL); if (providerUrl != null) { params.put(Context.PROVIDER_URL, providerUrl); } String principal = jobDataMap.getString(PRINCIPAL); if ( principal != null ) { params.put( Context.SECURITY_PRINCIPAL, principal ); } String credentials = jobDataMap.getString(CREDENTIALS); if ( credentials != null ) { params.put( Context.SECURITY_CREDENTIALS, credentials ); } return (params.size() == 0) ? new InitialContext() : new InitialContext(params); } }
自定义EJBHome接口:
package com.easyway.app.ejb; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; /** * Home接口的方法 * @author longgangbai * */ public interface HelloWorldHome extends EJBHome { HelloWorldRemote create() throws RemoteException, CreateException; }
EJB远程接口:
package com.easyway.app.ejb; import java.rmi.RemoteException; import javax.ejb.EJBObject; /** * 远程接口 * @author longgangbai * */ public interface HelloWorldRemote extends EJBObject { public String sayHello(String country,String cityName) throws RemoteException; }
EJB的bean类:
package com.easyway.app.ejb; import java.rmi.RemoteException; import javax.ejb.EJBException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; /** * 會話bean的实现 * * (必须有会话bean的5个状态,可以为空实现,和远程接口中要实现的方法, * 把实现方法写在一个类里,每次 new一个类的对象,返回一个实现方法给Bean) * * @author longgangbai * */ public class HelloWorldBean implements SessionBean { /** * */ private static final long serialVersionUID = 1L; public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException { System.out.println("set session context"); } public void ejbCreate() throws EJBException { System.out.println("ejb create"); } public void ejbRemove() throws EJBException, RemoteException { System.out.println("ejb remove"); } public void ejbActivate() throws EJBException, RemoteException { System.out.println("ejb activate"); } public void ejbPassivate() throws EJBException, RemoteException { System.out.println("ejb passivate"); } /** * 自定义的EJB的方法 * @param country * @param cityName * @return * @throws RemoteException */ public String sayHello(String country,String cityName) throws RemoteException { String helloworld="your are in "+country+" on "+cityName+"Welecome to ejb2.0,HXL"; System.out.println("helloworld="+helloworld); return helloworld; } }
在META-INF包下的ejb-jar.xml配置如下:
<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <description>ejb</description> <display-name>quartzEJB2</display-name> <!-- 配置会话bean的信息 --> <enterprise-beans> <session> <display-name>helloEJB</display-name> <ejb-name>helloEJB</ejb-name> <home>com.easyway.app.ejb.HelloWorldHome</home> <remote> com.easyway.app.ejb.HelloWorldRemote </remote> <ejb-class> com.easyway.app.ejb.HelloWorldBean </ejb-class> <session-type>Stateful</session-type> <transaction-type>Bean</transaction-type> </session> </enterprise-beans> </ejb-jar>
jboss配置如下:
jboss.xml内容如下:
<?xml version="1.0" encoding="gb2312"?> <!-- <jndi-name>元素的值必须在容器中唯一 --> <jboss> <enterprise-beans> <session> <ejb-name>helloEJB</ejb-name> <jndi-name>ejb/helloEJB</jndi-name> </session> </enterprise-beans> </jboss>
创建触发器和相关的job调用
package com.easyway.app.ejb; import static org.quartz.CronScheduleBuilder.cronSchedule; import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger; import java.text.ParseException; import java.util.Date; import org.quartz.CronTrigger; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.SchedulerMetaData; import org.quartz.impl.StdSchedulerFactory; import org.quartz.jobs.ee.ejb.EJBInvokerJob; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 调用EJB2.0的定时任务 * @author longgangbai * */ public class QuartzEjb2Main { /** * * @param args * @throws SchedulerException * @throws ParseException */ public static void main(String[] args) throws SchedulerException, ParseException { Logger log = LoggerFactory.getLogger(QuartzEjb2Main.class); log.info("------- Initializing -------------------"); // First we must get a reference to a scheduler //创建调度任务工厂 SchedulerFactory sf = new StdSchedulerFactory(); //创建调度对象 Scheduler sched = sf.getScheduler(); log.info("------- Scheduling Jobs ----------------"); // jobs can be scheduled before sched.start() has been called // job 1 will run every 20 seconds //创建一个定时任务 JobDetail job = newJob(EJBInvokerJob.class) .withIdentity("job1", "group1") .build(); //创建Cron触发器 CronTrigger trigger = newTrigger() .withIdentity("trigger1", "group1") .withSchedule(cronSchedule("0/20 * * * * ?")) .build(); //创建一个初始化任务的信息 // pass initialization parameters into the job JobDataMap jobDataMap=job.getJobDataMap(); //设置EJB的JNDI名称 jobDataMap.put(EJBInvokerJob.EJB_JNDI_NAME_KEY, "ejb/helloEJB"); //设置ejb的调用方法名称 jobDataMap.put(EJBInvokerJob.EJB_METHOD_KEY, "sayHello"); //设置ejb输入参数的类型 jobDataMap.put(EJBInvokerJob.EJB_ARG_TYPES_KEY,new Class[]{ String.class,String.class}); //设置输入类型的参数值 jobDataMap.put(EJBInvokerJob.EJB_ARGS_KEY,new Object[]{ "china","shanghai"}); //设置EJB的初始化参数 jobDataMap.put(EJBInvokerJob.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); //jobDataMap.put(EJBInvokerJob.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces"); //设置EBJ的uri路径 jobDataMap.put(EJBInvokerJob.PROVIDER_URL, "jnp://localhost:1099"); //设置调用相关的任务和触发器信息 Date ft = sched.scheduleJob(job, trigger); log.info(job.getKey() + " has been scheduled to run at: " + ft + " and repeat based on expression: " + trigger.getCronExpression()); //启动相关的的调度信息 sched.start(); log.info("------- Started Scheduler -----------------"); log.info("------- Waiting five minutes... ------------"); try { // wait five minutes to show jobs Thread.sleep(300L * 1000L); // executing... } catch (Exception e) { } log.info("------- Shutting Down ---------------------"); //关闭相关的调度 sched.shutdown(true); log.info("------- Shutdown Complete -----------------"); SchedulerMetaData metaData = sched.getMetaData(); log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs."); } }
发表评论
-
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 2456TestNG官方网站: http://testng.or ... -
TestNG简单的学习(六)测试工厂注释的使用
2013-12-02 09:22 2785TestNG官方网站: http://testng.or ... -
TestNG简单的学习(五)参数化测试数据的定制
2013-12-02 09:22 2703TestNG官方网站: http://testng.or ... -
TestNG简单的学习(四)测试方法通过名称名称依赖实现
2013-12-02 09:21 2083TestNG官方网站: http://testng.or ... -
TestNG简单的学习(三)测试方法通过测试分组依赖实现
2013-12-02 09:21 2830TestNG官方网站: http://testng.or ... -
TestNG简单的学习(二)参数化测试并发且多方法测试方法判定
2013-11-29 15:35 3702TestNG官方网站: http://testng.or ... -
TestNG简单的学习(一)类和方法级别@Test的区别
2013-11-29 15:31 9426TestNG官方文档的地址: http://testng ... -
Feed4Junit的简单使用(七)Feed4TestNg
2013-11-29 13:35 6133在Feed4Junit主要针对junit实现的 ... -
Feed4Junit的简单使用(六)数据来特定格式文件
2013-11-29 12:29 2767Feed4Junit官方地址: http://da ... -
Feed4Junit的简单使用(五)数据来自动态约束数据
2013-11-29 12:29 2631Feed4Junit官方地址: http://datab ... -
Feed4Junit的简单使用(四)数据来自定义数据源
2013-11-28 14:09 3103Feed4Junit官方地址: http://databe ... -
Feed4Junit的简单使用(三)数据源来自数据库
2013-11-28 13:58 3170Feed4Junit官方地址: http://databe ... -
Feed4Junit的简单使用(二)数据源来自文件
2013-11-28 13:50 4572Feed4Junit官方地址: http://datab ... -
Feed4Junit的简单使用(一)
2013-11-28 13:47 2215Feed4Junit官方地址: http://databe ...
相关推荐
quartz 2.2.1 定时调度 java 最新版jar
Quartz是一款开源的作业调度框架,它允许开发者创建、组织和执行定时任务。在Java开发环境中,Quartz被广泛用于实现应用程序的自动化任务调度。这个压缩包“quartz动态定时调度完整代码”提供了使用Quartz进行动态...
标题中的“spring2.0 Quartz 执行每天定时任务 普通普是执行任务”涉及到的是在Spring 2.0框架中使用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 定时任务调度”这个主题中,我们将深入探讨Quartz的主要特性、如何使用cron表达式以及在MVC版本中的应用,同时也会提及插件部署。 1. **Quartz简介** Quartz是一个开源的作业调度库,它允许开发人员将...
Java 是一种广泛使用的编程语言,尤其在企业级应用中,而 Quartz 将 Java 的强大功能与灵活的定时任务调度相结合,为开发者提供了强大的工具。 在描述中提到的"quartz java定时调度代码"示例,它演示了如何配置和...
在这个"quartz定时调度完整实例"中,我们将深入理解Quartz的工作原理和如何在项目中实际应用。 1. **Quartz简介** - Quartz是Cron-like和Calendar-based作业调度的Java实现,它允许开发人员在应用程序中定义、安排...
spring2.0 使用 Quartz 必备包 里面有: quartz-all-1.5.2.jar spring-support.jar 适合:SSH框架 spring2.0 strut2.0 hibernate3.2等
【标题】"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进行项目部署。 ...
在Spring Boot 2.0中整合Quartz,可以利用这些新特性来构建更高效、更灵活的定时任务系统。 整合Quartz与Spring Boot 2.0的方式主要是通过`spring-boot-starter-quartz`模块。这个模块提供了与Spring Boot自动配置...
spring3.2.4+quartz2.2.0 定时调度例子,能正常运行的程序
总结来说,这些资料涵盖了企业级Java开发中的关键领域:Quartz的定时任务调度,EJB的接口设计原则,以及利用iText进行PDF文档处理。学习并掌握这些技术,将有助于提升你在Java EE开发中的专业水平,使你能够构建更加...
Quartz定时调度样例 Quartz是 Java 中的一种流行的开源作业调度框架,广泛应用于各种企业级应用系统。它提供了强大的作业调度功能,允许开发者轻松地创建和管理各种类型的作业。今天,我们将通过一个简单的示例来...