You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/09/05 09:13:00 UTC
svn commit: r1381037 - in
/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb:
InjectionProcessor.java injection/ injection/FallbackPropertyInjector.java
junit/ApplicationComposer.java junit/MockInjector.java
Author: rmannibucau
Date: Wed Sep 5 07:13:00 2012
New Revision: 1381037
URL: http://svn.apache.org/viewvc?rev=1381037&view=rev
Log:
OPENEJB-1897 fallbackpropertyinjector to be able to add a custom behavior on failling injections
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/injection/
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/injection/FallbackPropertyInjector.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/MockInjector.java
- copied, changed from r1379985, openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Module.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java?rev=1381037&r1=1381036&r2=1381037&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java Wed Sep 5 07:13:00 2012
@@ -17,11 +17,12 @@
package org.apache.openejb;
import org.apache.openejb.core.ivm.naming.JndiUrlReference;
+import org.apache.openejb.injection.FallbackPropertyInjector;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.spi.ContainerSystem;
+import org.apache.openejb.util.AsmParameterNameLoader;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
-import org.apache.openejb.util.AsmParameterNameLoader;
import org.apache.openejb.util.PassthroughFactory;
import org.apache.xbean.naming.reference.SimpleReference;
import org.apache.xbean.recipe.ObjectRecipe;
@@ -29,14 +30,14 @@ import org.apache.xbean.recipe.Option;
import javax.naming.Context;
import javax.naming.NamingException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.util.Collection;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.LinkedHashMap;
import java.util.Map.Entry;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
public class InjectionProcessor<T> {
@@ -216,8 +217,15 @@ public class InjectionProcessor<T> {
}
}
+ if (value == null) { // used for testing/mocking
+ final FallbackPropertyInjector fallback = SystemInstance.get().getComponent(FallbackPropertyInjector.class);
+ if (fallback != null) {
+ value = fallback.getValue(injection);
+ }
+ }
+
if (value != null) {
- String prefix;
+ final String prefix;
if (usePrefix) {
prefix = injection.getTarget().getName() + "/";
} else {
Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/injection/FallbackPropertyInjector.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/injection/FallbackPropertyInjector.java?rev=1381037&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/injection/FallbackPropertyInjector.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/injection/FallbackPropertyInjector.java Wed Sep 5 07:13:00 2012
@@ -0,0 +1,23 @@
+/*
+ * 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.openejb.injection;
+
+import org.apache.openejb.Injection;
+
+public interface FallbackPropertyInjector {
+ Object getValue(final Injection prefix);
+}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java?rev=1381037&r1=1381036&r2=1381037&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java Wed Sep 5 07:13:00 2012
@@ -33,6 +33,7 @@ import org.apache.openejb.config.WebModu
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
import org.apache.openejb.core.ivm.naming.InitContextFactory;
+import org.apache.openejb.injection.FallbackPropertyInjector;
import org.apache.openejb.jee.Application;
import org.apache.openejb.jee.Beans;
import org.apache.openejb.jee.Connector;
@@ -89,6 +90,11 @@ public class ApplicationComposer extends
errors.add(new Exception(gripe));
}
+ final List<FrameworkMethod> mockInjector = testClass.getAnnotatedMethods(MockInjector.class);
+ if (mockInjector.size() > 1) {
+ errors.add(new Exception("Test class should have no more than one @MockInjector method"));
+ }
+
for (FrameworkMethod method : configs) {
final Class<?> type = method.getMethod().getReturnType();
if (!Properties.class.isAssignableFrom(type)) {
@@ -288,6 +294,14 @@ public class ApplicationComposer extends
SystemInstance.init(configuration);
+ final List<FrameworkMethod> mockInjectors = testClass.getAnnotatedMethods(MockInjector.class);
+ for (FrameworkMethod method : methods) { // max == 1 so no need to break
+ final Object o = method.invokeExplosively(testInstance);
+ if (o instanceof FallbackPropertyInjector) {
+ SystemInstance.get().setComponent(FallbackPropertyInjector.class, (FallbackPropertyInjector) o);
+ }
+ }
+
try {
ConfigurationFactory config = new ConfigurationFactory();
config.init(SystemInstance.get().getProperties());
Copied: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/MockInjector.java (from r1379985, openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Module.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/MockInjector.java?p2=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/MockInjector.java&p1=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Module.java&r1=1379985&r2=1381037&rev=1381037&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/Module.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/MockInjector.java Wed Sep 5 07:13:00 2012
@@ -23,5 +23,5 @@ import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
-public @interface Module {
+public @interface MockInjector {
}