Author: rmannibucau
Date: Mon May 12 17:11:46 2014
New Revision: 1594029

URL: http://svn.apache.org/r1594029
Log:
OPENEJB-2092 httpejbd can use 0 as port to be dynamic

Added:
    
tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/DynamicPortTest.java
      - copied, changed from r1593762, 
tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiHandlersTest.java
Modified:
    
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java
    
tomee/tomee/trunk/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceDaemon.java

Copied: 
tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/DynamicPortTest.java
 (from r1593762, 
tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiHandlersTest.java)
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/DynamicPortTest.java?p2=tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/DynamicPortTest.java&p1=tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiHandlersTest.java&r1=1593762&r2=1594029&rev=1594029&view=diff
==============================================================================
--- 
tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiHandlersTest.java
 (original)
+++ 
tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/DynamicPortTest.java
 Mon May 12 17:11:46 2014
@@ -16,62 +16,61 @@
  */
 package org.apache.openejb.server.cxf;
 
-import static org.junit.Assert.assertTrue;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import javax.jws.HandlerChain;
-import javax.jws.WebService;
-import javax.xml.namespace.QName;
-import javax.xml.ws.Service;
-
 import org.apache.openejb.jee.WebApp;
 import org.apache.openejb.junit.ApplicationComposer;
-import org.apache.openejb.server.cxf.handler.SimpleHandler;
 import org.apache.openejb.testing.Classes;
+import org.apache.openejb.testing.Configuration;
 import org.apache.openejb.testing.EnableServices;
 import org.apache.openejb.testing.Module;
+import org.apache.openejb.testng.PropertiesBuilder;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceRef;
+import java.net.MalformedURLException;
+import java.util.Properties;
+
+import static org.junit.Assert.assertEquals;
+
 @EnableServices("jax-ws")
 @RunWith(ApplicationComposer.class)
-public class CdiHandlersTest {
+public class DynamicPortTest
+{
+    @Configuration
+    public Properties config()
+    {
+        return new PropertiesBuilder().property("httpejbd.port", "0").build();
+    }
+
     @Module
-    @Classes(value = { MyHandledWebservice.class, ACdiSimpleTaste.class, 
SimpleHandler.class }, cdi = true)
-    public WebApp module() {
-        return new WebApp().contextRoot("/test").addServlet("ws", 
MyHandledWebservice.class.getName(), "/ws");
+    @Classes(value = DynamicImpl.class)
+    public WebApp module()
+    {
+        return new WebApp().contextRoot("/test").addServlet("ws", 
DynamicImpl.class.getName(), "/ws");
     }
 
+    @WebServiceRef
+    private Dynamic client;
+
     @Test
-    public void checkHandlersAreCDIBeans() throws MalformedURLException {
-        SimpleHandler.reset();
-        Service.create(new URL("http://localhost:4204/test/ws?wsdl";),
-                       new QName("http://cxf.server.openejb.apache.org/";, 
"MyHandledWebserviceService"))
-                .getPort(MyHandledWsApi.class).test();
-        assertTrue(SimpleHandler.close);
-        assertTrue(SimpleHandler.handled);
-        assertTrue(SimpleHandler.pre);
-        assertTrue(SimpleHandler.post);
-    }
- 
-    public static class ACdiSimpleTaste {
-        public String ok() {
-            return "ok";
-        }
+    public void checkHandlersAreCDIBeans() throws MalformedURLException
+    {
+        assertEquals("ok", client.test());
     }
 
     @WebService
-    public static interface MyHandledWsApi {
+    public static interface Dynamic
+    {
         String test();
     }
 
     @WebService
-    @HandlerChain(file = "/handlers.xml")
-    public static class MyHandledWebservice implements MyHandledWsApi {
+    public static class DynamicImpl implements Dynamic
+    {
         @Override
-        public String test() {
+        public String test()
+        {
             return "ok";
         }
     }

Modified: 
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java?rev=1594029&r1=1594028&r2=1594029&view=diff
==============================================================================
--- 
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java
 (original)
+++ 
tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java
 Mon May 12 17:11:46 2014
@@ -25,6 +25,7 @@ import org.apache.webbeans.config.WebBea
 
 import java.net.InetAddress;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -71,8 +72,19 @@ public class OpenEJBHttpRegistry {
         }
 
         List<String> addresses = new ArrayList<String>();
-        for (URI baseUri : baseUris) {
-            URI address = baseUri.resolve(suffix);
+        for (final URI baseUri : baseUris) {
+            URI uri = baseUri;
+            if (baseUri.getPort() == 0) { // if port was set to 0 we need to 
get httpejbd service port which was updated in SystemInstance
+                final int port = 
Integer.parseInt(SystemInstance.get().getProperty("httpejbd.port", "0"));
+                if (port != 0) {
+                    try {
+                        uri = new URI(baseUri.getScheme(), 
baseUri.getUserInfo(), baseUri.getHost(), port, baseUri.getPath(), 
baseUri.getQuery(), baseUri.getFragment());
+                    } catch (final URISyntaxException e) {
+                        // no-op
+                    }
+                }
+            }
+            final URI address = uri.resolve(suffix);
             addresses.add(address.toString());
         }
         return  addresses;

Modified: 
tomee/tomee/trunk/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceDaemon.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceDaemon.java?rev=1594029&r1=1594028&r2=1594029&view=diff
==============================================================================
--- 
tomee/tomee/trunk/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceDaemon.java
 (original)
+++ 
tomee/tomee/trunk/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceDaemon.java
 Mon May 12 17:11:46 2014
@@ -153,7 +153,11 @@ public class ServiceDaemon implements Se
                 }
 
                 serverSocket.setSoTimeout(this.timeout);
-                this.port = serverSocket.getLocalPort();
+                int serverPort = serverSocket.getLocalPort();
+                if (this.port == 0 && next.getName() != null) {
+                    SystemInstance.get().getProperties().put(next.getName() + 
".port", Integer.toString(serverPort));
+                    this.port = serverPort;
+                }
 
             } catch (Exception e) {
                 throw new ServiceException("Service failed to open socket", e);


Reply via email to