001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package javax.xml.registry;
023:
024: import java.util.Collection;
025: import java.util.Properties;
026:
027: /** This is the abstract base class for factory classes for creating a JAXR
028: * connection. A JAXR ConnectionFactory object is configured in a
029: * provider-specific way to create connections with registry providers.
030: *
031: * Looking Up a ConnectionFactory Using the JNDI API
032: * The preferred way for a client to look up a JAXR ConnectionFactory is within
033: * the Java Naming and Directory InterfaceTM (JNDI) API. A ConnectionFactory
034: * object is registered with a naming service in a provider specific way, such
035: * as one based on the JNDI API. This registration associates the
036: * ConnectionFactory object with a logical name. When an application wants to
037: * establish a connection with the provider associated with that
038: * ConnectionFactory object, it does a lookup, providing the logical name.
039: * The application can then use the ConnectionFactory object that is returned
040: * to create a connection to the messaging provider.
041: *
042: * Looking Up a ConnectionFactory Without Using the JNDI API
043: * The JAXR API provides an alternative way to look up a JAXR ConnectionFactory
044: * that does not require the use of the JNDI API. This is done using the
045: * newInstance static method on the abstract class ConnectionFactory provided
046: * in the JAXR API. The newInstance method returns a JAXR ConnectionFactory.
047: * The client may indicate which factory class should be instantiated by the
048: * newInstance method by defining the system property
049: * javax.xml.registry.ConnectionFactoryClass. If this property is not set,
050: * the JAXR provider must return a default ConnectionFactory instance.
051: *
052: * @author Scott.Stark@jboss.org
053: * @author Farrukh S. Najmi (javadoc)
054: * @version $Revision: 57196 $
055: */
056: public abstract class ConnectionFactory {
057: private static final String SYS_PROP_NAME = "javax.xml.registry.ConnectionFactoryClass";
058:
059: public static ConnectionFactory newInstance() throws JAXRException {
060: String factoryName = null;
061: ConnectionFactory factory = null;
062: try {
063: String defaultName = null;
064: factoryName = System
065: .getProperty(SYS_PROP_NAME, defaultName);
066: ClassLoader loader = Thread.currentThread()
067: .getContextClassLoader();
068: Class factoryClass = loader.loadClass(factoryName);
069: factory = (ConnectionFactory) factoryClass.newInstance();
070: } catch (Throwable e) {
071: throw new JAXRException("Failed to create instance of: "
072: + factoryName, e);
073: }
074: return factory;
075: }
076:
077: public ConnectionFactory() {
078: }
079:
080: public abstract Connection createConnection() throws JAXRException;
081:
082: public abstract FederatedConnection createFederatedConnection(
083: Collection connections) throws JAXRException;
084:
085: public abstract Properties getProperties() throws JAXRException;
086:
087: /** Sets the Properties used during createConnection and
088: * createFederatedConnection calls.
089: * Standard Connection Properties:
090: * javax.xml.registry.queryManagerURL - URL String for the query manager
091: * service within the target registry provider
092: * javax.xml.registry.lifeCycleManagerURL - URL String for the life cycle
093: * manager service within the target registry provider. If unspecified,
094: * must default to value of the queryManagerURL described above
095: * javax.xml.registry.semanticEquivalences - String that allows
096: * specification of semantic equivalences
097: * javax.xml.registry.security.authenticationMethod - string that provides
098: * a hint to the JAXR provider on the authentication method to be used when
099: * authenticating with the registry provider. Possible value include but
100: * are not limited to "UDDI_GET_AUTHTOKEN", "HTTP_BASIC",
101: * "CLIENT_CERTIFICATE", "MS_PASSPORT"
102: * javax.xml.registry.uddi.maxRows - integer that specifies the maximum
103: * number of rows to be returned for find operations. This property is
104: * specific for UDDI providers
105: * javax.xml.registry.postalAddressScheme - String that specifies the id of
106: * a ClassificationScheme that is used as the default postal address scheme
107: * for this connection
108: * @param factoryProps
109: * @throws JAXRException
110: */
111: public abstract void setProperties(Properties factoryProps)
112: throws JAXRException;
113:
114: }
|