ozeigermann 2004/12/18 15:19:09
Modified: transaction build.xml RELEASE-NOTES.txt
transaction/src/java/org/apache/commons/transaction/file
FileResourceManager.java
Added: transaction/src/java/org/apache/commons/transaction/file
JDK14URLEncodeIdMapper.java
ResourceIdToPathMapper.java URLEncodeIdMapper.java
Log:
Added support for configurable resource id to path mapping as
proposed by Antranig Basman
Revision Changes Path
1.9 +2 -1 jakarta-commons/transaction/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-commons/transaction/build.xml,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- build.xml 17 Dec 2004 12:09:32 -0000 1.8
+++ build.xml 18 Dec 2004 23:19:08 -0000 1.9
@@ -155,13 +155,14 @@
===================================================================
-->
- <target name="build" depends="prepare" description="Compiles the main
classes">
+ <target name="build" depends="prepare,detect" description="Compiles the
main classes">
<javac destdir="${build.classes}"
target="${compile.target}"
debug="${compile.debug}"
deprecation="${compile.deprecation}"
optimize="${compile.optimize}" >
<exclude name="**/jca/**"/>
+ <exclude name="**/JDK14URLEncodeIdMapper.java" unless="jvm14.present"/>
<src path="${java.dir}"/>
<classpath refid="classpath" />
</javac>
1.8 +6 -2 jakarta-commons/transaction/RELEASE-NOTES.txt
Index: RELEASE-NOTES.txt
===================================================================
RCS file: /home/cvs/jakarta-commons/transaction/RELEASE-NOTES.txt,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- RELEASE-NOTES.txt 17 Dec 2004 00:33:38 -0000 1.7
+++ RELEASE-NOTES.txt 18 Dec 2004 23:19:08 -0000 1.8
@@ -27,16 +27,20 @@
ENHANCEMENTS FROM 1.0
---------------------
+Locking:
- Extended and less excentric lock manager
-- Deadlock detection for all lock managers, file store, and pessimistic map
-- Flexible preference mechanism
+File:
+- Confiburable resource id to path mapping
NEW FEATURES FROM 1.0
---------------------
+Locking:
- new ReadWriteLockManager for most intuitive read/write lock usage
- new read/write/upgrade locking mechanism
+- Deadlock detection for all lock managers, file store, and pessimistic map
+- Flexible preference locking mechanism
MINOR INCOMPATIBILITIES TO 1.0
-----------------------------------------
1.5 +29 -25
jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/FileResourceManager.java
Index: FileResourceManager.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/FileResourceManager.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- FileResourceManager.java 16 Dec 2004 17:33:53 -0000 1.4
+++ FileResourceManager.java 18 Dec 2004 23:19:09 -0000 1.5
@@ -34,8 +34,6 @@
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -44,7 +42,6 @@
import java.util.Iterator;
import java.util.Collections;
-import org.apache.commons.codec.binary.Base64;
import org.apache.commons.transaction.locking.GenericLock;
import org.apache.commons.transaction.locking.GenericLockManager;
import org.apache.commons.transaction.locking.LockException;
@@ -185,7 +182,6 @@
protected String workDir;
protected String storeDir;
- protected boolean urlEncodePath = false;
protected boolean cleanUp = true;
protected boolean dirty = false;
protected int operationMode = OPERATION_MODE_STOPPED;
@@ -197,6 +193,8 @@
protected Map globalTransactions;
protected List globalOpenResources;
protected LockManager lockManager;
+
+ protected ResourceIdToPathMapper idMapper = null;
/*
* --- ctor and general getter / setter methods ---
@@ -231,11 +229,29 @@
boolean urlEncodePath,
LoggerFacade logger,
boolean debug) {
+ this(storeDir, workDir, urlEncodePath ? new URLEncodeIdMapper() :
null, logger, false);
+ }
+
+ /**
+ * Creates a new resouce manager operation on the specified directories.
+ *
+ * @param storeDir directory where main data should go after commit
+ * @param workDir directory where transactions store temporary data
+ * @param idMapper mapper for resourceId to path
+ * @param logger the logger to be used by this store
+ * @param debug if set to <code>true</code> logs all locking information
to "transaction.log" for debugging inspection
+ */
+ public FileResourceManager(
+ String storeDir,
+ String workDir,
+ ResourceIdToPathMapper idMapper,
+ LoggerFacade logger,
+ boolean debug) {
this.workDir = workDir;
this.storeDir = storeDir;
- this.urlEncodePath = urlEncodePath;
this.logger = logger;
this.debug = debug;
+ this.idMapper = idMapper;
}
/**
@@ -942,22 +958,10 @@
protected String assureLeadingSlash(Object pathObject) {
String path = "";
if (pathObject != null) {
- path = pathObject.toString();
- if (urlEncodePath) {
- try {
- // XXX not allowed as for JDK1.4
- // path = URLEncoder.encode(path,
"UTF-8");
- // XXX weired replacement for the fine method above
- // using this combination as a simple URLEncoder.encode
without
- // charset may fail depending on local settings
- // for this reason the string will be encoded into
base64 consisting
- // of ascii characters only
- // a further URL encoding is need as base64 might
contain '/' which
- // might be a problem for some file systems
- path = new
String(Base64.encodeBase64(path.getBytes("UTF-8")), "ASCII");
- path = URLEncoder.encode(path);
- } catch (UnsupportedEncodingException e) {
- }
+ if (idMapper != null) {
+ path = idMapper.getPathForId(pathObject);
+ } else {
+ path = pathObject.toString();
}
if (path.length() > 0 && path.charAt(0) != '/' && path.charAt(0)
!= '\\') {
path = "/" + path;
1.1
jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/JDK14URLEncodeIdMapper.java
Index: JDK14URLEncodeIdMapper.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/JDK14URLEncodeIdMapper.java,v
1.1 2004/12/18 23:19:09 ozeigermann Exp $
* $Revision: 1.1 $
* $Date: 2004/12/18 23:19:09 $
*
* ====================================================================
*
* Copyright 1999-2002 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.commons.transaction.file;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
/**
*
*/
public class JDK14URLEncodeIdMapper implements ResourceIdToPathMapper {
public String getPathForId(Object resourceId) {
String path = resourceId.toString();
try {
path = URLEncoder.encode(path, "UTF-8");
} catch (UnsupportedEncodingException e) {
// we know this will not happen
}
return path;
}
}
1.1
jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/ResourceIdToPathMapper.java
Index: ResourceIdToPathMapper.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/ResourceIdToPathMapper.java,v
1.1 2004/12/18 23:19:09 ozeigermann Exp $
* $Revision: 1.1 $
* $Date: 2004/12/18 23:19:09 $
*
* ====================================================================
*
* Copyright 1999-2002 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.commons.transaction.file;
/**
* Mapper from a resourceId to a path string.
*
*/
public interface ResourceIdToPathMapper {
/**
* Maps the resource id object to a path string.
*
* @param resourceId the resource id
* @return the path string
*/
String getPathForId(Object resourceId);
}
1.1
jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/URLEncodeIdMapper.java
Index: URLEncodeIdMapper.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/file/URLEncodeIdMapper.java,v
1.1 2004/12/18 23:19:09 ozeigermann Exp $
* $Revision: 1.1 $
* $Date: 2004/12/18 23:19:09 $
*
* ====================================================================
*
* Copyright 1999-2002 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.commons.transaction.file;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.apache.commons.codec.binary.Base64;
/**
*
*/
public class URLEncodeIdMapper implements ResourceIdToPathMapper {
public String getPathForId(Object resourceId) {
String path = resourceId.toString();
try {
// XXX weired replacement for the fine JDK1.4
URLEncoder.encode(path, "UTF-8")
// method
// using this combination as a simple URLEncoder.encode without
// charset may fail depending on local settings
// for this reason the string will be encoded into base64
consisting
// of ascii characters only
// a further URL encoding is need as base64 might contain '/'
which
// might be a problem for some file systems
path = new String(Base64.encodeBase64(path.getBytes("UTF-8")),
"ASCII");
path = URLEncoder.encode(path);
} catch (UnsupportedEncodingException e) {
// we know this will not happen
}
return path;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]