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);