You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@batchee.apache.org by st...@apache.org on 2014/04/26 00:28:43 UTC

git commit: BATCHEE-28 provide injection in all batch lifecycle phases

Repository: incubator-batchee
Updated Branches:
  refs/heads/master 876e0542d -> 703d241c4


BATCHEE-28 provide injection in all batch lifecycle phases

We can do this now due to having a single place in our new
proxy handling.


Project: http://git-wip-us.apache.org/repos/asf/incubator-batchee/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-batchee/commit/703d241c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-batchee/tree/703d241c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-batchee/diff/703d241c

Branch: refs/heads/master
Commit: 703d241c47215468f1e9837e3f47032148ff5f88
Parents: 876e054
Author: Mark Struberg <st...@apache.org>
Authored: Sat Apr 26 00:27:37 2014 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Sat Apr 26 00:27:37 2014 +0200

----------------------------------------------------------------------
 .../proxy/BatchProxyInvocationHandler.java      |  4 ++++
 .../batchee/container/proxy/ProxyFactory.java   |  2 +-
 .../batchee/test/mock/InjectionsMock.java       | 25 +++++++++++++++++++-
 3 files changed, 29 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-batchee/blob/703d241c/jbatch/src/main/java/org/apache/batchee/container/proxy/BatchProxyInvocationHandler.java
----------------------------------------------------------------------
diff --git a/jbatch/src/main/java/org/apache/batchee/container/proxy/BatchProxyInvocationHandler.java b/jbatch/src/main/java/org/apache/batchee/container/proxy/BatchProxyInvocationHandler.java
index 412b77e..7decab4 100644
--- a/jbatch/src/main/java/org/apache/batchee/container/proxy/BatchProxyInvocationHandler.java
+++ b/jbatch/src/main/java/org/apache/batchee/container/proxy/BatchProxyInvocationHandler.java
@@ -50,6 +50,7 @@ public class BatchProxyInvocationHandler implements InvocationHandler {
 
     @Override
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+        InjectionReferences oldInjectionRefs = ProxyFactory.setInjectionReferences(this.injectionRefs);
         try {
             return method.invoke(delegate, args);
         } catch (Throwable e) {
@@ -67,6 +68,9 @@ public class BatchProxyInvocationHandler implements InvocationHandler {
             }
 
             throw e;
+        } finally {
+            ProxyFactory.setInjectionReferences(oldInjectionRefs);
         }
+
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-batchee/blob/703d241c/jbatch/src/main/java/org/apache/batchee/container/proxy/ProxyFactory.java
----------------------------------------------------------------------
diff --git a/jbatch/src/main/java/org/apache/batchee/container/proxy/ProxyFactory.java b/jbatch/src/main/java/org/apache/batchee/container/proxy/ProxyFactory.java
index bbf15a6..45ffb6c 100755
--- a/jbatch/src/main/java/org/apache/batchee/container/proxy/ProxyFactory.java
+++ b/jbatch/src/main/java/org/apache/batchee/container/proxy/ProxyFactory.java
@@ -38,7 +38,7 @@ import javax.batch.api.partition.PartitionReducer;
  * Introduce a level of indirection so proxies are not instantiated directly by newing them up.
  */
 public class ProxyFactory {
-    static final ThreadLocal<InjectionReferences> INJECTION_CONTEXT = new ThreadLocal<InjectionReferences>();
+    private static final ThreadLocal<InjectionReferences> INJECTION_CONTEXT = new ThreadLocal<InjectionReferences>();
 
     private ProxyFactory() {
         // private utility class ct

http://git-wip-us.apache.org/repos/asf/incubator-batchee/blob/703d241c/jbatch/src/test/java/org/apache/batchee/test/mock/InjectionsMock.java
----------------------------------------------------------------------
diff --git a/jbatch/src/test/java/org/apache/batchee/test/mock/InjectionsMock.java b/jbatch/src/test/java/org/apache/batchee/test/mock/InjectionsMock.java
index 55a98de..bbb0c16 100644
--- a/jbatch/src/test/java/org/apache/batchee/test/mock/InjectionsMock.java
+++ b/jbatch/src/test/java/org/apache/batchee/test/mock/InjectionsMock.java
@@ -18,18 +18,41 @@ package org.apache.batchee.test.mock;
 
 import javax.batch.api.AbstractBatchlet;
 import javax.batch.api.BatchProperty;
+import javax.batch.runtime.context.JobContext;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
 import javax.inject.Inject;
 import javax.inject.Named;
 import java.net.URL;
 
+import org.testng.Assert;
+
 @Named("injected")
 public class InjectionsMock extends AbstractBatchlet {
     @Inject
     @BatchProperty
     private URL url;
 
+    @Inject
+    private JobContext jobContext;
+
+    @Inject
+    private BeanManager beanManager;
+
     @Override
     public String process() throws Exception {
-        return url.toExternalForm().equals("http://batchee.incubator.org") + "";
+        Assert.assertTrue(url.toExternalForm().equals("http://batchee.incubator.org"));
+        Assert.assertNotNull(jobContext);
+        Assert.assertEquals(jobContext.getJobName(), "injections");
+
+        // now check whether injection also works during the runtime of the batch
+        // this is needed if you e.g have a NormalScoped bean which only now gets initialized.
+        Assert.assertNotNull(beanManager);
+        Bean<?> bean = beanManager.resolve(beanManager.getBeans(JobContext.class));
+        JobContext jc = (JobContext) beanManager.getReference(bean, JobContext.class, beanManager.createCreationalContext(bean));
+        Assert.assertNotNull(jc);
+        Assert.assertEquals(jc.getJobName(), "injections");
+
+        return "true";
     }
 }