stephan     2003/03/06 01:40:25

  Modified:    src/blocks/slide/java/org/apache/cocoon/components/source/impl
                        SlideSource.java
  Log:
  Use atomic transactions for all other methods.
  
  Revision  Changes    Path
  1.6       +51 -11    
xml-cocoon2/src/blocks/slide/java/org/apache/cocoon/components/source/impl/SlideSource.java
  
  Index: SlideSource.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/blocks/slide/java/org/apache/cocoon/components/source/impl/SlideSource.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SlideSource.java  5 Mar 2003 18:47:59 -0000       1.5
  +++ SlideSource.java  6 Mar 2003 09:40:24 -0000       1.6
  @@ -608,11 +608,18 @@
       public void move(Source source) throws SourceException {
           if (source instanceof SlideSource) {
               try {
  +                nat.begin();
                   this.macro.move(slideToken,
                                   this.config.getFilesPath()+this.path,
                                   this.config.getFilesPath()+
                                   ((SlideSource) source).path);
  -            } catch (SlideException se) {
  +                nat.commit();
  +            } catch (Exception se) {
  +                try {
  +                    nat.rollback();
  +                } catch (Exception rbe) {
  +                    getLogger().error("Rollback failed for moving source", rbe);
  +                }
                   throw new SourceException("Could not move source.", se);
               }
           } else {
  @@ -631,11 +638,18 @@
       public void copy(Source source) throws SourceException {
           if (source instanceof SlideSource) {
               try {
  +                nat.begin();
                   this.macro.copy(slideToken,
                                   this.config.getFilesPath()+this.path,
                                   this.config.getFilesPath()+
                                   ((SlideSource) source).path);
  -            } catch (SlideException se) {
  +                nat.commit();
  +            } catch (Exception se) {
  +                try {
  +                    nat.rollback();
  +                } catch (Exception rbe) {
  +                    getLogger().error("Rollback failed for moving source", rbe);
  +                }
                   throw new SourceException("Could not move source.", se);
               }
           } else {
  @@ -650,10 +664,18 @@
        */
       public boolean delete() {
           try {
  +            nat.begin();
               this.macro.delete(slideToken,
                                 this.config.getFilesPath()+this.path);
  +            nat.commit();
               return true;
  -        } catch (SlideException se) {
  +        } catch (Exception se) {
  +            getLogger().error("Could not delete source.",se);
  +            try {
  +                nat.rollback();
  +            } catch (Exception rbe) {
  +                getLogger().error("Rollback failed for moving source", rbe);
  +            }
               return false;
           }
       }
  @@ -820,16 +842,22 @@
           
revisionDescriptor.setOwner(slideToken.getCredentialsToken().getPublicCredentials());
   
           try {
  +            nat.begin();
               structure.create(slideToken, collection,
                                this.config.getFilesPath()+this.path+"/"+
                                collectionname);
               content.create(slideToken,
                              this.config.getFilesPath()+this.path+"/"+
                              collectionname, revisionDescriptor, null);
  -        } catch (SlideException se) {
  +            nat.commit();
  +        } catch (Exception se) {
  +            try {
  +                nat.rollback();
  +            } catch (Exception rbe) {
  +                getLogger().error("Rollback failed for creating collection", rbe);
  +            }
               throw new SourceException("Could not create collection.", se);
           }
  -
       }
   
       /**
  @@ -1050,6 +1078,7 @@
                                               this.path, subject, action,
                                                          inheritable, negative);
   
  +            nat.begin();
               this.security.grantPermission(this.slideToken, permission);
   
               // Last modification date
  @@ -1057,8 +1086,13 @@
   
               content.store(slideToken, this.config.getFilesPath()+this.path,
                             revisionDescriptor, null);
  -
  -        } catch (SlideException se) {
  +            nat.commit(); 
  +        } catch (Exception se) {
  +            try {
  +                nat.rollback();
  +            } catch (Exception rbe) {
  +                getLogger().error("Rollback failed for granting permission", rbe);
  +            }   
               throw new SourceException("Couldn't grant permission", se);
           }
       }
  @@ -1255,6 +1289,7 @@
                                               this.path, subject, action,
                                                          inheritable, negative);
   
  +            nat.begin();
               this.security.revokePermission(this.slideToken, permission);
   
               // Last modification date
  @@ -1262,9 +1297,14 @@
   
               content.store(slideToken, this.config.getFilesPath()+this.path,
                             revisionDescriptor, null);
  -
  -        } catch (SlideException se) {
  -            throw new SourceException("Couldn't grant permission", se);
  +            nat.commit();
  +        } catch (Exception se) {
  +            try {
  +                nat.rollback();
  +            } catch (Exception rbe) {
  +                getLogger().error("Rollback failed for removing permission", rbe);
  +            }
  +            throw new SourceException("Couldn't remove permission", se);
           }
       }
   
  
  
  

Reply via email to