1 /* 2 * $Id: OptimizedRequestContext.java 7963 2007-08-21 08:53:15Z dirk.olmes $ 3 * -------------------------------------------------------------------------------------- 4 * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com 5 * 6 * The software in this package is published under the terms of the CPAL v1.0 7 * license, a copy of which has been included with this distribution in the 8 * LICENSE.txt file. 9 */ 10 11 package org.mule.impl; 12 13 import org.mule.umo.UMOEvent; 14 import org.mule.umo.UMOMessage; 15 16 /** 17 * NOT FOR POUBLIC USE - please use the interface provided by RequestContext. 18 * This is a temporary interface that helps provide an (optimized) fix for message 19 * scribbling. 20 * 21 * <p>Mutating methods have three versions: default (RequestContext; makes and returns a new copy); 22 * unsafe (doesn't make a copy, use only where certain no threading); critical (as safe, but 23 * documents that threading a known issue).</p> 24 */ 25 public final class OptimizedRequestContext 26 { 27 28 /** 29 * Do not instanciate. 30 */ 31 private OptimizedRequestContext() 32 { 33 super(); 34 } 35 36 /** 37 * Set an event for out-of-scope thread access. Unsafe: use only when known to be single threaded. 38 * 39 * @param event - the event to set 40 * @return The event set 41 */ 42 public static UMOEvent unsafeSetEvent(UMOEvent event) 43 { 44 return RequestContext.internalSetEvent(event); 45 } 46 47 /** 48 * Set an event for out-of-scope thread access. Critical: thread safety known to be required 49 * 50 * @param event - the event to set 51 * @return A new mutable copy of the event set 52 */ 53 public static UMOEvent criticalSetEvent(UMOEvent event) 54 { 55 return RequestContext.internalSetEvent(RequestContext.newEvent(event, true, true)); 56 } 57 58 /** 59 * Sets a new message payload in the RequestContext but maintains all other 60 * properties (session, endpoint, synchronous, etc.) from the previous event. 61 * Unsafe: use only when known to be single threaded 62 * 63 * @param message - the new message payload 64 * @return The message set 65 */ 66 public static UMOMessage unsafeRewriteEvent(UMOMessage message) 67 { 68 return RequestContext.internalRewriteEvent(message, false, false); 69 } 70 71 /** 72 * Sets a new message payload in the RequestContext but maintains all other 73 * properties (session, endpoint, synchronous, etc.) from the previous event. 74 * Critical: thread safety known to be required 75 * 76 * @param message - the new message payload 77 * @return A new copy of the message set 78 */ 79 public static UMOMessage criticalRewriteEvent(UMOMessage message) 80 { 81 return RequestContext.internalRewriteEvent(message, true, true); 82 } 83 84 public static UMOMessage unsafeWriteResponse(UMOMessage message) 85 { 86 return RequestContext.internalWriteResponse(message, false, false); 87 } 88 89 public static UMOMessage criticalWriteResponse(UMOMessage message) 90 { 91 return RequestContext.internalWriteResponse(message, true, true); 92 } 93 94 }