public AsyncServiceResponse(ClassLoader loader, Method method, DataByteArrayOutputStream responseStream, Runnable onComplete, SerializationStrategy serializationStrategy) { this.loader = loader; this.method = method; this.responseStream = responseStream; this.onComplete = onComplete; this.serializationStrategy = serializationStrategy; pos = responseStream.position(); }
public ServiceResponse(ClassLoader loader, Method method, DataByteArrayOutputStream responseStream, Runnable onComplete, SerializationStrategy serializationStrategy) { this.loader = loader; this.method = method; this.responseStream = responseStream; this.onComplete = onComplete; this.serializationStrategy = serializationStrategy; pos = responseStream.position(); }
public void send(Throwable error, Object value) { if( responded.compareAndSet(false, true) ) { Class resultType = getResultType(method); try { serializationStrategy.encodeResponse(loader, resultType, value, error, responseStream); } catch (Exception e) { // we failed to encode the response.. reposition and write that error. try { responseStream.position(pos); serializationStrategy.encodeResponse(loader, resultType, value, new RemoteException(e.toString()), responseStream); } catch (Exception unexpected) { unexpected.printStackTrace(); } } finally { onComplete.run(); } } }
protected void handleInvalidRequest(SerializationStrategy serializationStrategy, ClassLoader loader, Method method, Object target, DataByteArrayOutputStream responseStream, Runnable onComplete) { //client made an invalid request int pos = responseStream.position(); try { Object value = null; Throwable error = (Throwable)target; serializationStrategy.encodeResponse(loader, null, value, error, responseStream); } catch(Exception e) { LOGGER.warn("Initial Encoding response for method "+method+" failed. Retrying",e); // we failed to encode the response.. reposition and write that error. try { responseStream.position(pos); serializationStrategy.encodeResponse(loader, null, null, new ServiceException(e.toString()), responseStream); } catch (Exception unexpected) { LOGGER.error("Error while servicing "+method,unexpected); } } finally { onComplete.run(); } }
protected void writeDirect(ByteBuffer value) throws IOException { // is the direct buffer small enough to just fit into the nextWriteBuffer? int nextnextPospos = nextWriteBuffer.position(); int valuevalueLengthlength = value.remaining(); int available = nextWriteBuffer.getData().length - nextnextPospos; if (available > valuevalueLengthlength) { value.get(nextWriteBuffer.getData(), nextnextPospos, valuevalueLengthlength); nextWriteBuffer.position(nextnextPospos + valuevalueLengthlength); } else { if (nextWriteBuffer!=null && nextWriteBuffer.size() != 0) { flushNextWriteBuffer(); } writeBuffer.add(value); writeBufferRemaining += value.remaining(); } }
public void service(SerializationStrategy serializationStrategy, ClassLoader loader, Method method, Object target, DataByteArrayInputStream requestStream, DataByteArrayOutputStream responseStream, Runnable onComplete) { int pos = responseStream.position(); try { Object value = null; Throwable error = null; try { Class<?>[] types = method.getParameterTypes(); final Object[] args = new Object[types.length]; serializationStrategy.decodeRequest(loader, types, requestStream, args); value = method.invoke(target, args); } catch (Throwable t) { if (t instanceof InvocationTargetException) { error = t.getCause(); } else { error = t; } } serializationStrategy.encodeResponse(loader, method.getReturnType(), value, error, responseStream); } catch(Exception e) { // we failed to encode the response.. reposition and write that error. try { responseStream.position(pos); serializationStrategy.encodeResponse(loader, method.getReturnType(), null, new RemoteException(e.toString()), responseStream); } catch (Exception unexpected) { unexpected.printStackTrace(); } } finally { onComplete.run(); } }
public void doService(SerializationStrategy serializationStrategy, ClassLoader loader, Method method, Object target, DataByteArrayInputStream requestStream, DataByteArrayOutputStream responseStream, Runnable onComplete) { int pos = responseStream.position(); try { responseStream.position(pos); serializationStrategy.encodeResponse(loader, method.getReturnType(), null, new RemoteException(e.toString()), responseStream); } catch (Exception unexpected) {
public void send(Throwable error, Object value) { if( responded.compareAndSet(false, true) ) { Class resultType = getResultType(method); try { serializationStrategy.encodeResponse(loader, resultType, value, error, responseStream); } catch (Exception e) { // we failed to encode the response.. reposition and write that error. try { responseStream.position(pos); serializationStrategy.encodeResponse(loader, resultType, value, new ServiceException(e.toString()), responseStream); } catch (Exception unexpected) { LOGGER.error("Error while servicing "+method,unexpected); } } finally { onComplete.run(); } } } }
Buffer encode() { try { os.reset(); os.write(magic); os.writeLong(base_revision); os.writeInt(page_size); os.writeInt(free_list_page); os.writeInt(pessimistic_recovery_page); os.writeInt(optimistic_recovery_page); int length = os.position(); byte[] data = os.getData(); CRC32 checksum = new CRC32(); checksum.update(data, 0, length); os.position((FILE_HEADER_SIZE / 2) - 8); os.writeLong(checksum.getValue()); System.arraycopy(data, 0, data, FILE_HEADER_SIZE / 2, length); os.position(FILE_HEADER_SIZE / 2 - 8); os.writeLong(checksum.getValue()); return os.toBuffer(); } catch (IOException e) { throw new RuntimeException(e); } }
Buffer encode() { try { os.reset(); os.write(magic); os.writeLong(base_revision); os.writeInt(page_size); os.writeInt(free_list_page); os.writeInt(pessimistic_recovery_page); os.writeInt(optimistic_recovery_page); int length = os.position(); byte[] data = os.getData(); CRC32 checksum = new CRC32(); checksum.update(data, 0, length); os.position((FILE_HEADER_SIZE / 2) - 8); os.writeLong(checksum.getValue()); System.arraycopy(data, 0, data, FILE_HEADER_SIZE / 2, length); os.position(FILE_HEADER_SIZE / 2 - 8); os.writeLong(checksum.getValue()); return os.toBuffer(); } catch (IOException e) { throw new RuntimeException(e); } }