Author: joerg
Date: Fri Feb  3 14:40:18 2006
New Revision: 374769

URL: http://svn.apache.org/viewcvs?rev=374769&view=rev
Log:
Fixed bugzilla issue 37379. The construction of the transaction specific path 
is now done in a protected method getTransactionBaseDir(Object txId) to allow 
easy sub classing where the trivial way is not sufficient.

Modified:
    jakarta/commons/proper/transaction/trunk/RELEASE-NOTES.txt
    
jakarta/commons/proper/transaction/trunk/src/java/org/apache/commons/transaction/file/FileResourceManager.java

Modified: jakarta/commons/proper/transaction/trunk/RELEASE-NOTES.txt
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/transaction/trunk/RELEASE-NOTES.txt?rev=374769&r1=374768&r2=374769&view=diff
==============================================================================
--- jakarta/commons/proper/transaction/trunk/RELEASE-NOTES.txt (original)
+++ jakarta/commons/proper/transaction/trunk/RELEASE-NOTES.txt Fri Feb  3 
14:40:18 2006
@@ -33,6 +33,8 @@
 - Reduced likelyhood of clash between internally generated and external tx id 
in generatedUniqueTxId
 - Fixed bugzilla issue 35377. Synchronizing on Set activeTransactions while 
iterating over its items in
   OptimisticMapWrapper.copyChangesToConcurrentTransactions() for preventing 
ConcurrentModificationException.
+- Fixed bugzilla issue 37379. The construction of the transaction specific 
path is now done in a protected method
+  getTransactionBaseDir(Object txId) to allow easy sub classing where the 
trivial way is not sufficient.
 
 KNOWN ISSUES
 ------------

Modified: 
jakarta/commons/proper/transaction/trunk/src/java/org/apache/commons/transaction/file/FileResourceManager.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/transaction/trunk/src/java/org/apache/commons/transaction/file/FileResourceManager.java?rev=374769&r1=374768&r2=374769&view=diff
==============================================================================
--- 
jakarta/commons/proper/transaction/trunk/src/java/org/apache/commons/transaction/file/FileResourceManager.java
 (original)
+++ 
jakarta/commons/proper/transaction/trunk/src/java/org/apache/commons/transaction/file/FileResourceManager.java
 Fri Feb  3 14:40:18 2006
@@ -52,9 +52,9 @@
 /**
  * A resource manager for streamable objects stored in a file system.
  * 
- * It is intended for developper and "out of the box" use. 
+ * It is intended for developer and "out of the box" use. 
  * It is <em>not</em> intended to be a real alternative for
- * a full blown DMBS (of course it can not be compared to an RDBMS at all).
+ * a full blown DMBS (of course it can not be compared to a RDBMS at all).
  * 
  * Major features:<br>
  * <ul>
@@ -64,7 +64,7 @@
  * 
  * Compared to a "real" DBMS major limitations are (in order of assumed 
severity):<br>
  * <ul>
- * <li>Number of simultaneuously open resources is limited to the number of 
available file descriptors
+ * <li>Number of simultaneously open resources is limited to the number of 
available file descriptors
  * <li>It does not scale a bit
  * <li>Pessimistic transaction and locking scheme
  * <li>Isolation level currently is restricted to <em>read committed</em> and 
<em>repeated read</em> (which is not that bad)
@@ -89,31 +89,32 @@
  * <li>There is no dedicated class for a transaction. Having such a class 
would be better practice and 
  * make certain actions more intuitive.
  * <li>Resource identifiers need a reasonsable string representation 
obtainable by <code>toString</code>.
- * More specifically, they will have to resolve to a <em>valid</em> file path 
that does note denote a directoy. 
+ * More specifically, they will have to resolve to a <em>valid</em> file path 
that does note denote a directory. 
  * If it does, you might be able to create it, but not to read or write 
anything 
  * from resp. to it. Valid string representations of a resource idenfier are 
  * for example "file" "/root" or 
"hjfhdfhuhuhsdufhdsufhdsufhdfuhdfduhduhduhdu". 
  * Invalid are for example "/" or "/root/". Invalid on some file systems are 
for example "c:" or "file://huhu".
  * <li>As there are no active processes inside this RM and it shares its 
threads with the application,
  * control over transactions is limited to points where the application calls 
the RM. 
- * In particular, this disables <em>active</em> terminmation of transactions 
upon timeout.
+ * In particular, this disables <em>active</em> termination of transactions 
upon timeout.
  * <li>There is no notion of a connection to this file manager. This means you 
can not connect from hosts other than
  * local and you will get problems when plugging this store into a J2EE store 
using connectors. 
  * <li>Methods should throw more specific exceptions
  * </ul>
  * 
- * <em>Caution</em>:<br>
+ * <p><em>Caution</em>:<br>
  * The <code>txId</code> passed to many methods as an identifier for the
  * transaction concerned will function as a key in a <code>HashMap</code>.
  * Thus assure that <code>equals</code> and <code>hashCode</code> are both
- * properly implemented and match each other.
- * 
+ * properly implemented and match each other.</p>
  *  
- * <em>Caution</em>: You will have to guarantee that no other process will 
access neither
- * the store or the working dir concurrently to this 
<code>FileResourceManager</code>.
+ * <p><em>Caution</em>:<br>
+ * You will have to guarantee that no other process will access neither
+ * the store or the working dir concurrently to this 
<code>FileResourceManager</code>.</p>
  * 
- * <em>Special Caution</em>: Be very careful not to have two instances of
- * <code>FileResourceManager</code> working in the same store and/or working 
dir.
+ * <p><em>Special Caution</em>:<br>
+ * Be very careful not to have two instances of 
<code>FileResourceManager</code>
+ * working in the same store and/or working dir.
  *   
  * @version $Revision$
  */
@@ -208,7 +209,7 @@
      */
 
     /**
-     * Creates a new resouce manager operation on the specified directories.
+     * Creates a new resource manager operation on the specified directories.
      * 
      * @param storeDir directory where main data should go after commit
      * @param workDir directory where transactions store temporary data
@@ -220,7 +221,7 @@
     }
 
     /**
-     * Creates a new resouce manager operation on the specified directories.
+     * Creates a new resource manager operation on the specified directories.
      * 
      * @param storeDir directory where main data should go after commit
      * @param workDir directory where transactions store temporary data 
@@ -234,11 +235,11 @@
         boolean urlEncodePath,
         LoggerFacade logger,
         boolean debug) {
-        this(storeDir, workDir, urlEncodePath ? new URLEncodeIdMapper() : 
null, logger, false);
+        this(storeDir, workDir, urlEncodePath ? new URLEncodeIdMapper() : 
null, logger, debug);
     }
 
     /**
-     * Creates a new resouce manager operation on the specified directories.
+     * Creates a new resource manager operation on the specified directories.
      * 
      * @param storeDir directory where main data should go after commit
      * @param workDir directory where transactions store temporary data 
@@ -982,19 +983,23 @@
         return buf.toString();
     }
 
+    protected String getTransactionBaseDir(Object txId) {
+        return workDir + '/' + txId.toString();
+    }
+
     protected String getChangePath(Object txId, Object path) {
-        StringBuffer buf = new StringBuffer(txId.toString().length() + 
path.toString().length()
-                + WORK_CHANGE_DIR.length() + workDir.length() + 5);
-        
buf.append(workDir).append('/').append(txId.toString()).append('/').append(WORK_CHANGE_DIR).append(
-                assureLeadingSlash(path));
+        String txBaseDir = getTransactionBaseDir(txId);
+        StringBuffer buf = new StringBuffer(txBaseDir.length() + 
path.toString().length()
+                + WORK_CHANGE_DIR.length() + 5);
+        
buf.append(txBaseDir).append('/').append(WORK_CHANGE_DIR).append(assureLeadingSlash(path));
         return buf.toString();
     }
 
     protected String getDeletePath(Object txId, Object path) {
-        StringBuffer buf = new StringBuffer(txId.toString().length() + 
path.toString().length()
-                + WORK_DELETE_DIR.length() + workDir.length() + 5);
-        
buf.append(workDir).append('/').append(txId.toString()).append('/').append(WORK_DELETE_DIR).append(
-                assureLeadingSlash(path));
+        String txBaseDir = getTransactionBaseDir(txId);
+        StringBuffer buf = new StringBuffer(txBaseDir.length() + 
path.toString().length()
+                + WORK_DELETE_DIR.length() + 5);
+        
buf.append(txBaseDir).append('/').append(WORK_DELETE_DIR).append(assureLeadingSlash(path));
         return buf.toString();
     }
 
@@ -1338,7 +1343,7 @@
         }
 
         public synchronized void init() throws ResourceManagerException {
-            String baseDir = workDir + "/" + txId;
+            String baseDir = getTransactionBaseDir(txId);
             String changeDir = baseDir + "/" + WORK_CHANGE_DIR;
             String deleteDir = baseDir + "/" + WORK_DELETE_DIR;
 
@@ -1354,7 +1359,7 @@
         }
 
         public synchronized void commit() throws ResourceManagerException {
-            String baseDir = workDir + "/" + txId;
+            String baseDir = getTransactionBaseDir(txId);
             String changeDir = baseDir + "/" + WORK_CHANGE_DIR;
             String deleteDir = baseDir + "/" + WORK_DELETE_DIR;
 
@@ -1380,7 +1385,7 @@
                 return; // XXX for debugging only
             boolean clean = true;
             Exception cleanException = null;
-            String baseDir = workDir + "/" + txId;
+            String baseDir = getTransactionBaseDir(txId);
             FileHelper.removeRec(new File(baseDir));
             if (!clean) {
                 throw new ResourceManagerSystemException(
@@ -1446,7 +1451,7 @@
         }
 
         public synchronized void saveState() throws ResourceManagerException {
-            String statePath = workDir + "/" + txId + "/" + CONTEXT_FILE;
+            String statePath = getTransactionBaseDir(txId) + "/" + 
CONTEXT_FILE;
             File file = new File(statePath);
             BufferedWriter writer = null;
             try {
@@ -1473,7 +1478,7 @@
         }
 
         public synchronized void recoverState() throws 
ResourceManagerException {
-            String statePath = workDir + "/" + txId + "/" + CONTEXT_FILE;
+            String statePath = getTransactionBaseDir(txId) + "/" + 
CONTEXT_FILE;
             File file = new File(statePath);
             BufferedReader reader = null;
             try {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to