`
liugang594
  • 浏览: 987573 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Eclipse中Job API使用总结如下一

阅读更多

 1. 一般的长时间的后台工作都应该使用JobJob可分为三个等级:

            *         System级:对用户没有反馈

            *         Default级:在状态栏中有反馈

            *         User级:  有一个进度条对话框,可取消和后台运行 

一般使用如下:

		Job job = new Job("Long Running Job") {
			protected IStatus run(IProgressMonitor monitor) {
				try {
					while (hasMoreWork) {
						// do some work
						// ...
						if (monitor.isCanceled()) {
							return Status.CANCEL_STATUS;
						}
					}
				} finally {
					schedule(60000);
					// start again in an hour
				}
				return Status.OK_STATUS;
			}
		};
		job.addJobChangeListener(new JobChangeAdapter() {
			public void done(IJobChangeEvent event) {
				if (event.getResult().isOK()) {
					// postMessage("Job completed successfully");
				} else { // postError("Job did not complete successfully");

				}
			}
		});
		job.setSystem(true);
		job.schedule(); // start as soom as possible

 2. 如果有多个Job要运行,并且想统一管理的话,可以使用Job族。一个Job族可以对一组Job进行统一的操作

管理,如:cancel, find, join, sleep, wakeUp等等。一般使用如下:

 

      1. 定义一个Job族类:

 

class FamilyMember extends Job {
	private String lastName;

	public FamilyMember(String firstName, String lastName) {
		super(firstName + " " + lastName);
		this.lastName = lastName;
	}

	protected IStatus run(IProgressMonitor monitor) {
		// Take care of family business
		return Status.OK_STATUS;
	}

	public boolean belongsTo(Object family) {
		return lastName.equals(family);
	}
}
 

 

     2. 管理一组族内的Job:

 

//Create some family members and schedule them 
new FamilyMember("Bridget", "Jones").schedule(); 
new FamilyMember("Tom", "Jones").schedule(); 
new FamilyMember("Indiana", "Jones").schedule(); 
// Obtain the Platform job manager 
IJobManager manager = Platform.getJobManager(); 
// put the family to sleep 
manager.sleep("Jones"); 
// put the family to sleep for good! 
manager.cancel("Jones"); //canceled
 

 

 

3. 为了避免死锁,需要对多个job之间资源访问进行管理和控制,这是通过定义调度规则来实现的(Scheduling rules)。每个调度规则都是ISchedulingRule的实现,通常使用如下:

 

ISchedulingRule myRule = ... ;

job.setSchedulingRule(myRule); 

 

    ISchedulingRule接口中定义了两个方法,如下: 

 

public interface ISchedulingRule { 

//用来判断是否冲突 

public boolean isConflicting(ISchedulingRule rule); 

//用来判断所需要条件的满足 

public boolean contains(ISchedulingRule rule); 

 

Eclipse中所有资源类都实现了接口ISchedulingRule,所以本身就是一个规则类。通常使用如下:

 

            1. job.setRule(null):此时所操作的资源的锁会一个一个的去取得

            2. 使用MultiRule通常来说我们都应该使用第二种方式,因为第一种方式是可打断的!

 

         下面就介绍多个规则的使用。一般使用多个规则都是通常以下方式实现的: 

 

	public ISchedulingRule createRule(IFile[] files) {
		ISchedulingRule combinedRule = null;
		IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace()
				.getRuleFactory();
		for (int i = 0; i < files.length; i++) {
			ISchedulingRule rule = ruleFactory.createRule(files[i]);
			combinedRule = MultiRule.combine(rule, combinedRule);
		}
		return combinedRule;
	}
 

这就是,我们把所要访问到的锁都合并在一起,然后得到这些锁后再操作,这就避免了整个工作空间的锁定:

分享到:
评论
1 楼 xiaguangme 2013-04-19  
写的不错。

相关推荐

    Eclipse集成JBPM

    案例中使用的版本为jBPM-JPDL3.2.2。 - **下载地址**: [http://labs.jboss.com/jbossjbpm/jbpm_downloads/](http://labs.jboss.com/jbossjbpm/jbpm_downloads/) - **下载内容**: jPDL Suite版,该版本包含了完整的...

    sqoop2 java API从oracle导数据到HDFS开发总结新

    本例中使用的版本为`sqoop-1.99.7-bin-hadoop200.tar.gz`。按照官方文档指导进行安装,具体可参考链接:[http://sqoop.apache.org/docs/1.99.7/admin/Installation.html]...

    使用elipse连接Hadoop

    标题“使用Eclipse连接Hadoop”意味着我们要探讨的是如何在流行的Java开发环境Eclipse中配置和使用Hadoop相关的工具,以便开发和调试MapReduce程序。Hadoop是一个分布式计算框架,而Eclipse则是一个广泛用于Java开发...

    java kettle api pom maven jar

    通过导入这些文件到你的IDE(如IntelliJ IDEA或Eclipse),你可以运行这个示例,了解如何在实际项目中使用Kettle API。 总之,通过Java Kettle API,开发者可以将Pentaho Data Integration的功能无缝集成到Java应用...

    Quartz总结

    例如,一个简单的Job实现可能如下: ```java import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class ...

    kettle 链接 mqtt 协议所需包

    4. **文档和教程**:为了帮助用户理解如何在Kettle中使用MQTT,压缩包可能包含详细的操作指南、API参考或者示例工作流,说明如何创建和配置MQTT连接,以及如何在ETL过程中使用MQTT数据源和目标。 5. **示例项目**:...

    hadoop idea插件

    Hadoop Idea插件是专门为开发者设计的,旨在提供在Idea中直接操作和管理Hadoop集群的功能,类似于Eclipse中的HDFS插件,使得开发和调试Hadoop应用程序更为便捷。 安装Hadoop Idea插件的过程如下: 1. 打开IntelliJ...

    activiti.zip

    在 IDE(如 IntelliJ IDEA 或 Eclipse)中,选择“新建项目”并选择 Maven 项目模板。填写项目的 Group ID、Artifact ID 和 Version,这些信息将定义项目的唯一标识。 接着,我们需要在项目的 `pom.xml` 文件中添加...

    java代码-大数据1班 01 陈瑞杰

    例如,它可能指导学生如何设置Java开发环境(JDK),如何使用集成开发环境(IDE)如IntelliJ IDEA或Eclipse,以及如何运行和理解`main.java`中的代码示例。 在大数据处理方面,Java以其强类型、面向对象的特性,...

    Smart2.0 用户手册

    1. **创建项目**:在集成开发环境中创建一个新的 Maven 项目。 2. **修改 pom.xml 文件**:在 `pom.xml` 文件中添加 Smart 框架的依赖。 3. **修改 web.xml 文件**:配置 Web 应用的基本设置。 4. **新增 config....

Global site tag (gtag.js) - Google Analytics