openamf/src/java/org/openamf DefaultGateway.java,1.45,1.46

[email protected] Fri, 19 Sep 2003 17:48:22 -0700
Newsgroups gmane.comp.java.openamf.cvs
Message-ID <[email protected]>
Update of /cvsroot/openamf/openamf/src/java/org/openamf
In directory sc8-pr-cvs1:/tmp/cvs-serv22746/src/java/org/openamf

Modified Files:
	DefaultGateway.java 
Log Message:
created seperate logges for request and response

Index: DefaultGateway.java
===================================================================
RCS file: /cvsroot/openamf/openamf/src/java/org/openamf/DefaultGateway.java,v
retrieving revision 1.45
retrieving revision 1.46
diff -C2 -d -r1.45 -r1.46
*** DefaultGateway.java	16 Aug 2003 03:30:02 -0000	1.45
--- DefaultGateway.java	20 Sep 2003 00:48:19 -0000	1.46
***************
*** 33,37 ****
  import org.openamf.io.AMFSerializer;
  import org.openamf.recordset.ASRecordSet;
- import org.openamf.util.OpenAMFUtils;
  
  /**
--- 33,36 ----
***************
*** 41,304 ****
  public class DefaultGateway extends HttpServlet {
  
!     protected static Log log = LogFactory.getLog(DefaultGateway.class);
  
!     private static final String OPENAMF_CONFIG = "OPENAMF_CONFIG";
  
!     public void init() throws ServletException {
!         reloadConfig();
!     }
  
!     /**
!      * Process request
!      *
!      * @param req
!      * @param resp
!      * @throws ServletException
!      * @throws IOException
!      */
!     public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
!         AMFMessage requestMessage, responseMessage = null;
!         try {
!             requestMessage = deserializeAMFMessage(req);
!             OpenAMFUtils.logMessage("REQUEST", requestMessage);
!             responseMessage = processMessage(req, requestMessage);
!             OpenAMFUtils.logMessage("RESPONSE", responseMessage);
!             serializeAMFMessage(resp, responseMessage);
!         } catch (Exception e) {
!             log.error("Error in service: " + e,e);
!         }
!     }
  
!     protected AMFMessage deserializeAMFMessage(HttpServletRequest req) throws IOException {
!         DataInputStream inputStream = new DataInputStream(req.getInputStream());
!         AMFDeserializer deserializer = new AMFDeserializer(inputStream);
!         AMFMessage message = deserializer.getAMFMessage();
!         log.debug("input message deserialized");
!         return message;
!     }
  
!     /**
!      * Serialize response message
!      *
!      * @param resp
!      * @param message
!      * @throws IOException
!      */
!     protected void serializeAMFMessage(HttpServletResponse resp, AMFMessage message) throws IOException {
!         ByteArrayOutputStream baos = new ByteArrayOutputStream();
!         DataOutputStream dos = new DataOutputStream(baos);
!         AMFSerializer serializer = new AMFSerializer(dos);
!         serializer.serializeMessage(message);
!         resp.setContentType("application/x-amf");
!         resp.setContentLength(baos.size());
!         ServletOutputStream sos = resp.getOutputStream();
!         baos.writeTo(sos);
!         sos.flush();
!     }
  
!     /**
!      * Process message
!      *
!      * @param req
!      * @param message
!      * @return
!      */
!     protected AMFMessage processMessage(HttpServletRequest req, AMFMessage message) {
!         AMFMessage responseMessage = new AMFMessage();
!         for (Iterator bodies = message.getBodies(); bodies.hasNext();) {
!             AMFBody requestBody = (AMFBody) bodies.next();
!             // invoke
!             Object serviceResult = invokeBody(req, requestBody);
!             String target = getTarget(requestBody, serviceResult);
!             AMFBody responseBody = new AMFBody(target, "null", serviceResult);
!             responseMessage.addBody(responseBody);
!         }
!         return responseMessage;
!     }
  
!     /**
!      * Invoke service
!      *
!      * @param req
!      * @param requestBody
!      * @return
!      */
!     private Object invokeBody(HttpServletRequest req, AMFBody requestBody) {
!         Object serviceResult = null;
!         try {
!             ServiceInvoker serviceInvoker = getServiceInvoker(requestBody, req);
!             if (serviceInvoker== null) {
!                 throw new ServiceInvocationException(requestBody, new Exception("No service"));
!             }
!             preInvokeService(req, serviceInvoker);
!             serviceResult = serviceInvoker.invokeService();
!             serviceResult = postInvokeService(
!                     req,
!                     serviceInvoker,
!                     serviceResult);
!         } catch (ServiceInvocationException e) {
!            serviceResult = e.getAMFError();
!            log.warn(e);
!         }
!         return serviceResult;
!     }
  
!     /**
!      * Returns target
!      *
!      * @param requestBody request message body
!      * @param serviceResult response message
!      * @return
!      */
!     private String getTarget(AMFBody requestBody, Object serviceResult) {
!         String target = "/onResult";
!         if (serviceResult instanceof AMFError) {
!             target = "/onStatus";
!         }
!         return requestBody.getResponse() + target;
!     }
  
!     /**
!      * Pre invoke service
!      *
!      * @param httpServletRequest
!      * @param serviceInvoker
!      * @throws ServiceInvocationException
!      */
!     protected void preInvokeService(
!             HttpServletRequest httpServletRequest,
!             ServiceInvoker serviceInvoker)
!             throws ServiceInvocationException {
  
!         if (serviceInvoker.getPersistService()) {
!             Object persistantServiceObject =
!                     httpServletRequest.getSession().getAttribute(
!                             serviceInvoker.getPersistantServiceName());
  
!             serviceInvoker.setPersistantServiceObject(persistantServiceObject);
!         }
!     }
  
!     /**
!      * Post invoke service
!      *
!      * @param httpServletRequest
!      * @param serviceInvoker
!      * @param serviceResult
!      * @return
!      * @throws ServiceInvocationException
!      */
!     protected Object postInvokeService(
!             HttpServletRequest httpServletRequest,
!             ServiceInvoker serviceInvoker,
!             Object serviceResult)
!             throws ServiceInvocationException {
  
!         if (serviceInvoker.getPersistService()) {
!             httpServletRequest.getSession().setAttribute(
!                     serviceInvoker.getPersistantServiceName(),
!                     serviceInvoker.getPersistantServiceObject());
!         }
  
!         serviceResult = processRecordSet(httpServletRequest, serviceInvoker, serviceResult);
  
!         return serviceResult;
!     }
  
!     private Object processRecordSet(
!             HttpServletRequest httpServletRequest,
!             ServiceInvoker serviceInvoker,
!             Object serviceResult)
!             throws ServiceInvocationException {
  
!         if (serviceResult instanceof ResultSet) {
!             ASRecordSet asRecordSet = new ASRecordSet();
!             try {
!                 asRecordSet.populate((ResultSet) serviceResult);
!                 serviceResult = asRecordSet;
!             } catch (IOException e) {
!                 throw new ServiceInvocationException(serviceInvoker.getRequest(), e);
!             }
!         }
  
!         if (serviceResult instanceof ASRecordSet) {
!             ASRecordSet asRecordSet = (ASRecordSet) serviceResult;
!             if (asRecordSet.getTotalCount() > asRecordSet.getInitialData().size()) {
!                 httpServletRequest.getSession().setAttribute(asRecordSet.getId(), asRecordSet);
!             }
!         }
  
!         return serviceResult;
!     }
  
!     protected ServiceInvoker getServiceInvoker(AMFBody requestBody, HttpServletRequest httpServletRequest)
!             throws ServiceInvocationException {
  
!         ServiceInvoker serviceInvoker = null;
!         ServiceRequest request = new ServiceRequest(requestBody);
  
!         try {
!             for (Iterator i = OpenAMFConfig.getInstance().getServiceInvokerConfigs();
!                  i.hasNext();
!                     ) {
  
!                 ServiceInvokerConfig invokerConfig = (ServiceInvokerConfig) i.next();
!                 log.debug("Checking if the " + invokerConfig.getName() + " Service Invoker can support the request");
!                 ServiceInvoker tempInvoker =
!                         ServiceInvoker.load(
!                                 invokerConfig.getClassName(),
!                                 request,
!                                 httpServletRequest,
!                                 getServletContext());
  
!                 if (tempInvoker.supports(request)) {
!                     serviceInvoker = tempInvoker;
!                     serviceInvoker.prepare(request);
!                     log.debug(invokerConfig.getName()+": YES");
!                     break;
!                 } else {
!                     log.debug(invokerConfig.getName()+": NO");
!                 }
!             }
!         } catch (Exception e) {
!             throw new ServiceInvocationException(request, e);
!         }
  
!         return serviceInvoker;
!     }
  
!     /**
!      * Reloads OpenAMF COnfiguration
!      *
!      * @return
!      */
!     protected OpenAMFConfig reloadConfig() {
!         OpenAMFConfig config = OpenAMFConfig.getInstance();
!         ConfigDigester configDigester = new ConfigDigester();
!         configDigester.setUseContextClassLoader(true);
  
!         String configParam = getServletConfig().getInitParameter(OPENAMF_CONFIG);
!         String[] configLocations = StringUtils.split(configParam, ",");
  
!         try {
!             for (int i = 0; i < configLocations.length; i++) {
!                 String configLocation = configLocations[i];
!                 InputStream inputStream = getServletContext().getResourceAsStream(configLocation);
!                 configDigester.clear();
!                 configDigester.push(config);
!                 configDigester.parse(inputStream);
!             }
!         } catch (Exception e) {
!             log.error("Reload config error: " + e);
!         }
  
!         if (log.isInfoEnabled()) {
!             log.info(config);
!         }
!         return config;
!     }
!     
!     public String getServletInfo() {
!     	return "OpenAMF DefaultGateway servlet, http://www.openamf.org/";
!     }
  }
--- 40,336 ----
  public class DefaultGateway extends HttpServlet {
  
! 	protected static Log log = LogFactory.getLog(DefaultGateway.class);
! 	protected static Log requestLog =
! 		LogFactory.getLog("org.openamf.OpenAMFRequest");
! 	protected static Log responseLog =
! 		LogFactory.getLog("org.openamf.OpenAMFResponse");
  
! 	private static final String OPENAMF_CONFIG = "OPENAMF_CONFIG";
  
! 	public void init() throws ServletException {
! 		reloadConfig();
! 	}
  
! 	/**
! 	 * Process request
! 	 *
! 	 * @param req
! 	 * @param resp
! 	 * @throws ServletException
! 	 * @throws IOException
! 	 */
! 	public void service(HttpServletRequest req, HttpServletResponse resp)
! 		throws ServletException, IOException {
! 		AMFMessage requestMessage, responseMessage = null;
! 		try {
! 			requestMessage = deserializeAMFMessage(req);
! 			
! 			if (requestLog.isDebugEnabled()) {
! 				requestLog.debug("DUMP REQUEST\n" + requestMessage + "\n");
! 			}
! 			
! 			responseMessage = processMessage(req, requestMessage);
! 			
! 			if (responseLog.isDebugEnabled()) {
! 				responseLog.debug("DUMP RESPONSE\n" + responseMessage + "\n");
! 			}
! 			
! 			serializeAMFMessage(resp, responseMessage);
! 		} catch (Exception e) {
! 			log.error("Error in service: " + e, e);
! 		}
! 	}
  
! 	protected AMFMessage deserializeAMFMessage(HttpServletRequest req)
! 		throws IOException {
! 		DataInputStream inputStream = new DataInputStream(req.getInputStream());
! 		AMFDeserializer deserializer = new AMFDeserializer(inputStream);
! 		AMFMessage message = deserializer.getAMFMessage();
! 		return message;
! 	}
  
! 	/**
! 	 * Serialize response message
! 	 *
! 	 * @param resp
! 	 * @param message
! 	 * @throws IOException
! 	 */
! 	protected void serializeAMFMessage(
! 		HttpServletResponse resp,
! 		AMFMessage message)
! 		throws IOException {
! 		ByteArrayOutputStream baos = new ByteArrayOutputStream();
! 		DataOutputStream dos = new DataOutputStream(baos);
! 		AMFSerializer serializer = new AMFSerializer(dos);
! 		serializer.serializeMessage(message);
! 		resp.setContentType("application/x-amf");
! 		resp.setContentLength(baos.size());
! 		ServletOutputStream sos = resp.getOutputStream();
! 		baos.writeTo(sos);
! 		sos.flush();
! 	}
  
! 	/**
! 	 * Process message
! 	 *
! 	 * @param req
! 	 * @param message
! 	 * @return
! 	 */
! 	protected AMFMessage processMessage(
! 		HttpServletRequest req,
! 		AMFMessage message) {
! 		AMFMessage responseMessage = new AMFMessage();
! 		for (Iterator bodies = message.getBodies(); bodies.hasNext();) {
! 			AMFBody requestBody = (AMFBody) bodies.next();
! 			// invoke
! 			Object serviceResult = invokeBody(req, requestBody);
! 			String target = getTarget(requestBody, serviceResult);
! 			AMFBody responseBody = new AMFBody(target, "null", serviceResult);
! 			responseMessage.addBody(responseBody);
! 		}
! 		return responseMessage;
! 	}
  
! 	/**
! 	 * Invoke service
! 	 *
! 	 * @param req
! 	 * @param requestBody
! 	 * @return
! 	 */
! 	private Object invokeBody(HttpServletRequest req, AMFBody requestBody) {
! 		Object serviceResult = null;
! 		try {
! 			ServiceInvoker serviceInvoker = getServiceInvoker(requestBody, req);
! 			if (serviceInvoker == null) {
! 				throw new ServiceInvocationException(
! 					requestBody,
! 					new Exception("No service"));
! 			}
! 			preInvokeService(req, serviceInvoker);
! 			serviceResult = serviceInvoker.invokeService();
! 			serviceResult =
! 				postInvokeService(req, serviceInvoker, serviceResult);
! 		} catch (ServiceInvocationException e) {
! 			serviceResult = e.getAMFError();
! 			log.warn(e);
! 		}
! 		return serviceResult;
! 	}
  
! 	/**
! 	 * Returns target
! 	 *
! 	 * @param requestBody request message body
! 	 * @param serviceResult response message
! 	 * @return
! 	 */
! 	private String getTarget(AMFBody requestBody, Object serviceResult) {
! 		String target = "/onResult";
! 		if (serviceResult instanceof AMFError) {
! 			target = "/onStatus";
! 		}
! 		return requestBody.getResponse() + target;
! 	}
  
! 	/**
! 	 * Pre invoke service
! 	 *
! 	 * @param httpServletRequest
! 	 * @param serviceInvoker
! 	 * @throws ServiceInvocationException
! 	 */
! 	protected void preInvokeService(
! 		HttpServletRequest httpServletRequest,
! 		ServiceInvoker serviceInvoker)
! 		throws ServiceInvocationException {
  
! 		if (serviceInvoker.getPersistService()) {
! 			Object persistantServiceObject =
! 				httpServletRequest.getSession().getAttribute(
! 					serviceInvoker.getPersistantServiceName());
  
! 			serviceInvoker.setPersistantServiceObject(persistantServiceObject);
! 		}
! 	}
  
! 	/**
! 	 * Post invoke service
! 	 *
! 	 * @param httpServletRequest
! 	 * @param serviceInvoker
! 	 * @param serviceResult
! 	 * @return
! 	 * @throws ServiceInvocationException
! 	 */
! 	protected Object postInvokeService(
! 		HttpServletRequest httpServletRequest,
! 		ServiceInvoker serviceInvoker,
! 		Object serviceResult)
! 		throws ServiceInvocationException {
  
! 		if (serviceInvoker.getPersistService()) {
! 			httpServletRequest.getSession().setAttribute(
! 				serviceInvoker.getPersistantServiceName(),
! 				serviceInvoker.getPersistantServiceObject());
! 		}
  
! 		serviceResult =
! 			processRecordSet(httpServletRequest, serviceInvoker, serviceResult);
  
! 		return serviceResult;
! 	}
  
! 	private Object processRecordSet(
! 		HttpServletRequest httpServletRequest,
! 		ServiceInvoker serviceInvoker,
! 		Object serviceResult)
! 		throws ServiceInvocationException {
  
! 		if (serviceResult instanceof ResultSet) {
! 			ASRecordSet asRecordSet = new ASRecordSet();
! 			try {
! 				asRecordSet.populate((ResultSet) serviceResult);
! 				serviceResult = asRecordSet;
! 			} catch (IOException e) {
! 				throw new ServiceInvocationException(
! 					serviceInvoker.getRequest(),
! 					e);
! 			}
! 		}
  
! 		if (serviceResult instanceof ASRecordSet) {
! 			ASRecordSet asRecordSet = (ASRecordSet) serviceResult;
! 			if (asRecordSet.getTotalCount()
! 				> asRecordSet.getInitialData().size()) {
! 				httpServletRequest.getSession().setAttribute(
! 					asRecordSet.getId(),
! 					asRecordSet);
! 			}
! 		}
  
! 		return serviceResult;
! 	}
  
! 	protected ServiceInvoker getServiceInvoker(
! 		AMFBody requestBody,
! 		HttpServletRequest httpServletRequest)
! 		throws ServiceInvocationException {
  
! 		ServiceInvoker serviceInvoker = null;
! 		ServiceRequest request = new ServiceRequest(requestBody);
  
! 		try {
! 			for (Iterator i =
! 				OpenAMFConfig.getInstance().getServiceInvokerConfigs();
! 				i.hasNext();
! 				) {
  
! 				ServiceInvokerConfig invokerConfig =
! 					(ServiceInvokerConfig) i.next();
! 				log.debug(
! 					"Checking if the "
! 						+ invokerConfig.getName()
! 						+ " Service Invoker can support the request");
! 				ServiceInvoker tempInvoker =
! 					ServiceInvoker.load(
! 						invokerConfig.getClassName(),
! 						request,
! 						httpServletRequest,
! 						getServletContext());
  
! 				if (tempInvoker.supports(request)) {
! 					serviceInvoker = tempInvoker;
! 					serviceInvoker.prepare(request);
! 					log.debug(invokerConfig.getName() + ": YES");
! 					break;
! 				} else {
! 					log.debug(invokerConfig.getName() + ": NO");
! 				}
! 			}
! 		} catch (Exception e) {
! 			throw new ServiceInvocationException(request, e);
! 		}
  
! 		return serviceInvoker;
! 	}
  
! 	/**
! 	 * Reloads OpenAMF COnfiguration
! 	 *
! 	 * @return
! 	 */
! 	protected OpenAMFConfig reloadConfig() {
! 		OpenAMFConfig config = OpenAMFConfig.getInstance();
! 		ConfigDigester configDigester = new ConfigDigester();
! 		configDigester.setUseContextClassLoader(true);
  
! 		String configParam =
! 			getServletConfig().getInitParameter(OPENAMF_CONFIG);
! 		String[] configLocations = StringUtils.split(configParam, ",");
  
! 		try {
! 			for (int i = 0; i < configLocations.length; i++) {
! 				String configLocation = configLocations[i];
! 				InputStream inputStream =
! 					getServletContext().getResourceAsStream(configLocation);
! 				configDigester.clear();
! 				configDigester.push(config);
! 				configDigester.parse(inputStream);
! 			}
! 		} catch (Exception e) {
! 			log.error("Reload config error: " + e);
! 		}
  
! 		if (log.isInfoEnabled()) {
! 			log.info(config);
! 		}
! 		return config;
! 	}
! 
! 	public String getServletInfo() {
! 		return "OpenAMF DefaultGateway servlet, http://www.openamf.org/";
! 	}
  }




-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf