1 16 17 package org.apache.cocoon.components.modules.output; 18 19 import java.util.Iterator ; 20 import java.util.Map ; 21 22 import org.apache.avalon.framework.configuration.Configuration; 23 import org.apache.avalon.framework.logger.Logger; 24 import org.apache.cocoon.environment.ObjectModelHelper; 25 import org.apache.cocoon.environment.Session; 26 27 41 public class SessionAttributeOutputModule extends AbstractOutputModule implements OutputModule { 42 43 public final String PREFIX = "org.apache.cocoon.components.modules.output.OutputModule"; 44 public final String TRANS_PREFIX = "org.apache.cocoon.components.modules.output.OutputModule.SessionAttributeOutputModule.transient"; 45 public final String ROLLBACK_LIST = "org.apache.cocoon.components.modules.output.OutputModule.SessionAttributeOutputModule.rollback"; 46 47 57 public void setAttribute( Configuration modeConf, Map objectModel, String name, Object value ) { 58 if (this.settings.get("isolation-level","0").equals("1")) { 59 if (getLogger().isDebugEnabled()) 60 getLogger().debug("setting transient ['"+name+"'] to ['"+value+"']"); 61 this.transientSetAttribute(objectModel, TRANS_PREFIX, name, value); 62 } else { 63 65 Session session = ObjectModelHelper.getRequest(objectModel).getSession(); 66 67 name = getName(name); 68 69 if (!this.attributeExists(objectModel, ROLLBACK_LIST, name)) { 70 Object tmp = session.getAttribute(name); 71 this.transientSetAttribute(objectModel, ROLLBACK_LIST, name, tmp); 72 } 73 74 if (getLogger().isDebugEnabled()) 75 getLogger().debug("setting ['"+name+"'] to ['"+value+"']"); 76 session.setAttribute(name, value); 77 } 78 79 } 80 81 82 83 92 public void rollback( Configuration modeConf, Map objectModel, Exception e ) { 93 if (this.settings.get("isolation-level","0").equals("1")) { 94 if (getLogger().isDebugEnabled()) { 95 getLogger().debug("rolling back"); 96 } 97 this.rollback(objectModel, TRANS_PREFIX); 98 } else { 99 if (getLogger().isDebugEnabled()) { 100 getLogger().debug("start rolling back"); 101 } 102 Session session = ObjectModelHelper.getRequest(objectModel).getSession(); 103 Map rollbackList = this.prepareCommit(objectModel,ROLLBACK_LIST); 104 if (rollbackList != null) { 105 for (Iterator i = rollbackList.entrySet().iterator(); i.hasNext(); ) { 106 Map.Entry me = (Map.Entry )i.next(); 107 String key = (String )me.getKey(); 108 Object val = me.getValue(); 109 if (val != null) { 110 if (getLogger().isDebugEnabled()) { 111 getLogger().debug("rolling back ['" + key + "'] to ['" + val + "']"); 112 } 113 session.setAttribute(key, val); 114 } else { 115 if (getLogger().isDebugEnabled()) { 116 getLogger().debug("rolling back ['" + key + "']"); 117 } 118 session.removeAttribute(key); 119 } 120 } 121 } 122 } 123 if (getLogger().isDebugEnabled()) { 124 getLogger().debug("done rolling back"); 125 } 126 String prefix = (String ) this.settings.get("key-prefix", PREFIX ); 127 if (prefix!="") { 128 ObjectModelHelper.getRequest(objectModel).getSession().setAttribute(prefix+":",e.getMessage()); 129 } else { 130 ObjectModelHelper.getRequest(objectModel).getSession().setAttribute("errorMessage",e.getMessage()); 131 } 132 } 133 134 135 139 public void commit( Configuration modeConf, Map objectModel ) { 140 if (this.settings.get("isolation-level","0").equals("1")) { 141 142 Logger logger = getLogger(); 143 if (logger.isDebugEnabled()) { 144 logger.debug("prepare commit"); 145 } 146 Map aMap = this.prepareCommit(objectModel, TRANS_PREFIX); 147 if (aMap == null || aMap.isEmpty()) { 148 return; 149 } 150 String prefix = (String )this.settings.get("key-prefix", PREFIX ); 151 if (prefix.length() > 0) { 152 prefix = prefix + ":"; 153 } else { 154 prefix = null; 155 } 156 Session session = ObjectModelHelper.getRequest(objectModel).getSession(); 157 for (Iterator i = aMap.entrySet().iterator(); i.hasNext(); ) { 158 Map.Entry me = (Map.Entry )i.next(); 159 String key = (String )me.getKey(); 160 Object value = me.getValue(); 161 if (prefix != null) { 162 key = prefix + key; 163 } 164 if (logger.isDebugEnabled()) { 165 logger.debug("committing ['" + key + "'] to ['" + value + "']"); 166 } 167 session.setAttribute(key, value); 168 } 169 if (logger.isDebugEnabled()) { 170 logger.debug("done commit"); 171 } 172 } else { 173 if (getLogger().isDebugEnabled()) 174 getLogger().debug("commit"); 175 this.prepareCommit(objectModel, ROLLBACK_LIST); 176 } 177 } 178 179 protected String getName( String name ) { 180 String prefix = (String ) this.settings.get("key-prefix", PREFIX ); 181 return (prefix.equals("") ? name : prefix+":"+name); 182 } 183 184 } 185 | Popular Tags |