Author: jlmonteiro Date: Tue Nov 6 14:35:58 2012 New Revision: 1406149 URL: http://svn.apache.org/viewvc?rev=1406149&view=rev Log: Finally get the services filtering working and adding aliases support
Added: openejb/trunk/openejb/server/openejb-server/src/test/java/org/apache/openejb/server/FilteredServiceManagerTest.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/util/ServiceManagerProxy.java openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/SimpleApplicationTest.java openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.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=1406149&r1=1406148&r2=1406149&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 Tue Nov 6 14:35:58 2012 @@ -490,10 +490,10 @@ public class ApplicationComposer extends if ("true".equals(configuration.getProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "false")) || annotation != null) { try { - serviceManager = new ServiceManagerProxy(); if (annotation != null) { initFilteredServiceManager(annotation); } + serviceManager = new ServiceManagerProxy(false); serviceManager.start(); } catch (ServiceManagerProxy.AlreadyStartedException e) { throw new OpenEJBRuntimeException(e); 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=1406149&r1=1406148&r2=1406149&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 Tue Nov 6 14:35:58 2012 @@ -40,6 +40,10 @@ public class ServiceManagerProxy { } public ServiceManagerProxy() throws AlreadyStartedException { + this(true); + } + + public ServiceManagerProxy(boolean checkAlreadyStarted) throws AlreadyStartedException { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); try { @@ -52,7 +56,7 @@ public class ServiceManagerProxy { Method get = getMethod("get"); Method getManager = getMethod("getManager"); - if (invoke(get, null) != null) throw new AlreadyStartedException("Server services already started"); + if (checkAlreadyStarted && invoke(get, null) != null) throw new AlreadyStartedException("Server services already started"); serviceManager = invoke(getManager, null); Modified: openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/SimpleApplicationTest.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/SimpleApplicationTest.java?rev=1406149&r1=1406148&r2=1406149&view=diff ============================================================================== --- openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/SimpleApplicationTest.java (original) +++ openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/SimpleApplicationTest.java Tue Nov 6 14:35:58 2012 @@ -36,7 +36,7 @@ import java.io.StringWriter; import static org.junit.Assert.assertEquals; -@EnableServices("cxf-rs") +@EnableServices("jax-rs") @RunWith(ApplicationComposer.class) public class SimpleApplicationTest { public static final String BASE_URL = "http://localhost:4204/foo/my-app"; Modified: openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java?rev=1406149&r1=1406148&r2=1406149&view=diff ============================================================================== --- openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java (original) +++ openejb/trunk/openejb/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java Tue Nov 6 14:35:58 2012 @@ -38,6 +38,7 @@ import org.apache.openejb.observer.Obser import org.apache.openejb.server.SelfManaging; import org.apache.openejb.server.ServerService; import org.apache.openejb.server.ServiceException; +import org.apache.openejb.server.ServiceManager; import org.apache.openejb.server.httpd.HttpListener; import org.apache.openejb.server.httpd.HttpListenerRegistry; import org.apache.openejb.spi.ContainerSystem; @@ -85,6 +86,7 @@ public abstract class RESTService implem private RsRegistry rsRegistry; private List<DeployedService> services = new ArrayList<DeployedService>(); private String virtualHost; + private boolean enabled = true; private String wildcard = SystemInstance.get().getProperty("openejb.rest.wildcard", ".*"); public void afterApplicationCreated(final AppInfo appInfo, final WebAppInfo webApp) { @@ -275,6 +277,8 @@ public abstract class RESTService implem } public void afterApplicationCreated(@Observes final AssemblerAfterApplicationCreated event) { + if (!enabled) return; + final AppInfo appInfo = event.getApp(); if (deployedApplications.add(appInfo)) { if (appInfo.webApps.size() == 0) { @@ -591,6 +595,7 @@ public abstract class RESTService implem @Override public void init(Properties props) throws Exception { virtualHost = props.getProperty("virtualHost"); + enabled = ServiceManager.isEnabled(props); } public String getVirtualHost() { Modified: 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=1406149&r1=1406148&r2=1406149&view=diff ============================================================================== --- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java (original) +++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java Tue Nov 6 14:35:58 2012 @@ -16,8 +16,7 @@ */ package org.apache.openejb.server; -import java.util.Arrays; -import java.util.Collection; +import java.util.*; /** * This implementation is mainly used in the application composer to get the most from @@ -28,7 +27,28 @@ public class FilteredServiceManager exte private Collection<String> services; public FilteredServiceManager (String[] services) { - this.services = Arrays.asList(services); + setServiceManager(this); + this.services = convertServices(services); + + } + + private Collection<String> convertServices(String[] services) { + Set<String> realServices = new HashSet<String>(); + Collection<String> rsAliases = Arrays.asList("rest", "jaxrs", "jax-rs", "cxf-rs"); + Collection<String> wsAliases = Arrays.asList("jaxws", "jax-ws", "cxf"); + + for (String service : services) { + if (rsAliases.contains(service)) { + realServices.addAll(Arrays.asList("cxf-rs", "httpejbd")); + } + if (wsAliases.contains(service)) { + realServices.addAll(Arrays.asList("cxf", "httpejbd")); + } + if ("ejbd".equals(service)) { + realServices.add("httpejbd"); + } + } + return realServices; } @Override Modified: openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java?rev=1406149&r1=1406148&r2=1406149&view=diff ============================================================================== --- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java (original) +++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java Tue Nov 6 14:35:58 2012 @@ -298,7 +298,7 @@ public abstract class ServiceManager { fullProps.putAll(props); } - private boolean isEnabled(Properties props) { + public static boolean isEnabled(Properties props) { // if it should be started, continue String disabled = props.getProperty("disabled", ""); Added: openejb/trunk/openejb/server/openejb-server/src/test/java/org/apache/openejb/server/FilteredServiceManagerTest.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/test/java/org/apache/openejb/server/FilteredServiceManagerTest.java?rev=1406149&view=auto ============================================================================== --- openejb/trunk/openejb/server/openejb-server/src/test/java/org/apache/openejb/server/FilteredServiceManagerTest.java (added) +++ openejb/trunk/openejb/server/openejb-server/src/test/java/org/apache/openejb/server/FilteredServiceManagerTest.java Tue Nov 6 14:35:58 2012 @@ -0,0 +1,54 @@ +/* + * 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 junit.framework.Assert; +import org.apache.openejb.jee.EjbJar; +import org.apache.openejb.junit.ApplicationComposer; +import org.apache.openejb.junit.EnableServices; +import org.apache.openejb.junit.Module; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.ws.rs.core.Application; + +/** + * This test aims at testing the filtering feature on services. + * Basically, this test does not do a lot of stuff except declaring only one service + * and looking through the service if there is only one service. + */ +@EnableServices("cxf-rs") +@RunWith(ApplicationComposer.class) +public class FilteredServiceManagerTest { + + @Module + public EjbJar war() { + return new EjbJar(); + } + + @Test + public void numberOfServices () { + // when using @EnableServices with the application composer + // the return value should be a FilteredServiceManager + Assert.assertEquals(FilteredServiceManager.class, ServiceManager.get().getClass()); + + FilteredServiceManager manager = (FilteredServiceManager) ServiceManager.get(); + Assert.assertEquals(1, manager.getDaemons().length); + Assert.assertEquals("jax-rs", manager.getDaemons()[0].getName()); + } + +}