You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2012/01/15 02:45:12 UTC

svn commit: r1231613 - in /openejb/branches/openejb-4.0.0-beta-2: ./ container/openejb-core/src/test/java/org/apache/openejb/config/ container/openejb-jee/src/test/resources/jsf/ examples/alternate-descriptors/src/main/resources/META-INF/ examples/appl...

Author: dblevins
Date: Sun Jan 15 01:45:11 2012
New Revision: 1231613

URL: http://svn.apache.org/viewvc?rev=1231613&view=rev
Log:
svn merge -r 1231204:1231205 https://svn.apache.org/repos/asf/openejb/trunk/openejb

http://svn.apache.org/viewvc?view=revision&revision=1231205
------------------------------------------------------------------------
r1231205 | rmannibucau | 2012-01-13 09:41:43 -0800 (Fri, 13 Jan 2012) | 1 line

TOMEE-61 better management of JAX-RS resource addresses
------------------------------------------------------------------------

Modified:
    openejb/branches/openejb-4.0.0-beta-2/   (props changed)
    openejb/branches/openejb-4.0.0-beta-2/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java   (props changed)
    openejb/branches/openejb-4.0.0-beta-2/container/openejb-jee/src/test/resources/jsf/   (props changed)
    openejb/branches/openejb-4.0.0-beta-2/examples/alternate-descriptors/src/main/resources/META-INF/test.ejb-jar.xml   (props changed)
    openejb/branches/openejb-4.0.0-beta-2/examples/application-composer/   (props changed)
    openejb/branches/openejb-4.0.0-beta-2/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
    openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
    openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java
    openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java
    openejb/branches/openejb-4.0.0-beta-2/src/   (props changed)
    openejb/branches/openejb-4.0.0-beta-2/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java

Propchange: openejb/branches/openejb-4.0.0-beta-2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jan 15 01:45:11 2012
@@ -1,4 +1,4 @@
 /openejb/branches/openejb-3.1.1:779593
 /openejb/branches/openejb-3.1.x:945409,945448,1004381,1005322,1021880,1021903,1021955,1021961,1021965,1021975,1021979,1021990,1022375,1022393,1023096,1023116,1023125,1026527,1027696,1027724,1027739,1027754,1032856,1032866,1034030,1040222,1040250
 /openejb/branches/openejb-jcdi:984659-985270
-/openejb/trunk/openejb:1230327,1230343,1230437,1230485
+/openejb/trunk/openejb:1230327,1230343,1230437,1230485,1231205

Propchange: openejb/branches/openejb-4.0.0-beta-2/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jan 15 01:45:11 2012
@@ -1,4 +1,4 @@
 /openejb/branches/openejb-3.1.1/container/openejb-core/src/test/java/org/apache/openejb/config/UberInterfaceTest.java:779593
 /openejb/branches/openejb-3.1.x/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java:945409,945448,1005322,1021880,1021903,1021955,1021961,1021965,1021975,1021979,1021990,1022375,1022393,1023096,1023116,1023125,1026527,1027696,1027724,1027739,1027754,1032856,1032866,1034030,1040222,1040250
 /openejb/branches/openejb-jcdi/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java:984659-985270
-/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java:1230327,1230343,1230437,1230485
+/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java:1230327,1230343,1230437,1230485,1231205

Propchange: openejb/branches/openejb-4.0.0-beta-2/container/openejb-jee/src/test/resources/jsf/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jan 15 01:45:11 2012
@@ -2,4 +2,4 @@
 /geronimo/server/branches/3.0-M1/plugins/myfaces/geronimo-myfaces-builder/src/test/resources:948864,951792
 /geronimo/server/trunk/plugins/j2ee/myfaces/geronimo-myfaces-builder/src/test/resources:887507
 /openejb/branches/openejb-jcdi/container/openejb-jee/src/test/resources/jsf:984659-985270
-/openejb/trunk/openejb/container/openejb-jee/src/test/resources/jsf:1230327,1230343,1230437,1230485
+/openejb/trunk/openejb/container/openejb-jee/src/test/resources/jsf:1230327,1230343,1230437,1230485,1231205

Propchange: openejb/branches/openejb-4.0.0-beta-2/examples/alternate-descriptors/src/main/resources/META-INF/test.ejb-jar.xml
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jan 15 01:45:11 2012
@@ -1,4 +1,4 @@
 /openejb/branches/openejb-3.1.1/examples/alternate-descriptors/src/main/resources/META-INF/ejb-jar.xml:779593
 /openejb/branches/openejb-3.1.x/examples/alternate-descriptors/src/main/resources/META-INF/test.ejb-jar.xml:945409,945448,1005322,1021880,1021903,1021955,1021961,1021965,1021975,1021979,1021990,1022375,1022393,1023096,1023116,1023125,1026527,1027696,1027724,1027739,1027754,1032856,1032866,1034030,1040222,1040250
 /openejb/branches/openejb-jcdi/examples/alternate-descriptors/src/main/resources/META-INF/test.ejb-jar.xml:984659-985270
-/openejb/trunk/openejb/examples/alternate-descriptors/src/main/resources/META-INF/test.ejb-jar.xml:1230327,1230343,1230437,1230485
+/openejb/trunk/openejb/examples/alternate-descriptors/src/main/resources/META-INF/test.ejb-jar.xml:1230327,1230343,1230437,1230485,1231205

Propchange: openejb/branches/openejb-4.0.0-beta-2/examples/application-composer/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jan 15 01:45:11 2012
@@ -1,3 +1,3 @@
 /openejb/branches/openejb-3.1.1/examples/application-composer:779593
-/openejb/trunk/openejb/examples/application-composer:1230327,1230343,1230437,1230485
+/openejb/trunk/openejb/examples/application-composer:1230327,1230343,1230437,1230485,1231205
 /openejb/trunk/openejb3/examples/application-composer:943472,943862,943965,944757,945989,946399,946485,946489,946705,946792,946805,946814,946861,946863-946864,947010,947017,947042,948022,948241,948243,948548,949014,949233,950391,950801,951611,953191,953196,953556,955104,955496,957463,962382,962750,987030,1004172,1029528

Modified: openejb/branches/openejb-4.0.0-beta-2/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-4.0.0-beta-2/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1231613&r1=1231612&r2=1231613&view=diff
==============================================================================
--- openejb/branches/openejb-4.0.0-beta-2/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java (original)
+++ openejb/branches/openejb-4.0.0-beta-2/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java Sun Jan 15 01:45:11 2012
@@ -82,7 +82,7 @@ public class CxfRsHttpListener implement
                 try {
                     return new URI(httpRequest.getRequestURI()).getRawPath();
                 } catch (URISyntaxException e) {
-                    return "/";
+                    return httpRequest.getRequestURI();
                 }
             }
         }, httpResponse);

Modified: openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java?rev=1231613&r1=1231612&r2=1231613&view=diff
==============================================================================
--- openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java (original)
+++ openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java Sun Jan 15 01:45:11 2012
@@ -219,14 +219,22 @@ public abstract class RESTService implem
     private void deploySingleton(String contextRoot, Object o, Application appInstance, ClassLoader classLoader) {
         final String nopath = getAddress(contextRoot, o.getClass()) + "/.*";
         final RsHttpListener listener = createHttpListener();
-        final String address = rsRegistry.createRsHttpListener(listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
+        final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(contextRoot, listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
 
-        services.add(address);
-        listener.deploySingleton(getFullContext(address, contextRoot), o, appInstance);
+        services.add(address.complete);
+        listener.deploySingleton(getFullContext(address.base, contextRoot), o, appInstance);
 
         LOGGER.info("deployed REST singleton: " + o);
     }
 
+    private static String baseAddress(final String address, final String contextRoot) {
+        if (contextRoot == null || contextRoot.isEmpty()) {
+            return address;
+        }
+        int idx = address.indexOf(contextRoot);
+        return address.substring(0, idx) + contextRoot;
+    }
+
     private void deployPojo(String contextRoot, Class<?> loadedClazz, Application app, ClassLoader classLoader, Collection<Injection> injections, Context context) {
         if (loadedClazz.isInterface()) {
             return;
@@ -234,10 +242,10 @@ public abstract class RESTService implem
 
         final String nopath = getAddress(contextRoot, loadedClazz) + "/.*";
         final RsHttpListener listener = createHttpListener();
-        final String address = rsRegistry.createRsHttpListener(listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
+        final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(contextRoot, listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
 
-        services.add(address);
-        listener.deployPojo(getFullContext(address, contextRoot), loadedClazz, app, injections, context);
+        services.add(address.complete);
+        listener.deployPojo(getFullContext(address.base, contextRoot), loadedClazz, app, injections, context);
 
         LOGGER.info("deployed POJO class: " + loadedClazz.getName());
     }
@@ -245,10 +253,10 @@ public abstract class RESTService implem
     private void deployEJB(String context, BeanContext beanContext) {
         final String nopath = getAddress(context, beanContext.getBeanClass()) + "/.*";
         final RsHttpListener listener = createHttpListener();
-        final String address = rsRegistry.createRsHttpListener(listener, beanContext.getClassLoader(), nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
+        final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(context, listener, beanContext.getClassLoader(), nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
 
-        services.add(address);
-        listener.deployEJB(getFullContext(address, context), beanContext);
+        services.add(address.complete);
+        listener.deployEJB(getFullContext(address.base, context), beanContext);
 
         LOGGER.info("REST EJB deployed: " + beanContext.getBeanClass().getName());
     }
@@ -264,6 +272,9 @@ public abstract class RESTService implem
         if (context == null) {
             return address;
         }
+        if (context.isEmpty() && address.contains("/")) {
+            return address.substring(0, address.lastIndexOf("/"));
+        }
 
         int idx = address.indexOf(context);
         String base = address.substring(0, idx);

Modified: openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java?rev=1231613&r1=1231612&r2=1231613&view=diff
==============================================================================
--- openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java (original)
+++ openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java Sun Jan 15 01:45:11 2012
@@ -22,6 +22,16 @@ import org.apache.openejb.server.httpd.H
 import java.util.List;
 
 public interface RsRegistry {
-    String createRsHttpListener(HttpListener listener, ClassLoader classLoader, String path, String virtualHost);
+    AddressInfo createRsHttpListener(String root, HttpListener listener, ClassLoader classLoader, String path, String virtualHost);
     HttpListener removeListener(String context);
+
+    public static class AddressInfo {
+        public String base;
+        public String complete;
+
+        public AddressInfo(String base, String complete) {
+            this.base = base;
+            this.complete = complete;
+        }
+    }
 }

Modified: openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java?rev=1231613&r1=1231612&r2=1231613&view=diff
==============================================================================
--- openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java (original)
+++ openejb/branches/openejb-4.0.0-beta-2/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java Sun Jan 15 01:45:11 2012
@@ -27,11 +27,11 @@ import java.util.Map;
 public class RsRegistryImpl extends OpenEJBHttpRegistry implements RsRegistry {
     private Map<String, String> addresses = new HashMap<String, String>();
 
-    @Override public String createRsHttpListener(HttpListener listener, ClassLoader classLoader, String path, String virtualHost) {
+    @Override public AddressInfo createRsHttpListener(String root, HttpListener listener, ClassLoader classLoader, String path, String virtualHost) {
         String address = HttpUtil.selectSingleAddress(getResolvedAddresses(path));
         addWrappedHttpListener(listener, classLoader, path);
         addresses.put(address, path);
-        return address;
+        return new AddressInfo(address, address);
     }
 
     @Override public HttpListener removeListener(String context) {

Propchange: openejb/branches/openejb-4.0.0-beta-2/src/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jan 15 01:45:11 2012
@@ -1,3 +1,3 @@
 /openejb/branches/openejb-3.1.1/src:779593
-/openejb/trunk/openejb/src:1230327,1230343,1230437,1230485
+/openejb/trunk/openejb/src:1230327,1230343,1230437,1230485,1231205
 /openejb/trunk/openejb3/src:943472,943862,943965,944757,945989,946399,946485,946489,946705,946792,946805,946814,946861,946863-946864,947010,947017,947042,948022,948241,948243,948548,949014,949233,950391,950801,951611,953191,953196,953556,955104,955496,957463,962382,962750,987030,1004172,1029528

Modified: openejb/branches/openejb-4.0.0-beta-2/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-4.0.0-beta-2/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java?rev=1231613&r1=1231612&r2=1231613&view=diff
==============================================================================
--- openejb/branches/openejb-4.0.0-beta-2/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java (original)
+++ openejb/branches/openejb-4.0.0-beta-2/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java Sun Jan 15 01:45:11 2012
@@ -31,13 +31,14 @@ import org.apache.openejb.server.httpd.H
 import org.apache.openejb.server.httpd.util.HttpUtil;
 import org.apache.openejb.server.rest.RsRegistry;
 import org.apache.openejb.server.rest.RsServlet;
-import org.apache.tomee.loader.TomcatHelper;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
+import org.apache.tomee.loader.TomcatHelper;
 
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -64,7 +65,7 @@ public class TomcatRsRegistry implements
     }
 
     @Override
-    public String createRsHttpListener(HttpListener listener, ClassLoader classLoader, String completePath, String virtualHost) {
+    public AddressInfo createRsHttpListener(String root, HttpListener listener, ClassLoader classLoader, String completePath, String virtualHost) {
         String path = completePath;
         if (path == null) {
             throw new NullPointerException("contextRoot is null");
@@ -73,12 +74,16 @@ public class TomcatRsRegistry implements
             throw new NullPointerException("listener is null");
         }
 
-        // assure context root with a leading slash
+        String realRoot = root;
+        if (!root.startsWith("/")) {
+            realRoot = "/" + root;
+        }
         if (!path.startsWith("/")) {
             path = "/" + path;
         }
-        String webContext = path.substring(0, path.substring(1).indexOf("/") + 1);
-        path = path.substring(webContext.length(), path.length());
+        if (!"/".equals(realRoot)) {
+            path = path.substring(realRoot.length(), path.length());
+        }
 
         // find the existing host (we do not auto-create hosts)
         if (virtualHost == null) virtualHost = engine.getDefaultHost();
@@ -88,7 +93,10 @@ public class TomcatRsRegistry implements
         }
 
         // get the webapp context
-        Context context = (Context) host.findChild(webContext);
+        Context context = (Context) host.findChild(realRoot);
+        if (context == null && "/".equals(realRoot)) { // ROOT
+            context = (Context) host.findChild("");
+        }
         context.addLifecycleListener(new LifecycleListener() {
             public void lifecycleEvent(LifecycleEvent event) {
                 Context context = (Context) event.getLifecycle();
@@ -116,24 +124,27 @@ public class TomcatRsRegistry implements
         wrapper.addInitParameter(HttpListener.class.getName(), listenerId);
         context.getServletContext().setAttribute(listenerId, listener);
 
-        // register wsdl locations for service-ref resolution
+        path = address(connectors, host.getName(), realRoot);
+        final String key = address(connectors, host.getName(), completePath);
+        contexts.put(key, context);
+        listeners.put(key, listener);
+
+        return new AddressInfo(path, key);
+    }
+
+    private static String address(final Collection<Connector> connectors, final String host, final String path) {
         List<String> addresses = new ArrayList<String>();
         for (Connector connector : connectors) {
             URI address;
             try {
-                address = new URI(connector.getScheme(), null, host.getName(), connector.getPort(), completePath, null, null);
+                address = new URI(connector.getScheme(), null, host, connector.getPort(), path, null, null);
             } catch (Exception e) { // just an URI problem normally...shouldn't occur
                 LOGGER.error("can't add container for path " + path, e);
                 continue;
             }
             addresses.add(address.toString());
         }
-
-        path = HttpUtil.selectSingleAddress(addresses);
-        contexts.put(path, context);
-        listeners.put(path, listener);
-
-        return path;
+        return HttpUtil.selectSingleAddress(addresses);
     }
 
     @Override