| HTTPServerILService.java |
/*
* JBoss, the OpenSource J2EE webOS
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.mq.il.http;
import java.net.InetAddress;
import java.util.Properties;
import org.jboss.mq.il.ServerIL;
import org.jboss.mq.il.ServerILJMXService;
import org.jboss.system.server.ServerConfigUtil;
/**
* Implements the ServerILJMXService which is used to manage the HTTP/S IL.
*
* @author Nathan Phelps (nathan@jboss.org)
* @version $Revision: 1.4.4.1 $
* @created January 15, 2003
* @jmx:mbean extends="org.jboss.mq.il.ServerILJMXServiceMBean"
*/
public class HTTPServerILService extends ServerILJMXService implements HTTPServerILServiceMBean
{
private HTTPServerIL serverIL;
private String url = null;
private String urlPrefix = "http://";
private int urlPort = 8080;
private String urlSuffix = "jbossmq-httpil/HTTPServerILServlet";
private String urlHostName = null;
private boolean useHostName = false;
private long timeout = 60 * 1000;
private long restInterval = 0;
public HTTPServerILService()
{
}
public String getName()
{
return "JBossMQ-HTTPServerIL";
}
public ServerIL getServerIL()
{
return this.serverIL;
}
public Properties getClientConnectionProperties()
{
Properties properties = super.getClientConnectionProperties();
properties.setProperty(HTTPServerILFactory.CLIENT_IL_SERVICE_KEY, HTTPServerILFactory.CLIENT_IL_SERVICE);
properties.setProperty(HTTPServerILFactory.SERVER_URL_KEY, this.url);
properties.setProperty(HTTPServerILFactory.TIMEOUT_KEY, String.valueOf(this.timeout));
properties.setProperty(HTTPServerILFactory.REST_INTERVAL_KEY, String.valueOf(this.restInterval));
return properties;
}
public void startService() throws Exception
{
super.startService();
if (this.url == null)
{
this.url = this.getConstructedURL();
}
this.serverIL = new HTTPServerIL(this.url);
super.bindJNDIReferences();
}
public void stopService()
{
try
{
unbindJNDIReferences();
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* Set the HTTPIL default timeout--the number of seconds that the ClientILService
* HTTP requests will wait for messages. This can be overridden on the client
* by setting the system property org.jboss.mq.il.http.timeout to an int value
* of the number of seconds. NOTE: This value should be in seconds, not millis.
*
* @jmx:managed-attribute
*/
public void setTimeOut(int timeout)
{
this.timeout = timeout * 1000; // provided in seconds so turn it into Millis
}
/**
* Get the HTTPIL default timeout
*
* @jmx:managed-attribute
*/
public int getTimeOut()
{
return (int) this.timeout / 1000; // stored in Millis, but return it in seconds
}
/**
* Set the HTTPIL default RestInterval--the number of seconds the ClientILService
* will sleep after each client request. The default is 0, but you can set this
* value in conjunction with the TimeOut value to implement a pure timed based
* polling mechanism. For example, you could simply do a short lived request by
* setting the TimeOut value to 0 and then setting the RestInterval to 60. This
* would cause the ClientILService to send a single non-blocking request to the
* server, return any messages if available, then sleep for 60 seconds, before
* issuing another request. Like the TimeOut value, this can be explicitly
* overriden on a given client by specifying the org.jboss.mq.il.http.restinterval
* with the number of seconds you wish to wait between requests.
*
* @jmx:managed-attribute
*/
public void setRestInterval(int restInterval)
{
this.restInterval = restInterval * 1000; // provided in seconds so turn it into Millis
}
/**
* Get the HTTPIL default RestInterval
*
* @jmx:managed-attribute
*/
public int getRestInterval()
{
return (int) this.restInterval / 1000; // stored in Millis, but return it in seconds
}
/**
* Set the HTTPIL URL. This value takes precedence over any individual values
* set (i.e. the URLPrefix, URLSuffix, URLPort, etc.) It my be a actual
* URL or a propertyname which will be used on the client side to resolve the
* proper URL by calling System.getProperty(propertyname).
*
* @jmx:managed-attribute
*/
public void setURL(String url)
{
this.url = url;
// Set all specific url properties to null values. I know we could parse
// the URL and set these, but the url might be a property name. Besides
// letting them have value in this case might mislead people into thinking
// that the value mattered. As the Javadoc states, when the URL is set
// all these value are irrelivant.
this.urlPrefix = null;
this.urlHostName = null;
this.urlPort = 0;
this.urlSuffix = null;
this.useHostName = false;
}
/**
* Get the HTTPIL URL. This value takes precedence over any individual values
* set (i.e. the URLPrefix, URLSuffix, URLPort, etc.) It my be a actual
* URL or a propertyname which will be used on the client side to resolve the
* proper URL by calling System.getProperty(propertyname).
*
* @jmx:managed-attribute
*/
public String getURL()
{
return this.url;
}
/**
* Set the HTTPIL URLPrefix. I.E. "http://" or "https://"
* The default is "http://"
*
* @jmx:managed-attribute
*/
public void setURLPrefix(String prefix)
{
this.urlPrefix = prefix;
}
/**
* Get the HTTPIL URLPrefix. I.E. "http://" or "https://"
* The default is "http://"
*
* @jmx:managed-attribute
*/
public String getURLPrefix()
{
return this.urlPrefix;
}
/**
* Set the HTTPIL URLName.
*
* @jmx:managed-attribute
*/
public void setURLHostName(String hostname)
{
this.urlHostName = hostname;
}
/**
* Get the HTTPIL URLHostName.
*
* @jmx:managed-attribute
*/
public String getURLHostName()
{
return this.urlHostName;
}
/**
* Set the HTTPIL URLPort.
* The default is 8080
*
* @jmx:managed-attribute
*/
public void setURLPort(int port)
{
this.urlPort = port;
}
/**
* Get the HTTPIL URLPort.
* The default is 8080
*
* @jmx:managed-attribute
*/
public int getURLPort()
{
return this.urlPort;
}
/**
* Set the HTTPIL URLSuffix. I.E. The section of the URL after the port
* The default is "jbossmq-httpil/HTTPServerILServlet"
*
* @jmx:managed-attribute
*/
public void setURLSuffix(String suffix)
{
this.urlSuffix = suffix;
}
/**
* Get the HTTPIL URLSuffix. I.E. The section of the URL after the port
* The default is "jbossmq-httpil/HTTPServerILServlet"
*
* @jmx:managed-attribute
*/
public String getURLSuffix()
{
return this.urlSuffix;
}
/**
* Set the HTTPIL UseHostName flag.
* if true the default URL will include a hostname, if false it will include
* an IP adddress. The default is false
*
* @jmx:managed-attribute
*/
public void setUseHostName(boolean value)
{
this.useHostName = value;
}
/**
* Get the HTTPIL UseHostName flag.
* if true the default URL will include a hostname, if false it will include
* an IP adddress. The default is false
*
* @jmx:managed-attribute
*/
public boolean getUseHostName()
{
return this.useHostName;
}
/** Build the connection url from the org.jboss.mq.il.http.url system
* property if specified, else, build it from the
* urlPrefix + urlHostName + urlPort + urlSuffix. If urlHostName is null,
* it will be taken from the jboss.bind.address system property if its a
* valid address, InetAddress.getLocalHost otherwise.
*/
private String getConstructedURL() throws Exception
{
if (System.getProperty(HTTPServerILFactory.SERVER_URL_KEY) != null)
{
return System.getProperty(HTTPServerILFactory.SERVER_URL_KEY);
}
else
{
String hostName = this.urlHostName;
if (hostName == null)
{
// First check for a global bind address
hostName = ServerConfigUtil.getSpecificBindAddress();
}
if (hostName == null)
{
// Else use the InetAddress.getLocalHost
if (this.useHostName)
{
hostName = InetAddress.getLocalHost().getHostName();
}
else
{
hostName = InetAddress.getLocalHost().getHostAddress();
}
}
return this.urlPrefix + hostName + ":" + String.valueOf(this.urlPort)
+ "/" + this.urlSuffix;
}
}
}
| HTTPServerILService.java |