diff --git a/pom.xml b/pom.xml
index 9e8c8b3..c86861c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,6 +103,12 @@
3.0
compile
+
+ com.google.guava
+ guava
+ r09
+ compile
+
junit
junit
diff --git a/src/main/java/org/nnsoft/guice/guartz/InjectorJobFactory.java b/src/main/java/org/nnsoft/guice/guartz/InjectorJobFactory.java
index be5e3bc..028fd98 100644
--- a/src/main/java/org/nnsoft/guice/guartz/InjectorJobFactory.java
+++ b/src/main/java/org/nnsoft/guice/guartz/InjectorJobFactory.java
@@ -19,6 +19,8 @@
import javax.inject.Inject;
import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.spi.JobFactory;
@@ -33,7 +35,7 @@ final class InjectorJobFactory
implements JobFactory
{
- /**
+ /**
* The delegated {@link Injector}.
*/
@Inject
@@ -55,8 +57,36 @@ public void setInjector( Injector injector )
public Job newJob( TriggerFiredBundle bundle, Scheduler scheduler )
throws SchedulerException
{
- Class extends Job> jobClass = bundle.getJobDetail().getJobClass();
- return this.injector.getInstance( jobClass );
+ final Class extends Job> jobClass = bundle.getJobDetail().getJobClass();
+
+ Job decorator = new JobScopeDecorator(jobClass);
+
+ return decorator;
+ }
+
+ private final class JobScopeDecorator implements Job {
+
+ private final Class extends Job> decoratedJobClass;
+
+ Job decorated;
+
+ private JobScopeDecorator(Class extends Job> jobClass) {
+ this.decoratedJobClass = jobClass;
+ }
+
+ public void execute(JobExecutionContext context) throws JobExecutionException
+ {
+ // See http://code.google.com/p/google-guice/wiki/CustomScopes#Triggering_the_Scope
+ final QuartzJobScope scope = InjectorJobFactory.this.injector.getInstance( QuartzJobScope.class );
+ scope.enter();
+ try
+ {
+ decorated = InjectorJobFactory.this.injector.getInstance( decoratedJobClass );
+ decorated.execute( context );
+ } finally {
+ scope.exit();
+ }
+ }
}
}
diff --git a/src/main/java/org/nnsoft/guice/guartz/QuartzJobScope.java b/src/main/java/org/nnsoft/guice/guartz/QuartzJobScope.java
new file mode 100644
index 0000000..5fcb31a
--- /dev/null
+++ b/src/main/java/org/nnsoft/guice/guartz/QuartzJobScope.java
@@ -0,0 +1,91 @@
+package org.nnsoft.guice.guartz;
+
+import static com.google.common.base.Preconditions.checkState;
+import com.google.common.collect.Maps;
+import com.google.inject.Key;
+import com.google.inject.OutOfScopeException;
+import com.google.inject.Provider;
+import com.google.inject.Scope;
+import java.util.Map;
+
+/**
+ * Scopes a Quartz Job Execution.
+ *
+ * Based on: http://code.google.com/p/google-guice/wiki/CustomScopes#Implementing_Scope
+ *
+ * @author Bruno Medeiros
+ */
+public class QuartzJobScope implements Scope
+{
+
+ private static final Provider