Author: jlmonteiro
Date: Mon Nov  5 14:56:59 2012
New Revision: 1405818

URL: http://svn.apache.org/viewvc?rev=1405818&view=rev
Log:
Add the ability to filter services to start with a test case.

Added:
    
openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/EnableServices.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/ServiceManagerProxy.java

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=1405818&r1=1405817&r2=1405818&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
 Mon Nov  5 14:56:59 2012
@@ -73,6 +73,7 @@ import org.junit.runners.model.TestClass
 
 import javax.naming.Context;
 import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -485,10 +486,14 @@ public class ApplicationComposer extends
 
                 
assembler.buildContainerSystem(config.getOpenEjbConfiguration());
 
+                EnableServices annotation = 
testClass.getJavaClass().getAnnotation(EnableServices.class);
                 if 
("true".equals(configuration.getProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE,
 "false"))
-                        || 
testClass.getJavaClass().getAnnotation(EnableServices.class) != null) {
+                        || annotation != null) {
                     try {
                         serviceManager = new ServiceManagerProxy();
+                        if (annotation != null) {
+                            initFilteredServiceManager(annotation);
+                        }
                         serviceManager.start();
                     } catch (ServiceManagerProxy.AlreadyStartedException e) {
                         throw new OpenEJBRuntimeException(e);
@@ -612,4 +617,25 @@ public class ApplicationComposer extends
     private static IAnnotationFinder finderFromClasses(final Class<?>[] value) 
{
         return new AnnotationFinder(new ClassesArchive(value)).link();
     }
+
+    private void initFilteredServiceManager(EnableServices services) {
+        ClassLoader classLoader = 
Thread.currentThread().getContextClassLoader();
+        Class serviceManagerClass;
+        try {
+            serviceManagerClass = 
classLoader.loadClass("org.apache.openejb.server.FilteredServiceManager");
+        } catch (ClassNotFoundException e) {
+            String msg = "Services filtering requires class 
'org.apache.openejb.server.FilteredServiceManager' to be available.  " +
+                    "Make sure you have the openejb-server-*.jar in your 
classpath.";
+            throw new IllegalStateException(msg, e);
+        }
+
+        Method initServiceManager = null;
+        try {
+            initServiceManager = 
serviceManagerClass.getMethod("initServiceManager", String[].class);
+            initServiceManager.invoke(null, new Object[]{services.value()});
+        } catch (Exception e) {
+            throw new IllegalStateException("Failed initializing 
FilteredServiceManager with services " + services.value(), e);
+        }
+    }
+
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/EnableServices.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/EnableServices.java?rev=1405818&r1=1405817&r2=1405818&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/EnableServices.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/EnableServices.java
 Mon Nov  5 14:56:59 2012
@@ -24,4 +24,7 @@ import java.lang.annotation.Target;
 @Target(ElementType.TYPE)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface EnableServices {
+    // should contain the list of services to activate
+    // default is empty list which means that all services gonna be activated
+    String[] value () default {};
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/ServiceManagerProxy.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/ServiceManagerProxy.java?rev=1405818&r1=1405817&r2=1405818&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/ServiceManagerProxy.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/ServiceManagerProxy.java
 Mon Nov  5 14:56:59 2012
@@ -17,6 +17,7 @@
 package org.apache.openejb.util;
 
 import org.apache.openejb.core.LocalInitialContext;
+import org.apache.openejb.junit.EnableServices;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;

Added: 
openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java?rev=1405818&view=auto
==============================================================================
--- 
openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java
 (added)
+++ 
openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java
 Mon Nov  5 14:56:59 2012
@@ -0,0 +1,42 @@
+/**
+ * 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.server;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * This implementation is mainly used in the application composer to get the 
most from
+ * The EnableServices annotation created
+ */
+public class FilteredServiceManager extends SimpleServiceManager {
+
+    private Collection<String> services;
+
+    public FilteredServiceManager (String[] services) {
+        this.services = Arrays.asList(services);
+    }
+
+    @Override
+    protected boolean accept(String serviceName) {
+        return services.isEmpty() || services.contains(serviceName);
+    }
+
+    public static void initServiceManager(String[] services) {
+        setServiceManager(new FilteredServiceManager(services));
+    }
+}


Reply via email to