📄 adminconnectionfactory.java
字号:
/**
* Redistribution and use of this software and associated documentation
* ("Software"), with or without modification, are permitted provided
* that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright
* statements and notices. Redistributions must also contain a
* copy of this document.
*
* 2. Redistributions in binary form must reproduce the
* above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. The name "Exolab" must not be used to endorse or promote
* products derived from this Software without prior written
* permission of Exoffice Technologies. For written permission,
* please contact info@exolab.org.
*
* 4. Products derived from this Software may not be called "Exolab"
* nor may "Exolab" appear in their names without prior written
* permission of Exoffice Technologies. Exolab is a registered
* trademark of Exoffice Technologies.
*
* 5. Due credit should be given to the Exolab Project
* (http://www.exolab.org/).
*
* THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 2001-2003 (C) Exoffice Technologies Inc. All Rights Reserved.
*
* $Id: AdminConnectionFactory.java,v 1.12 2003/08/18 10:15:32 tanderson Exp $
*/
package org.exolab.jms.administration;
import java.net.MalformedURLException;
import javax.jms.JMSException;
import javax.jms.JMSSecurityException;
import org.exolab.core.util.URI;
import org.exolab.jms.administration.http.HttpJmsAdminConnection;
import org.exolab.jms.administration.http.SslHttpJmsAdminConnection;
import org.exolab.jms.administration.intravm.IntravmJmsAdminConnection;
import org.exolab.jms.administration.mipc.IpcJmsAdminConnection;
import org.exolab.jms.administration.mipc.SslIpcJmsAdminConnection;
import org.exolab.jms.administration.rmi.RmiJmsAdminConnection;
import org.exolab.jms.config.types.SchemeType;
/**
* This class is a factory for creating {@link AdminConnection} instances.
*
* @version $Revision: 1.12 $ $Date: 2003/08/18 10:15:32 $
* @author <a href="mailto:tma@netspace.net.au">Tim Anderson</a>
* @author <a href="mailto:knut@lerpold.no">Knut Lerpold</a>
* @see JmsAdminServerIfc
*/
public class AdminConnectionFactory {
/**
* Attempt to establish an admin connection
*
* @param url the OpenJMS server URL
* @param username the admin user name
* @param password the admin user password
* @return an admin connection
* @throws JMSException if a connection cannot be established
* @throws MalformedURLException if <code>url</code> is invalid
*/
private static AdminConnection getConnection(String url, String username,
String password)
throws JMSException, MalformedURLException {
// made private for the time being. Need to sort out the
// AdminConnection interface post 0.7.6
AdminConnection result = null;
URI parser = null;
try {
parser = new URI(url);
} catch (URI.MalformedURIException exception) {
throw new MalformedURLException(exception.getMessage());
}
String protocol = parser.getScheme();
String host = parser.getHost();
int port = parser.getPort();
String path = parser.getPath();
if (host != null) {
if (host.trim().length() == 0) {
host = null;
}
}
if (path != null) {
if (path.trim().length() == 0) {
path = null;
} else if (path.startsWith("/")) {
path = path.substring(1);
if (path.length() == 0) {
path = null;
}
}
}
SchemeType scheme = null;
try {
scheme = SchemeType.valueOf(protocol);
} catch (IllegalArgumentException exception) {
throw new MalformedURLException("Invalid scheme: " + protocol);
}
// check URL validity
switch (scheme.getType()) {
case SchemeType.TCP_TYPE:
case SchemeType.TCPS_TYPE:
if (host == null || port == -1 || path != null) {
throw new MalformedURLException("Invalid URL: " + url);
}
break;
case SchemeType.RMI_TYPE:
case SchemeType.HTTP_TYPE:
case SchemeType.HTTPS_TYPE:
if (host == null || port == -1) {
throw new MalformedURLException("Invalid URL: " + url);
}
break;
case SchemeType.EMBEDDED_TYPE:
if (host != null || port != -1 || path != null) {
throw new MalformedURLException("Invalid URL: " + url);
}
break;
}
// create the connection
switch (scheme.getType()) {
case SchemeType.TCP_TYPE:
result = new IpcJmsAdminConnection(host, port, username,
password);
break;
case SchemeType.TCPS_TYPE:
result = new SslIpcJmsAdminConnection(host, port, username,
password);
break;
case SchemeType.RMI_TYPE:
result = new RmiJmsAdminConnection(host, port, path,
username, password);
break;
case SchemeType.HTTP_TYPE:
result = new HttpJmsAdminConnection(host, port, path,
username, password);
break;
case SchemeType.HTTPS_TYPE:
result = new SslHttpJmsAdminConnection(host, port, path,
username, password);
break;
case SchemeType.EMBEDDED_TYPE:
result = new IntravmJmsAdminConnection(username, password);
break;
}
return result;
}
/**
* Create an unauthenticated admin connection, using the specified server
* URL
*
* @param url the OpenJMS server URL
* @return JmsAdminServerIfc the administration API
* @throws JMSException if a connection cannot be established
* @throws MalformedURLException if <code>url</code> is invalid
*/
public static JmsAdminServerIfc create(String url)
throws JMSException, MalformedURLException {
return create(url, null, null);
}
/**
* Create an authenticated admin connection, using the specified server
* URL, name, and password
*
* @param url the OpenJMS server URL
* @param username the admin user name
* @param password the admin user password
* @return JmsAdminServerIfc the administration API
* @throws JMSException if a connection cannot be established
* @throws MalformedURLException if <code>url</code> is invalid
*/
public static JmsAdminServerIfc create(String url, String username,
String password)
throws JMSException, MalformedURLException {
JmsAdminServerIfc result = null;
URI parser = null;
try {
parser = new URI(url);
} catch (URI.MalformedURIException exception) {
throw new MalformedURLException(exception.getMessage());
}
String protocol = parser.getScheme();
String host = parser.getHost();
int port = parser.getPort();
String path = parser.getPath();
if (host != null) {
if (host.trim().length() == 0) {
host = null;
}
}
if (path != null) {
if (path.trim().length() == 0) {
path = null;
} else if (path.startsWith("/")) {
path = path.substring(1);
if (path.length() == 0) {
path = null;
}
}
}
SchemeType scheme = null;
try {
scheme = SchemeType.valueOf(protocol);
} catch (IllegalArgumentException exception) {
throw new MalformedURLException("Invalid scheme: " + protocol);
}
// check URL validity
switch (scheme.getType()) {
case SchemeType.TCP_TYPE:
case SchemeType.TCPS_TYPE:
if (host == null || port == -1 || path != null) {
throw new MalformedURLException("Invalid URL: " + url);
}
break;
case SchemeType.RMI_TYPE:
case SchemeType.HTTP_TYPE:
case SchemeType.HTTPS_TYPE:
if (host == null || port == -1) {
throw new MalformedURLException("Invalid URL: " + url);
}
break;
case SchemeType.EMBEDDED_TYPE:
if (host != null || port != -1 || path != null) {
throw new MalformedURLException("Invalid URL: " + url);
}
break;
}
// create the connection
switch (scheme.getType()) {
case SchemeType.TCP_TYPE:
result = new IpcJmsAdminConnection(host, port, username,
password);
break;
case SchemeType.TCPS_TYPE:
result = new SslIpcJmsAdminConnection(host, port, username,
password);
break;
case SchemeType.RMI_TYPE:
result = new RmiJmsAdminConnection(host, port, path,
username, password);
break;
case SchemeType.HTTP_TYPE:
result = new HttpJmsAdminConnection(host, port, path,
username, password);
break;
case SchemeType.HTTPS_TYPE:
result = new SslHttpJmsAdminConnection(host, port, path,
username, password);
break;
case SchemeType.EMBEDDED_TYPE:
result = new IntravmJmsAdminConnection(username, password);
break;
}
return result;
}
} //-- AdminConnectionFactory
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -