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 {
 }