1 /***
2 * Redistribution and use of this software and associated documentation
3 * ("Software"), with or without modification, are permitted provided
4 * that the following conditions are met:
5 *
6 * 1. Redistributions of source code must retain copyright
7 * statements and notices. Redistributions must also contain a
8 * copy of this document.
9 *
10 * 2. Redistributions in binary form must reproduce the
11 * above copyright notice, this list of conditions and the
12 * following disclaimer in the documentation and/or other
13 * materials provided with the distribution.
14 *
15 * 3. The name "Exolab" must not be used to endorse or promote
16 * products derived from this Software without prior written
17 * permission of Exoffice Technologies. For written permission,
18 * please contact info@exolab.org.
19 *
20 * 4. Products derived from this Software may not be called "Exolab"
21 * nor may "Exolab" appear in their names without prior written
22 * permission of Exoffice Technologies. Exolab is a registered
23 * trademark of Exoffice Technologies.
24 *
25 * 5. Due credit should be given to the Exolab Project
26 * (http://www.exolab.org/).
27 *
28 * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS
29 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
30 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
32 * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
37 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39 * OF THE POSSIBILITY OF SUCH DAMAGE.
40 *
41 * Copyright 2000-2003 (C) Exoffice Technologies Inc. All Rights Reserved.
42 *
43 * $Id: HttpJmsServer.java,v 1.7 2003/09/25 12:37:56 tanderson Exp $
44 */
45
46 package org.exolab.jms.server.http;
47
48 import java.net.InetAddress;
49 import java.net.UnknownHostException;
50 import java.util.Hashtable;
51
52 import javax.naming.Context;
53 import javax.naming.NamingException;
54
55 import org.exolab.jms.client.http.HttpJmsConstants;
56 import org.exolab.jms.client.mipc.IpcJmsConstants;
57 import org.exolab.jms.config.Configuration;
58 import org.exolab.jms.config.ConfigurationManager;
59 import org.exolab.jms.config.Connector;
60 import org.exolab.jms.config.ConnectorHelper;
61 import org.exolab.jms.config.ConnectorResource;
62 import org.exolab.jms.config.HttpConfigurationType;
63 import org.exolab.jms.config.ServerConfiguration;
64 import org.exolab.jms.config.TcpConfigurationType;
65 import org.exolab.jms.config.types.SchemeType;
66 import org.exolab.jms.server.ConnectionFactoryHelper;
67 import org.exolab.jms.server.JmsServerIfc;
68 import org.exolab.jms.server.ServerException;
69
70
71 /***
72 * This class enables clients to connect to the JMS server via
73 * a HTTP server.
74 * It must be used in conjunction with the TCP connector.
75 *
76 * @version $Revision: 1.7 $ $Date: 2003/09/25 12:37:56 $
77 * @author <a href="mailto:mourikis@intalio.com">Jim Mourikis</a>
78 */
79 public class HttpJmsServer implements JmsServerIfc {
80
81 /***
82 * Construct a new <code>HttpJmsServer</code>
83 */
84 public HttpJmsServer() {
85 }
86
87 /***
88 * Initialise the server
89 */
90 public void init() throws ServerException {
91 HttpConfigurationType config =
92 ConfigurationManager.getConfig().getHttpConfiguration();
93
94 if (config.getProxyHost() != null) {
95 System.setProperty("http.proxyHost", config.getProxyHost());
96 }
97 if (config.hasProxyPort()) {
98 System.setProperty("http.proxyPort",
99 Integer.toString(config.getProxyPort()));
100 }
101 }
102
103 // implementation of JmsServerIfc.bindConnectionFactories
104 public void bindConnectionFactories(Context context)
105 throws NamingException, ServerException {
106
107 Configuration config = ConfigurationManager.getConfig();
108
109 // retrieve the configuration information from the configuration
110 // manager
111 ServerConfiguration server = config.getServerConfiguration();
112 TcpConfigurationType tcp = config.getTcpConfiguration();
113 String host = normalizeHost(server.getHost());
114 String internalHost = normalizeHost(tcp.getInternalHost());
115
116 // we need to put together a list of parameters that the
117 // connection factories will need to use to connect
118 // to this server
119 Hashtable env = new Hashtable();
120 env.put(getHttpServerProperty(), getHttpServerURL());
121 env.put(IpcJmsConstants.IPC_SERVER_HOST, host);
122 env.put(IpcJmsConstants.IPC_SERVER_PORT,
123 Integer.toString(tcp.getPort()));
124 if (internalHost != null) {
125 env.put(IpcJmsConstants.IPC_INTERNAL_SERVER_HOST, internalHost);
126 }
127 Connector connector = ConfigurationManager.getConnector(getScheme());
128 ConnectorResource resource =
129 ConnectorHelper.getConnectorResource(getScheme());
130
131 Class proxy;
132 String className = resource.getServer().getProxyClass();
133 try {
134 proxy = Class.forName(className);
135 } catch (ClassNotFoundException exception) {
136 throw new ServerException(
137 "Failed to locate the server proxy class: " + className);
138 }
139
140 ConnectionFactoryHelper.bind(
141 context, connector.getConnectionFactories(), proxy, env);
142 }
143
144 /***
145 * Returns the connector scheme for this server.
146 */
147 protected SchemeType getScheme() {
148 return SchemeType.HTTP;
149 }
150
151 /***
152 * Returns the HTTP configuration
153 */
154 protected HttpConfigurationType getHttpConfiguration() {
155 return ConfigurationManager.getConfig().getHttpConfiguration();
156 }
157
158 /***
159 * Returns the HTTP server URL property name, used in the construction
160 * of connection factories
161 */
162 protected String getHttpServerProperty() {
163 return HttpJmsConstants.HTTP_SERVER_URL;
164 }
165
166 /***
167 * Returns the HTTP server URL, used in the construction of connection
168 * factories
169 */
170 protected String getHttpServerURL() {
171 HttpConfigurationType config = getHttpConfiguration();
172 String host = config.getHost();
173 // NOTE: host should not be converted to an IP address
174 // refer to bug 806377 - HTTPS connector shouldn't convert host
175 // names
176 int port = config.getPort();
177 String url = getScheme() + "://" + host + ":" + port;
178 String path = config.getServerServlet();
179 if (!path.startsWith("/")) {
180 url += "/" + path;
181 } else {
182 url += path;
183 }
184 return url;
185 }
186
187 /***
188 * This method will normalize the host name. If the host is localhost then
189 * it will be converted to the corresponding IP address
190 *
191 * @param host - the raw host name
192 * @return the normalized IP address
193 */
194 protected String normalizeHost(String host) {
195 String server = host;
196
197 // ensure that the host is not null
198 if (host == null) {
199 return host;
200 }
201
202 if (host.equals("localhost")) {
203 try {
204 server = InetAddress.getLocalHost().getHostAddress();
205 } catch (UnknownHostException ignore) {
206 // ignore
207 }
208 }
209
210 return server;
211 }
212
213 } //-- HttpJmsServer
This page was automatically generated by Maven