# ignite-47 Disable unnecessary injection. (cherry picked from commit 2c29387)
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/6717796e Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/6717796e Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/6717796e Branch: refs/heads/ignite-406 Commit: 6717796eb5f06f71c6da7d0fd8b0f03e960a6a7f Parents: 330a705 Author: sevdokimov <sevdoki...@gridgain.com> Authored: Sat Mar 7 21:14:48 2015 +0300 Committer: sevdokimov <sevdoki...@gridgain.com> Committed: Wed Mar 11 18:34:16 2015 +0300 ---------------------------------------------------------------------- .../closure/GridClosureProcessor.java | 49 ++++++++++++++------ .../resource/GridNoImplicitInjection.java | 25 ++++++++++ .../processors/resource/GridResourceField.java | 12 ++++- .../processors/resource/GridResourceIoc.java | 15 +++--- 4 files changed, 79 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6717796e/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java index f1558b3..4fb1bdb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java @@ -22,6 +22,7 @@ import org.apache.ignite.cluster.*; import org.apache.ignite.compute.*; import org.apache.ignite.internal.*; import org.apache.ignite.internal.processors.*; +import org.apache.ignite.internal.processors.resource.*; import org.apache.ignite.internal.util.*; import org.apache.ignite.internal.util.future.*; import org.apache.ignite.internal.util.lang.*; @@ -1092,7 +1093,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { * Task that is free of dragged in enclosing context for the method * {@link GridClosureProcessor#runAsync(GridClosureCallMode, Collection, Collection)}. */ - private class T1 extends TaskNoReduceAdapter<Void> { + private class T1 extends TaskNoReduceAdapter<Void> implements GridNoImplicitInjection { /** */ private static final long serialVersionUID = 0L; @@ -1126,7 +1127,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { * Task that is free of dragged in enclosing context for the method * {@link GridClosureProcessor#runAsync(GridClosureCallMode, Runnable, Collection)}. */ - private class T2 extends TaskNoReduceAdapter<Void> { + private class T2 extends TaskNoReduceAdapter<Void> implements GridNoImplicitInjection { /** */ private static final long serialVersionUID = 0L; @@ -1157,7 +1158,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { * Task that is free of dragged in enclosing context for the method * {@link GridClosureProcessor#forkjoinAsync(GridClosureCallMode, Collection, org.apache.ignite.lang.IgniteReducer, Collection)} */ - private class T3<R1, R2> extends GridPeerDeployAwareTaskAdapter<Void, R2> { + private class T3<R1, R2> extends GridPeerDeployAwareTaskAdapter<Void, R2> implements GridNoImplicitInjection { /** */ private static final long serialVersionUID = 0L; @@ -1210,7 +1211,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { /** */ - private static class T4 extends TaskNoReduceAdapter<Void> { + private static class T4 extends TaskNoReduceAdapter<Void> implements GridNoImplicitInjection { /** */ private static final long serialVersionUID = 0L; @@ -1241,7 +1242,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { /** */ - private static class T5<R> extends GridPeerDeployAwareTaskAdapter<Void, R> { + private static class T5<R> extends GridPeerDeployAwareTaskAdapter<Void, R> implements GridNoImplicitInjection { /** */ private static final long serialVersionUID = 0L; @@ -1284,7 +1285,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { * Task that is free of dragged in enclosing context for the method * {@link GridClosureProcessor#callAsync(GridClosureCallMode, Collection, Collection)} */ - private class T6<R> extends GridPeerDeployAwareTaskAdapter<Void, Collection<R>> { + private class T6<R> extends GridPeerDeployAwareTaskAdapter<Void, Collection<R>> implements GridNoImplicitInjection { /** */ private static final long serialVersionUID = 0L; @@ -1327,7 +1328,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { * Task that is free of dragged in enclosing context for the method * {@link GridClosureProcessor#callAsync(GridClosureCallMode, Callable, Collection)} */ - private class T7<R> extends GridPeerDeployAwareTaskAdapter<Void, R> { + private class T7<R> extends GridPeerDeployAwareTaskAdapter<Void, R> implements GridNoImplicitInjection { /** */ private static final long serialVersionUID = 0L; @@ -1365,7 +1366,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { /** */ - private static class T8<T, R> extends GridPeerDeployAwareTaskAdapter<Void, R> { + private static class T8<T, R> extends GridPeerDeployAwareTaskAdapter<Void, R> implements GridNoImplicitInjection { /** */ private static final long serialVersionUID = 0L; @@ -1409,7 +1410,8 @@ public class GridClosureProcessor extends GridProcessorAdapter { /** */ - private class T9<T, R> extends GridPeerDeployAwareTaskAdapter<Void, Collection<R>> { + private class T9<T, R> extends GridPeerDeployAwareTaskAdapter<Void, Collection<R>> + implements GridNoImplicitInjection { /** */ private static final long serialVersionUID = 0L; @@ -1460,7 +1462,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { /** */ - private class T10<T, R1, R2> extends GridPeerDeployAwareTaskAdapter<Void, R2> { + private class T10<T, R1, R2> extends GridPeerDeployAwareTaskAdapter<Void, R2> implements GridNoImplicitInjection { /** */ private static final long serialVersionUID = 0L; @@ -1526,7 +1528,8 @@ public class GridClosureProcessor extends GridProcessorAdapter { /** */ - private class T11<T, R> extends GridPeerDeployAwareTaskAdapter<Void, Collection<R>> { + private class T11<T, R> extends GridPeerDeployAwareTaskAdapter<Void, Collection<R>> + implements GridNoImplicitInjection { /** */ private static final long serialVersionUID = 0L; @@ -1574,7 +1577,8 @@ public class GridClosureProcessor extends GridProcessorAdapter { /** * */ - private static class C1<T, R> implements ComputeJob, Externalizable { + private static class C1<T, R> implements ComputeJob, Externalizable, GridNoImplicitInjection, + GridInternalWrapper<IgniteClosure> { /** */ private static final long serialVersionUID = 0L; @@ -1624,6 +1628,11 @@ public class GridClosureProcessor extends GridProcessorAdapter { } /** {@inheritDoc} */ + @Override public IgniteClosure userObject() { + return job; + } + + /** {@inheritDoc} */ @Override public String toString() { return S.toString(C1.class, this); } @@ -1665,7 +1674,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { /** * */ - private static class C2<R> implements ComputeJob, Externalizable { + private static class C2<R> implements ComputeJob, Externalizable, GridNoImplicitInjection, GridInternalWrapper<Callable> { /** */ private static final long serialVersionUID = 0L; @@ -1712,6 +1721,11 @@ public class GridClosureProcessor extends GridProcessorAdapter { } /** {@inheritDoc} */ + @Override public Callable userObject() { + return c; + } + + /** {@inheritDoc} */ @Override public String toString() { return S.toString(C2.class, this); } @@ -1751,7 +1765,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { /** */ - private static class C4 implements ComputeJob, Externalizable { + private static class C4 implements ComputeJob, Externalizable, GridNoImplicitInjection, GridInternalWrapper<Runnable> { /** */ private static final long serialVersionUID = 0L; @@ -1795,6 +1809,11 @@ public class GridClosureProcessor extends GridProcessorAdapter { } /** {@inheritDoc} */ + @Override public Runnable userObject() { + return r; + } + + /** {@inheritDoc} */ @Override public String toString() { return S.toString(C4.class, this); } @@ -1803,7 +1822,7 @@ public class GridClosureProcessor extends GridProcessorAdapter { /** * */ - private static class C4MLA extends C4 implements ComputeJobMasterLeaveAware{ + private static class C4MLA extends C4 implements ComputeJobMasterLeaveAware { /** */ private static final long serialVersionUID = 0L; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6717796e/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridNoImplicitInjection.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridNoImplicitInjection.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridNoImplicitInjection.java new file mode 100644 index 0000000..93b833d --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridNoImplicitInjection.java @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal.processors.resource; + +/** + * Disables injection. + */ +public interface GridNoImplicitInjection { + +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6717796e/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceField.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceField.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceField.java index 04f750f..6b921f4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceField.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceField.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.processors.resource; import org.apache.ignite.internal.util.typedef.internal.*; +import org.jetbrains.annotations.*; import java.lang.annotation.*; import java.lang.reflect.*; @@ -42,12 +43,14 @@ class GridResourceField { * @param field Field where resource should be injected. * @param ann Resource annotation. */ - GridResourceField(Field field, Annotation ann) { + GridResourceField(Field field, @Nullable Annotation ann) { assert field != null; assert ann != null || GridResourceUtils.mayRequireResources(field); this.field = field; this.ann = ann; + + field.setAccessible(true); } /** @@ -68,6 +71,13 @@ class GridResourceField { return ann; } + /** + * Return {@code true} if field contains object that should be process too. + */ + public boolean processFieldValue() { + return ann == null; + } + /** {@inheritDoc} */ @Override public String toString() { return S.toString(GridResourceField.class, this); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6717796e/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceIoc.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceIoc.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceIoc.java index de1ce60..10e0884 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceIoc.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceIoc.java @@ -158,10 +158,8 @@ class GridResourceIoc { boolean injected = false; for (GridResourceField field : getFieldsWithAnnotation(dep, targetCls, annCls)) { - Field f = field.getField(); - - if (GridResourceUtils.mayRequireResources(f)) { - f.setAccessible(true); + if (field.processFieldValue()) { + Field f = field.getField(); try { Object obj = f.get(target); @@ -361,13 +359,18 @@ class GridResourceIoc { if (fields == null) { List<GridResourceField> fieldsList = new ArrayList<>(); + boolean allowImplicitInjection = !GridNoImplicitInjection.class.isAssignableFrom(cls); + for (Class cls0 = cls; !cls0.equals(Object.class); cls0 = cls0.getSuperclass()) { for (Field field : cls0.getDeclaredFields()) { Annotation ann = field.getAnnotation(annCls); - if (ann != null || GridResourceUtils.mayRequireResources(field)) - // Account for anonymous inner classes. + if (ann != null) fieldsList.add(new GridResourceField(field, ann)); + else if (allowImplicitInjection && GridResourceUtils.mayRequireResources(field)) { + // Account for anonymous inner classes. + fieldsList.add(new GridResourceField(field, null)); + } } }