You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2006/09/08 03:40:59 UTC
svn commit: r441330 - in
/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client:
./ cache/ cache/lru/ util/
Author: jmsnell
Date: Thu Sep 7 18:40:58 2006
New Revision: 441330
URL: http://svn.apache.org/viewvc?view=rev&rev=441330
Log:
General implementation improvements to improve threadsafety, reuse common code
and make things generally more robust
Modified:
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/AbstractClientResponse.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/Client.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/CommonsClient.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/CommonsResponse.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/RequestOptions.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CacheBase.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CacheFactory.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CachedResponseBase.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/InMemoryCache.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/InMemoryCachedResponse.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/lru/LRUCache.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/lru/LRUCacheFactory.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/util/BaseRequestEntity.java
incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/util/DataSourceRequestEntity.java
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/AbstractClientResponse.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/AbstractClientResponse.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/AbstractClientResponse.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/AbstractClientResponse.java Thu Sep 7 18:40:58 2006
@@ -34,17 +34,19 @@
extends AbstractResponse
implements ClientResponse {
+ protected final Abdera abdera;
+ protected final Parser parser;
+ protected final Date now = new Date();
+
protected InputStream in = null;
- protected Date response_date = null;
- protected Date now = new Date();
- protected Abdera abdera = null;
- protected Parser parser = null;
+ protected Date response_date = null;
+
+ protected AbstractClientResponse(Abdera abdera) {
+ this.abdera = abdera;
+ this.parser = abdera.getParser();
+ }
protected synchronized Parser getParser() {
- if (parser == null) {
- if (abdera == null) abdera = new Abdera();
- parser = abdera.getParser();
- }
return parser;
}
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/Client.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/Client.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/Client.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/Client.java Thu Sep 7 18:40:58 2006
@@ -43,16 +43,16 @@
*/
public abstract class Client {
- protected Abdera abdera = null;
- protected Cache cache = null;
- protected CacheFactory cacheFactory = null;
+ protected final Abdera abdera;
+ protected final Cache cache;
public Client() {
- this.abdera = new Abdera();
+ this(new Abdera());
}
protected Client(Abdera abdera) {
this.abdera = abdera;
+ this.cache = initCache(initCacheFactory());
}
/**
@@ -87,27 +87,23 @@
*/
public abstract void usePreemptiveAuthentication(boolean val);
- public abstract void init(String userAgent);
-
- private CacheFactory getCacheFactory() {
- if (cacheFactory == null) {
- cacheFactory = (CacheFactory)ServiceUtil.newInstance(
+ private CacheFactory initCacheFactory() {
+ CacheFactory cacheFactory =
+ (CacheFactory)ServiceUtil.newInstance(
"org.apache.abdera.protocol.cache.CacheFactory",
"org.apache.abdera.protocol.cache.lru.LRUCacheFactory",
abdera);
- }
return cacheFactory;
}
public Cache getCache() {
- if (cache == null) {
- CacheFactory factory = getCacheFactory();
- if (factory != null)
- cache = factory.getCache();
- if (cache == null)
- cache = new LRUCache();
- }
return cache;
+ }
+
+ public Cache initCache(CacheFactory factory) {
+ Cache cache = null;
+ if (factory != null) cache = factory.getCache(abdera);
+ return (cache != null) ? cache : new LRUCache(abdera);
}
public ClientResponse head(
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/CommonsClient.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/CommonsClient.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/CommonsClient.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/CommonsClient.java Thu Sep 7 18:40:58 2006
@@ -38,37 +38,35 @@
public class CommonsClient extends Client {
- private HttpClient client = null;
+ private static final String DEFAULT_USER_AGENT =
+ Version.APP_NAME + "/" + Version.VERSION;
+
+ private final HttpClient client;
public CommonsClient() {
- this(Version.APP_NAME + "/" + Version.VERSION);
+ this(DEFAULT_USER_AGENT);
}
public CommonsClient(Abdera abdera) {
- this(Version.APP_NAME + "/" + Version.VERSION, abdera);
+ this(DEFAULT_USER_AGENT, abdera);
}
public CommonsClient(String userAgent) {
- init(userAgent);
+ this(userAgent, new Abdera());
}
public CommonsClient(String userAgent,Abdera abdera) {
super(abdera);
- init(userAgent);
- }
-
- public void usePreemptiveAuthentication(boolean val) {
- client.getParams().setAuthenticationPreemptive(val);
- }
-
- @Override
- public void init(String userAgent) {
client = new HttpClient();
client.getParams().setParameter(
HttpClientParams.USER_AGENT,
userAgent);
client.getParams().setBooleanParameter(
- HttpClientParams.USE_EXPECT_CONTINUE, true);
+ HttpClientParams.USE_EXPECT_CONTINUE, true);
+ }
+
+ public void usePreemptiveAuthentication(boolean val) {
+ client.getParams().setAuthenticationPreemptive(val);
}
private boolean useCache(
@@ -127,7 +125,7 @@
MethodHelper.createMethod(
method, uri, entity, options);
client.executeMethod(httpMethod);
- ClientResponse response = new CommonsResponse(httpMethod);
+ ClientResponse response = new CommonsResponse(abdera,httpMethod);
return (options.getUseLocalCache()) ?
response = cache.update(options, response, cached_response) :
response;
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/CommonsResponse.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/CommonsResponse.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/CommonsResponse.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/CommonsResponse.java Thu Sep 7 18:40:58 2006
@@ -25,6 +25,7 @@
import java.util.List;
import java.util.Map;
+import org.apache.abdera.Abdera;
import org.apache.abdera.protocol.util.ContentEncodingUtil;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpMethod;
@@ -36,9 +37,10 @@
extends AbstractClientResponse
implements ClientResponse {
- private HttpMethod method = null;
+ private final HttpMethod method;
- protected CommonsResponse(HttpMethod method) {
+ protected CommonsResponse(Abdera abdera, HttpMethod method) {
+ super(abdera);
if (method.isRequestSent())
this.method = method;
else throw new IllegalStateException();
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/RequestOptions.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/RequestOptions.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/RequestOptions.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/RequestOptions.java Thu Sep 7 18:40:58 2006
@@ -39,39 +39,45 @@
private boolean noLocalCache = false;
private boolean revalidateAuth = false;
- private Map<String,List<String>> headers = null;
+ private final Map<String,List<String>> headers;
- public RequestOptions() {}
+ public RequestOptions() {
+ headers = new HashMap<String,List<String>>();
+ }
public RequestOptions(Date ifModifiedSince) {
+ this();
setIfModifiedSince(ifModifiedSince);
}
public RequestOptions(String ifNoneMatch) {
+ this();
setIfNoneMatch(ifNoneMatch);
}
public RequestOptions(String... ifNoneMatch) {
+ this();
setIfNoneMatch(ifNoneMatch);
}
public RequestOptions(Date ifModifiedSince, String ifNoneMatch) {
+ this();
setIfModifiedSince(ifModifiedSince);
setIfNoneMatch(ifNoneMatch);
}
public RequestOptions(Date ifModifiedSince, String... ifNoneMatch) {
+ this();
setIfModifiedSince(ifModifiedSince);
setIfNoneMatch(ifNoneMatch);
}
public RequestOptions(boolean no_cache) {
+ this();
setNoCache(no_cache);
}
private Map<String,List<String>> getHeaders() {
- if (headers == null)
- headers = new HashMap<String,List<String>>();
return headers;
}
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CacheBase.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CacheBase.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CacheBase.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CacheBase.java Thu Sep 7 18:40:58 2006
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.util.List;
+import org.apache.abdera.Abdera;
import org.apache.abdera.protocol.client.RequestOptions;
import org.apache.abdera.protocol.client.ClientResponse;
import org.apache.abdera.protocol.util.CacheControlUtil;
@@ -27,6 +28,12 @@
public abstract class CacheBase
implements Cache {
+ protected final Abdera abdera;
+
+ protected CacheBase(Abdera abdera) {
+ this.abdera = abdera;
+ }
+
public CachedResponse get(String uri, RequestOptions options) {
return get(getCacheKey(uri,options));
}
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CacheFactory.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CacheFactory.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CacheFactory.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CacheFactory.java Thu Sep 7 18:40:58 2006
@@ -17,8 +17,10 @@
*/
package org.apache.abdera.protocol.client.cache;
+import org.apache.abdera.Abdera;
+
public interface CacheFactory {
- Cache getCache();
+ Cache getCache(Abdera abdera);
}
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CachedResponseBase.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CachedResponseBase.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CachedResponseBase.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/CachedResponseBase.java Thu Sep 7 18:40:58 2006
@@ -19,18 +19,19 @@
import java.util.Date;
+import org.apache.abdera.Abdera;
import org.apache.abdera.protocol.client.AbstractClientResponse;
public abstract class CachedResponseBase
extends AbstractClientResponse
implements CachedResponse {
- protected CacheKey key = null;
- protected Cache cache = null;
+ protected final CacheKey key;
+ protected final Cache cache;
protected long initial_age = -1;
- protected CachedResponseBase(CacheKey key, Cache cache) {
- super();
+ protected CachedResponseBase(Abdera abdera, CacheKey key, Cache cache) {
+ super(abdera);
this.key = key;
this.cache = cache;
}
@@ -46,7 +47,6 @@
public void release() {
if (cache != null) {
cache.remove(key);
- this.cache= null;
}
}
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/InMemoryCache.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/InMemoryCache.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/InMemoryCache.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/InMemoryCache.java Thu Sep 7 18:40:58 2006
@@ -21,14 +21,19 @@
import java.util.Collections;
import java.util.Map;
+import org.apache.abdera.Abdera;
import org.apache.abdera.protocol.client.RequestOptions;
import org.apache.abdera.protocol.client.ClientResponse;
public abstract class InMemoryCache
extends CacheBase {
- protected transient Map<CacheKey,CachedResponse> cache = null;
+ protected transient Map<CacheKey,CachedResponse> cache;
+ protected InMemoryCache(Abdera abdera) {
+ super(abdera);
+ }
+
protected void setMap(Map<CacheKey,CachedResponse> map) {
cache = Collections.synchronizedMap(map);
}
@@ -38,7 +43,7 @@
ClientResponse response,
CacheKey key)
throws IOException {
- return new InMemoryCachedResponse(this, key, response);
+ return new InMemoryCachedResponse(abdera, this, key, response);
}
public void clear() {
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/InMemoryCachedResponse.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/InMemoryCachedResponse.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/InMemoryCachedResponse.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/InMemoryCachedResponse.java Thu Sep 7 18:40:58 2006
@@ -26,6 +26,7 @@
import java.util.List;
import java.util.Map;
+import org.apache.abdera.Abdera;
import org.apache.abdera.protocol.client.ClientException;
import org.apache.abdera.protocol.client.ClientResponse;
import org.apache.abdera.protocol.client.util.MethodHelper;
@@ -45,11 +46,12 @@
private byte[] buf = null;
public InMemoryCachedResponse(
+ Abdera abdera,
Cache cache,
CacheKey key,
ClientResponse response)
throws IOException {
- super(key,cache);
+ super(abdera, key,cache);
this.method = response.getMethod();
this.status = response.getStatus();
this.status_text = response.getStatusText();
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/lru/LRUCache.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/lru/LRUCache.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/lru/LRUCache.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/lru/LRUCache.java Thu Sep 7 18:40:58 2006
@@ -20,6 +20,7 @@
import java.util.LinkedHashMap;
import java.util.Map;
+import org.apache.abdera.Abdera;
import org.apache.abdera.protocol.client.cache.Cache;
import org.apache.abdera.protocol.client.cache.CacheKey;
import org.apache.abdera.protocol.client.cache.CachedResponse;
@@ -32,11 +33,12 @@
private final static int DEFAULT_SIZE = 10;
- public LRUCache() {
- this(DEFAULT_SIZE);
+ public LRUCache(Abdera abdera) {
+ this(abdera,DEFAULT_SIZE);
}
- public LRUCache(final int size) {
+ public LRUCache(Abdera abdera, final int size) {
+ super(abdera);
setMap(
new LinkedHashMap<CacheKey,CachedResponse>(size,0.75f,true) {
@Override
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/lru/LRUCacheFactory.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/lru/LRUCacheFactory.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/lru/LRUCacheFactory.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/cache/lru/LRUCacheFactory.java Thu Sep 7 18:40:58 2006
@@ -17,13 +17,14 @@
*/
package org.apache.abdera.protocol.client.cache.lru;
+import org.apache.abdera.Abdera;
import org.apache.abdera.protocol.client.cache.Cache;
import org.apache.abdera.protocol.client.cache.CacheFactory;
public class LRUCacheFactory implements CacheFactory {
- public Cache getCache() {
- return new LRUCache();
+ public Cache getCache(Abdera abdera) {
+ return new LRUCache(abdera);
}
}
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/util/BaseRequestEntity.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/util/BaseRequestEntity.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/util/BaseRequestEntity.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/util/BaseRequestEntity.java Thu Sep 7 18:40:58 2006
@@ -22,11 +22,7 @@
import java.io.OutputStream;
import org.apache.abdera.model.Base;
-import org.apache.abdera.model.Document;
-import org.apache.abdera.model.Element;
-import org.apache.abdera.model.Entry;
-import org.apache.abdera.model.Feed;
-import org.apache.abdera.model.Service;
+import org.apache.abdera.util.MimeTypeHelper;
import org.apache.commons.httpclient.methods.RequestEntity;
/**
@@ -35,7 +31,7 @@
public class BaseRequestEntity
implements RequestEntity {
- private Base base = null;
+ private final Base base;
private byte[] buf = null;
private boolean use_chunked = true;
@@ -85,35 +81,7 @@
}
public String getContentType() {
- String type = null;
- if (base instanceof Document) {
- Document doc = (Document) base;
- if (doc.getContentType() != null) {
- type = doc.getContentType().toString();
- } else {
- if (doc.getRoot() instanceof Feed ||
- doc.getRoot() instanceof Entry) {
- type = "application/atom+xml";
- } else if (doc.getRoot() instanceof Service) {
- type = "application/atomserv+xml";
- } else {
- type = "application/xml";
- }
- }
- } else if (base instanceof Feed || base instanceof Entry) {
- Document doc = ((Element)base).getDocument();
- if (doc != null && doc.getContentType() != null)
- type = doc.getContentType().toString();
- if (type == null)
- type = "application/atom+xml";
- } else if (base instanceof Service) {
- Document doc = ((Element)base).getDocument();
- if (doc != null)
- type = doc.getContentType().toString();
- if (type == null)
- type = "application/atomserv+xml";
- }
- return (type != null) ? type : "application/xml";
+ return MimeTypeHelper.getMimeType(base);
}
}
Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/util/DataSourceRequestEntity.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/util/DataSourceRequestEntity.java?view=diff&rev=441330&r1=441329&r2=441330
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/util/DataSourceRequestEntity.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/util/DataSourceRequestEntity.java Thu Sep 7 18:40:58 2006
@@ -29,7 +29,7 @@
public class DataSourceRequestEntity
implements RequestEntity {
- private DataSource dataSource = null;
+ private final DataSource dataSource;
public DataSourceRequestEntity(DataHandler dataHandler) {
this(dataHandler.getDataSource());