001 /*
002 // $Id: XmlaOlap4jCache.java 482 2012-01-05 23:27:27Z jhyde $
003 //
004 // Licensed to Julian Hyde under one or more contributor license
005 // agreements. See the NOTICE file distributed with this work for
006 // additional information regarding copyright ownership.
007 //
008 // Julian Hyde licenses this file to you under the Apache License,
009 // Version 2.0 (the "License"); you may not use this file except in
010 // compliance with the License. You may obtain a copy of the License at:
011 //
012 // http://www.apache.org/licenses/LICENSE-2.0
013 //
014 // Unless required by applicable law or agreed to in writing, software
015 // distributed under the License is distributed on an "AS IS" BASIS,
016 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017 // See the License for the specific language governing permissions and
018 // limitations under the License.
019 */
020 package org.olap4j.driver.xmla.cache;
021
022 import org.olap4j.OlapException;
023
024 import java.net.URL;
025 import java.util.Map;
026
027 /**
028 * XMLA driver cache. Implementations will have to declare those methods.
029 *
030 * <p>The XMLA driver will call the cache before each SOAP request to see
031 * if it wasn't sent previously and if a SOAP response doesn't already
032 * exist in it.
033 *
034 * <p>Any implementations have to declare a constructor which takes a String
035 * as a parameter. This string value is the unique name of the connection
036 * which triggered the request.
037 *
038 * @author Luc Boudreau
039 * @version $Id: XmlaOlap4jCache.java 482 2012-01-05 23:27:27Z jhyde $
040 */
041 public interface XmlaOlap4jCache {
042
043 /**
044 * Fetches a SOAP response from the cache. Returns null
045 * if there are no cached response corresponding to the SOAP
046 * message and the URL.
047 *
048 * @param id The connection unique name which called this cache.
049 * @param url The URL where the SOAP message was sent.
050 * @param request The SOAP complete message.
051 *
052 * @throws OlapException when operations to the cache are
053 * performed but it hasn't been initialized. Make sure you
054 * call the setParameters(Map, Map) method.
055 *
056 * @return The SOAP response, null if there are no corresponding
057 * response in the cache.
058 */
059 public byte[] get(
060 String id,
061 URL url,
062 byte[] request)
063 throws OlapException;
064
065 /**
066 * Adds a SOAP response to the cache. It has to be relative to the
067 * URL of the SOAP service.
068 *
069 * @param id The connection unique name which called this cache.
070 * @param url The URL of the SOAP endpoint.
071 * @param request The full SOAP message from which we want to cache its
072 * response.
073 * @param response The response to cache.
074 *
075 * @throws OlapException when operations to the cache are
076 * performed but it hasn't been initialized. Make sure you
077 * call the setParameters(Map, Map) method.
078 */
079 public void put(
080 String id,
081 URL url,
082 byte[] request,
083 byte[] response)
084 throws OlapException;
085
086 /**
087 * Tells the cache to flush all cached entries.
088 */
089 public void flushCache();
090
091 /**
092 * Convenience method to receive custom properties.
093 *
094 * <p>The XMLA driver takes cache properties as
095 * "<code>Cache.[property name]=[value]</code>" in its JDBC url. All those
096 * properties should be striped of their "<code>Cache.</code>" prefix and
097 * sent to this method as the props parameter.
098 *
099 * <p>Also, the complete map of the current connection
100 * should be passed as the config parameter.
101 *
102 * @param config The complete configuration parameters which were used to
103 * create the current connection.
104 * @param props The properties received from the JDBC url.
105 * @return Returns a string object which gives a reference id to the
106 * caller for future use. This id has to be passed along with any future
107 * get and put requests.
108 */
109 public String setParameters(
110 Map<String, String> config,
111 Map<String, String> props);
112 }
113
114 // End XmlaOlap4jCache.java