You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by am...@apache.org on 2005/08/29 03:02:19 UTC

svn commit: r263979 - in /geronimo/trunk/modules: deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/ jetty/src/java/org/apache/geronimo/jetty/connector/ management/src/java/org/apache/geronimo/management/geronimo/ tomcat/src/java/org/ap...

Author: ammulder
Date: Sun Aug 28 18:02:11 2005
New Revision: 263979

URL: http://svn.apache.org/viewcvs?rev=263979&view=rev
Log:
Explicitly provide a connection URL to avoid supplying "localhost"
  or "0.0.0.0" to a remote client
Fix Tomcat connector to correctly handle if Tomcat changes the String
  host property into an InetAddress (GERONIMO-939)

Modified:
    geronimo/trunk/modules/deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/CommandSupport.java
    geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/AJP13Connector.java
    geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/HTTPConnector.java
    geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/HTTPSConnector.java
    geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java
    geronimo/trunk/modules/management/src/java/org/apache/geronimo/management/geronimo/WebConnector.java
    geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/ConnectorGBean.java

Modified: geronimo/trunk/modules/deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/CommandSupport.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/CommandSupport.java?rev=263979&r1=263978&r2=263979&view=diff
==============================================================================
--- geronimo/trunk/modules/deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/CommandSupport.java (original)
+++ geronimo/trunk/modules/deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/CommandSupport.java Sun Aug 28 18:02:11 2005
@@ -274,6 +274,10 @@
         addWebURLs(kernel, moduleIDs);
     }
 
+    /**
+     * Given a list of TargetModuleIDs, figure out which ones represent web
+     * modules and add a WebURL to each if possible.
+     */
     public static void addWebURLs(Kernel kernel, List moduleIDs) {
         Set webApps = null;
         String url = null;
@@ -294,19 +298,13 @@
                         if((connector = (ObjectName) map.get("HTTP")) == null) {
                             if((connector = (ObjectName) map.get("HTTPS")) == null) {
                                 connector = (ObjectName) map.get("AJP");
-                                if(connector != null) {
-                                    url = "ajp://";
-                                }
-                            } else {
-                                url = "https://";
                             }
-                        } else {
-                            url = "http://";
                         }
                         if(connector != null) {
                             try {
-                                url = url + kernel.getAttribute(connector, "host") + ":" + kernel.getAttribute(connector, "port");
+                                url = (String) kernel.getAttribute(connector, "connectUrl");
                             } catch (Exception e) {
+                                e.printStackTrace();
                                 url = null;
                             }
                         }

Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/AJP13Connector.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/AJP13Connector.java?rev=263979&r1=263978&r2=263979&view=diff
==============================================================================
--- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/AJP13Connector.java (original)
+++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/AJP13Connector.java Sun Aug 28 18:02:11 2005
@@ -35,6 +35,10 @@
         return WebContainer.PROTOCOL_AJP;
     }
 
+    public int getDefaultPort() {
+        return -1;
+    }
+
     public static final GBeanInfo GBEAN_INFO;
 
     static {

Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/HTTPConnector.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/HTTPConnector.java?rev=263979&r1=263978&r2=263979&view=diff
==============================================================================
--- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/HTTPConnector.java (original)
+++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/HTTPConnector.java Sun Aug 28 18:02:11 2005
@@ -35,6 +35,10 @@
         return WebContainer.PROTOCOL_HTTP;
     }
 
+    public int getDefaultPort() {
+        return 80;
+    }
+
     public static final GBeanInfo GBEAN_INFO;
 
     static {

Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/HTTPSConnector.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/HTTPSConnector.java?rev=263979&r1=263978&r2=263979&view=diff
==============================================================================
--- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/HTTPSConnector.java (original)
+++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/HTTPSConnector.java Sun Aug 28 18:02:11 2005
@@ -46,6 +46,10 @@
         https = (SslListener) listener;
     }
 
+    public int getDefaultPort() {
+        return 443;
+    }
+
     public String getProtocol() {
         return WebContainer.PROTOCOL_HTTPS;
     }

Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java?rev=263979&r1=263978&r2=263979&view=diff
==============================================================================
--- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java (original)
+++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java Sun Aug 28 18:02:11 2005
@@ -19,6 +19,7 @@
 
 import java.net.UnknownHostException;
 import java.net.InetSocketAddress;
+import java.net.InetAddress;
 
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
@@ -38,6 +39,7 @@
 public abstract class JettyConnector implements GBeanLifecycle, JettyWebConnector {
     private final JettyContainer container;
     protected final HttpListener listener;
+    private String connectHost;
 
     /**
      * Only used to allow declaration as a reference.
@@ -78,6 +80,29 @@
         listener.setPort(port);
     }
 
+    public abstract int getDefaultPort();
+
+    public String getConnectUrl() {
+        if(connectHost == null) {
+            String host = getHost();
+            if(host == null || host.equals("0.0.0.0")) {
+                InetAddress address = null;
+                try {
+                    address = InetAddress.getLocalHost();
+                } catch (UnknownHostException e) {
+                    host = "unknown-host";
+                }
+                if(address != null) {
+                    host = address.getHostName();
+                    if(host == null || host.equals("")) {
+                        host = address.getHostAddress();
+                    }
+                }
+            }
+            connectHost = host;
+        }
+        return getProtocol().toLowerCase()+"://"+connectHost+(getPort() == getDefaultPort() ? "" : ":"+getPort());
+    }
 
     public void setMinThreads(int minThreads) {
       ((ThreadedServer)listener).setMinThreads(minThreads);
@@ -228,7 +253,7 @@
     static {
         GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("Jetty HTTP Connector", JettyConnector.class);
         infoFactory.addReference("JettyContainer", JettyContainer.class, NameFactory.GERONIMO_SERVICE);
-        infoFactory.addInterface(JettyWebConnector.class, new String[]{"host", "port", "minThreads","maxThreads","bufferSizeBytes","acceptQueueSize","lingerMillis","tcpNoDelay","redirectPort",},
+        infoFactory.addInterface(JettyWebConnector.class, new String[]{"host", "port", "minThreads","maxThreads","bufferSizeBytes","acceptQueueSize","lingerMillis","tcpNoDelay","redirectPort","connectUrl",},
                                                           new String[]{"host", "port", "redirectPort"});
         infoFactory.setConstructor(new String[] {"JettyContainer"});
         GBEAN_INFO = infoFactory.getBeanInfo();

Modified: geronimo/trunk/modules/management/src/java/org/apache/geronimo/management/geronimo/WebConnector.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/management/src/java/org/apache/geronimo/management/geronimo/WebConnector.java?rev=263979&r1=263978&r2=263979&view=diff
==============================================================================
--- geronimo/trunk/modules/management/src/java/org/apache/geronimo/management/geronimo/WebConnector.java (original)
+++ geronimo/trunk/modules/management/src/java/org/apache/geronimo/management/geronimo/WebConnector.java Sun Aug 28 18:02:11 2005
@@ -97,4 +97,13 @@
      */
     public void setRedirectPort(int port);
 
+    /**
+     * Gets a URL used to connect to the web server via this connector.
+     * This is not guaranteed to work (for example, if the server is
+     * located behind a proxy), but it should give a reasonable value if
+     * possible.  The form of the returned String should be
+     * http://hostname or http://hostname:port (in other words, suitable
+     * for appending a context path).
+     */
+    public String getConnectUrl();
 }

Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/ConnectorGBean.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/ConnectorGBean.java?rev=263979&r1=263978&r2=263979&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/ConnectorGBean.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/ConnectorGBean.java Sun Aug 28 18:02:11 2005
@@ -18,6 +18,7 @@
 
 import java.net.InetSocketAddress;
 import java.net.UnknownHostException;
+import java.net.InetAddress;
 import java.util.Map;
 import java.util.HashMap;
 
@@ -41,6 +42,7 @@
     protected final Connector connector;
     private final TomcatContainer container;
     private String name;
+    private String connectHost;
 
     public ConnectorGBean(String name, String protocol, String host, int port, TomcatContainer container) throws Exception {
         super(); // TODO: make it an attribute
@@ -144,6 +146,33 @@
         doStop();
     }
 
+    public int getDefaultPort() {
+        return getProtocol().equals(WebContainer.PROTOCOL_AJP) ? -1 :
+                getProtocol().equals(WebContainer.PROTOCOL_HTTP) ? 80 :
+                getProtocol().equals(WebContainer.PROTOCOL_HTTPS) ? 443 : -1;
+    }
+
+    public String getConnectUrl() {
+        if(connectHost == null) {
+            String host = getHost();
+            if(host == null || host.equals("0.0.0.0")) {
+                InetAddress address = null;
+                try {
+                    address = InetAddress.getLocalHost();
+                } catch (UnknownHostException e) {
+                    host = "unknown-host";
+                }
+                if(address != null) {
+                    host = address.getHostName();
+                    if(host == null || host.equals("")) {
+                        host = address.getHostAddress();
+                    }
+                }
+            }
+            connectHost = host;
+        }
+        return getProtocol().toLowerCase()+"://"+connectHost+(getPort() == getDefaultPort() ? "" : ":"+getPort());
+    }
 
     /**
      * Gets the network protocol that this connector handles.
@@ -179,7 +208,11 @@
      */
     public String getHost() {
         Object value = connector.getAttribute("address");
-        return value == null ? "0.0.0.0" : value.toString();
+        if(value == null) {
+            return "0.0.0.0";
+        } else if(value instanceof InetAddress) {
+            return ((InetAddress)value).getHostAddress();
+        } else return value.toString();
     }
 
     /**
@@ -377,7 +410,7 @@
         infoFactory.addAttribute("protocol", String.class, true);
         infoFactory.addReference("TomcatContainer", TomcatContainer.class, NameFactory.GERONIMO_SERVICE);
         infoFactory.addOperation("getInternalObject");
-        infoFactory.addInterface(TomcatWebConnector.class, new String[]{"host","port","bufferSizeBytes","maxThreads","acceptQueueSize","lingerMillis","tcpNoDelay","redirectPort","minSpareThreads","maxSpareThreads","maxHttpHeaderSizeBytes","hostLookupEnabled","connectionTimeoutMillis","uploadTimeoutEnabled"},
+        infoFactory.addInterface(TomcatWebConnector.class, new String[]{"host","port","bufferSizeBytes","maxThreads","acceptQueueSize","lingerMillis","tcpNoDelay","redirectPort","minSpareThreads","maxSpareThreads","maxHttpHeaderSizeBytes","hostLookupEnabled","connectionTimeoutMillis","uploadTimeoutEnabled","connectUrl",},
                                                            new String[]{"host","port","redirectPort"});
         infoFactory.setConstructor(new String[] { "name", "protocol", "host", "port", "TomcatContainer"});
         GBEAN_INFO = infoFactory.getBeanInfo();