vgritsenko 2003/08/15 20:11:08
Modified: java/src/org/apache/xindice/client/xmldb/xmlrpc CollectionImpl.java DatabaseImpl.java Log: Configure static properties of class XmlRpc once. No reason to configure it on per collection basis. Revision Changes Path 1.33 +19 -38 xml-xindice/java/src/org/apache/xindice/client/xmldb/xmlrpc/CollectionImpl.java Index: CollectionImpl.java =================================================================== RCS file: /home/cvs/xml-xindice/java/src/org/apache/xindice/client/xmldb/xmlrpc/CollectionImpl.java,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- CollectionImpl.java 13 Aug 2003 18:51:15 -0000 1.32 +++ CollectionImpl.java 16 Aug 2003 03:11:08 -0000 1.33 @@ -72,7 +72,6 @@ import org.apache.xindice.xml.TextWriter; import org.apache.xindice.xml.dom.DOMParser; import org.apache.xindice.xml.dom.DocumentImpl; -import org.apache.xmlrpc.XmlRpc; import org.apache.xmlrpc.XmlRpcClient; import org.w3c.dom.Document; @@ -103,19 +102,24 @@ private static final Log log = LogFactory.getLog(CollectionImpl.class); - /* path to XML-RPC service on database */ - private static String XINDICE_SERVICE_LOCATION = "/xindice/"; + /** + * Default path to the XML-RPC service in the web server + */ + private static final String XINDICE_SERVICE_LOCATION = "/xindice/"; - /* host and port number of server */ + /** + * Host and port number of the database server + */ private String hostPort; - /* location of the XML-RPC service in the web server */ + /** + * Location of the XML-RPC service in the web server + */ private String serviceLocation; - /* SAX parser the XML-RPC service will use */ - private String xmlrpcDriver; - - /* the XML-RPC client stub, connected to server */ + /** + * The XML-RPC client stub, connected to the server + */ private XmlRpcClient client = null; /** @@ -134,34 +138,11 @@ * because of URL syntax errors, or connection failure, or if no * collection with path <code>collPath</code> could be located. */ - public CollectionImpl(String hostPort, String serviceLocation, String xmlrpcDriver, String collPath) throws XMLDBException { + public CollectionImpl(String hostPort, String serviceLocation, String collPath) throws XMLDBException { super(collPath); + this.hostPort = hostPort; this.serviceLocation = serviceLocation; - this.xmlrpcDriver = xmlrpcDriver; - - XmlRpc.setEncoding("UTF8"); - - /* - * Determine the SAXparser the xmlrpc client will use. - * In priority order: - * DatabaseImpl xmlrpc-driver property - * (passed in the xmlrpcDriver parameter) - * System property "xindice.xmlrpc.driver" - * Default value "xerces" - */ - if (xmlrpcDriver == null) { - xmlrpcDriver = System.getProperty("xindice.xmlrpc.driver"); - } - if (xmlrpcDriver == null) { - xmlrpcDriver = "xerces"; - } - XmlRpc.setKeepAlive(true); - try { - XmlRpc.setDriver(xmlrpcDriver); - } catch (Exception e) { - throw new XMLDBException(ErrorCodes.VENDOR_ERROR, "Xerces needed", e); - } /* * Determine the path in the web server to the XML-RPC service. @@ -379,7 +360,7 @@ } try { - return new CollectionImpl(hostPort, serviceLocation, xmlrpcDriver, collPath + "/" + name); + return new CollectionImpl(hostPort, serviceLocation, collPath + "/" + name); } catch (XMLDBException e) { if (e.errorCode == ErrorCodes.NO_SUCH_COLLECTION) { @@ -453,7 +434,7 @@ } try { - return new CollectionImpl(hostPort, serviceLocation, xmlrpcDriver, collPath.substring(0, collPath.lastIndexOf('/'))); + return new CollectionImpl(hostPort, serviceLocation, collPath.substring(0, collPath.lastIndexOf('/'))); } catch (XMLDBException e) { if (e.errorCode == ErrorCodes.NO_SUCH_COLLECTION) { // per getParentCollection contract, return null if no parent 1.16 +79 -15 xml-xindice/java/src/org/apache/xindice/client/xmldb/xmlrpc/DatabaseImpl.java Index: DatabaseImpl.java =================================================================== RCS file: /home/cvs/xml-xindice/java/src/org/apache/xindice/client/xmldb/xmlrpc/DatabaseImpl.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- DatabaseImpl.java 9 Aug 2003 02:44:23 -0000 1.15 +++ DatabaseImpl.java 16 Aug 2003 03:11:08 -0000 1.16 @@ -63,6 +63,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.xmlrpc.XmlRpc; + import org.xmldb.api.base.Collection; import org.xmldb.api.base.Database; import org.xmldb.api.base.ErrorCodes; @@ -83,30 +85,45 @@ private static final Log log = LogFactory.getLog(DatabaseImpl.class); /** - * Prefix used to denote XML:DB URI's that should use this driver + * Property name for the xml-rpc service location. */ - static String DRIVER_NAME = "xindice"; + private static final String PROP_SERVICE_LOCATION = "service-location"; /** - * XML:DB conformance level of this driver + * Property name for the SAX parser xml-rpc will use. */ - private String CONFORMANCE_LEVEL = "0"; + private static final String PROP_XMLRPC_DRIVER = "xmlrpc-driver"; /** - * Property name for the xml-rpc service location. + * System property name for the SAX parser xml-rpc will use in case + * there were no configuration property passed */ - private static final String PROP_SERVICE_LOCATION = "service-location"; + private static final String SYSPROP_XMLRPC_DRIVER = "xindice.xmlrpc.driver"; /** - * Property name for the SAX parser xml-rpc will use. + * Default value of the xmlrpc-driver property */ - private static final String PROP_XMLRPC_DRIVER = "xmlrpc-driver"; + private static final String DEFAULT_XMLRPC_DRIVER = "xerces"; + + /** + * Prefix used to denote XML:DB URI's that should use this driver + */ + static String DRIVER_NAME = "xindice"; + + /** + * XML:DB conformance level of this driver + */ + private String CONFORMANCE_LEVEL = "0"; + /** + * Ensures that XML-RPC initialized just once + */ + private static boolean xmlRpcInitialized; /** * Create a new DatabaseImpl object. */ - public DatabaseImpl() { + public DatabaseImpl() throws XMLDBException { super(); } @@ -114,11 +131,11 @@ * Create a new DatabaseImpl object with a copy of the properties * from the DatabaseImpl parameter. * - * @param commonConfigurable from which the initial parameters for this + * @param config from which the initial parameters for this * DatabaseImpl object are copied. */ - public DatabaseImpl(CommonConfigurable commonConfigurable) { - super(commonConfigurable); + public DatabaseImpl(CommonConfigurable config) throws XMLDBException { + super(config); } /** @@ -139,6 +156,46 @@ } /** + * Initialize XML-RPC static properties: encoding, keep-alive, SAX driver. + * + * @throws XMLDBException if specified (or default, if none specified) SAX drvier + * class could not be loaded + */ + private void initialize() throws XMLDBException { + synchronized(getClass()) { + if (!xmlRpcInitialized) { + XmlRpc.setEncoding("UTF8"); + XmlRpc.setKeepAlive(true); + + /* + * Determine the SAXparser the xmlrpc client will use. + * In priority order: + * DatabaseImpl xmlrpc-driver property + * (passed in the xmlrpcDriver parameter) + * System property "xindice.xmlrpc.driver" + * Default value "xerces" + */ + String xmlrpcDriver = getProperty(PROP_XMLRPC_DRIVER); + if (xmlrpcDriver == null) { + xmlrpcDriver = System.getProperty(SYSPROP_XMLRPC_DRIVER); + if (xmlrpcDriver == null) { + xmlrpcDriver = DEFAULT_XMLRPC_DRIVER; + } + } + + try { + XmlRpc.setDriver(xmlrpcDriver); + } catch (Exception e) { + throw new XMLDBException(ErrorCodes.VENDOR_ERROR, + "SAX Driver " + xmlrpcDriver + " is not available", e); + } + } + + xmlRpcInitialized = true; + } + } + + /** * Retrieves a <code>Collection</code> instance based on the URI provided * in the <code>uri</code> parameter. The format of the URI is defined in the * documentation for DatabaseManager.getCollection().<p/> @@ -187,10 +244,17 @@ if (log.isDebugEnabled()) { log.debug("Using default host and port: '"+hostPort+"'"); } + } else { + if (log.isDebugEnabled()) { + log.debug("Using host and port: '"+hostPort+"'"); + } } + // Init XML-RPC in case it is not initialized yet + initialize(); + try { - return new CollectionImpl(hostPort, getProperty(PROP_SERVICE_LOCATION), getProperty(PROP_XMLRPC_DRIVER), collPath); + return new CollectionImpl(hostPort, getProperty(PROP_SERVICE_LOCATION), collPath); } catch (XMLDBException e) { if (e.errorCode == ErrorCodes.NO_SUCH_COLLECTION) { // per getCollection contract, return null if not found