1. 一般的长时间的后台工作都应该使用Job,Job可分为三个等级:
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;
}
这就是,我们把所要访问到的锁都合并在一起,然后得到这些锁后再操作,这就避免了整个工作空间的锁定:
分享到:
相关推荐
案例中使用的版本为jBPM-JPDL3.2.2。 - **下载地址**: [http://labs.jboss.com/jbossjbpm/jbpm_downloads/](http://labs.jboss.com/jbossjbpm/jbpm_downloads/) - **下载内容**: jPDL Suite版,该版本包含了完整的...
本例中使用的版本为`sqoop-1.99.7-bin-hadoop200.tar.gz`。按照官方文档指导进行安装,具体可参考链接:[http://sqoop.apache.org/docs/1.99.7/admin/Installation.html]...
标题“使用Eclipse连接Hadoop”意味着我们要探讨的是如何在流行的Java开发环境Eclipse中配置和使用Hadoop相关的工具,以便开发和调试MapReduce程序。Hadoop是一个分布式计算框架,而Eclipse则是一个广泛用于Java开发...
通过导入这些文件到你的IDE(如IntelliJ IDEA或Eclipse),你可以运行这个示例,了解如何在实际项目中使用Kettle API。 总之,通过Java Kettle API,开发者可以将Pentaho Data Integration的功能无缝集成到Java应用...
例如,一个简单的Job实现可能如下: ```java import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class ...
4. **文档和教程**:为了帮助用户理解如何在Kettle中使用MQTT,压缩包可能包含详细的操作指南、API参考或者示例工作流,说明如何创建和配置MQTT连接,以及如何在ETL过程中使用MQTT数据源和目标。 5. **示例项目**:...
Hadoop Idea插件是专门为开发者设计的,旨在提供在Idea中直接操作和管理Hadoop集群的功能,类似于Eclipse中的HDFS插件,使得开发和调试Hadoop应用程序更为便捷。 安装Hadoop Idea插件的过程如下: 1. 打开IntelliJ...
在 IDE(如 IntelliJ IDEA 或 Eclipse)中,选择“新建项目”并选择 Maven 项目模板。填写项目的 Group ID、Artifact ID 和 Version,这些信息将定义项目的唯一标识。 接着,我们需要在项目的 `pom.xml` 文件中添加...
例如,它可能指导学生如何设置Java开发环境(JDK),如何使用集成开发环境(IDE)如IntelliJ IDEA或Eclipse,以及如何运行和理解`main.java`中的代码示例。 在大数据处理方面,Java以其强类型、面向对象的特性,...
1. **创建项目**:在集成开发环境中创建一个新的 Maven 项目。 2. **修改 pom.xml 文件**:在 `pom.xml` 文件中添加 Smart 框架的依赖。 3. **修改 web.xml 文件**:配置 Web 应用的基本设置。 4. **新增 config....