1 /********************************************************************** 2 * InJvmProcessor.java 3 * created on 22.05.2007 by netseeker 4 * $Id: InJvmProcessor.java,v 1.2 2007/05/27 22:13:09 netseeker Exp $ 5 * $Log: InJvmProcessor.java,v $ 6 * Revision 1.2 2007/05/27 22:13:09 netseeker 7 * *** empty log message *** 8 * 9 * Revision 1.1 2007/05/22 22:50:46 netseeker 10 * added In-JVM processing mode, fixed a minor bug within the serverside detection of ADAPTER_STRATEGY_DIRECT. 11 * 12 * 13 * ==================================================================== 14 * 15 * Copyright 2005-2006 netseeker aka Michael Manske 16 * 17 * Licensed under the Apache License, Version 2.0 (the "License"); 18 * you may not use this file except in compliance with the License. 19 * You may obtain a copy of the License at 20 * 21 * http://www.apache.org/licenses/LICENSE-2.0 22 * 23 * Unless required by applicable law or agreed to in writing, software 24 * distributed under the License is distributed on an "AS IS" BASIS, 25 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 26 * See the License for the specific language governing permissions and 27 * limitations under the License. 28 * ==================================================================== 29 * 30 * This file is part of the EJOE framework. 31 * For more information on the author, please see 32 * <http://www.manskes.de/>. 33 * 34 *********************************************************************/ 35 package de.netseeker.ejoe.core; 36 37 import java.io.ByteArrayInputStream; 38 import java.io.ByteArrayOutputStream; 39 40 import de.netseeker.ejoe.ConnectionHeader; 41 import de.netseeker.ejoe.IServerInfo; 42 import de.netseeker.ejoe.ServerInfo; 43 import de.netseeker.ejoe.adapter.AdapterFactory; 44 import de.netseeker.ejoe.adapter.SerializeAdapter; 45 import de.netseeker.ejoe.io.IOUtil; 46 47 /*** 48 * An In-JVM solution using Piped-Streams to communicate directly with the ServerHandler of a local EJServer. 49 * 50 * @author netseeker 51 * @since 0.3.9.3 52 */ 53 public class InJvmProcessor extends ConnectionReader 54 { 55 /*** 56 * Creates a new instance of InJvmProcessor 57 * 58 * @param receiverInfo server connection header 59 * @param senderInfo client connection header 60 */ 61 public InJvmProcessor(IServerInfo receiverInfo, ConnectionHeader senderInfo) 62 { 63 super( null, (ServerInfo) receiverInfo, senderInfo ); 64 } 65 66 /*** 67 * Processes a client request directly with the ServerHandler of a local (within the same JVM) EJServer 68 * 69 * @param param client request 70 * @return the answer returned by the local EJServer instance 71 * @throws Exception 72 */ 73 public Object process( Object param ) throws Exception 74 { 75 ByteArrayInputStream in =null; 76 ByteArrayOutputStream out = null; 77 SerializeAdapter adapter = AdapterFactory.createAdapter( getSenderInfo().getAdapterName() ); 78 Object request = null; 79 Object result = null; 80 81 boolean compressed = getSenderInfo().hasCompression() && getReceiverInfo().hasCompression(); 82 83 if ( !getSenderInfo().isDirect() ) 84 { 85 try 86 { 87 out = new ByteArrayOutputStream(); 88 IOUtil.adapterSerialize( adapter, out, param, compressed, getSenderInfo().getCompressionLevel() ); 89 in = new ByteArrayInputStream(out.toByteArray()); 90 request = IOUtil.adapterDeserialize( adapter, in, compressed ); 91 } 92 finally 93 { 94 IOUtil.closeQuiet( in ); 95 IOUtil.closeQuiet( out ); 96 } 97 } 98 else 99 { 100 request = param; 101 } 102 103 result = handleObject( request ); 104 105 if ( !getSenderInfo().isDirect() ) 106 { 107 try 108 { 109 out = new ByteArrayOutputStream(); 110 IOUtil.adapterSerialize( adapter, out, result, compressed, getSenderInfo().getCompressionLevel() ); 111 in = new ByteArrayInputStream(out.toByteArray()); 112 result = IOUtil.adapterDeserialize( adapter, in, compressed ); 113 } 114 finally 115 { 116 IOUtil.closeQuiet( in ); 117 IOUtil.closeQuiet( out ); 118 } 119 } 120 121 return result; 122 } 123 }