#99601# performance optimizations

This commit is contained in:
Jörg Budischewski 2002-06-25 06:18:12 +00:00
parent 4c6e9514a5
commit 64dac91688
10 changed files with 199 additions and 116 deletions

View file

@ -2,9 +2,9 @@
*
* $RCSfile: XConnectionInputStream_Adapter.java,v $
*
* $Revision: 1.1.1.1 $
* $Revision: 1.2 $
*
* last change: $Author: hr $ $Date: 2000-09-18 15:27:52 $
* last change: $Author: jbu $ $Date: 2002-06-25 07:08:59 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -99,16 +99,16 @@ class XConnectionInputStream_Adapter extends InputStream {
}
public int read(byte[] b, int off, int len) throws IOException {
byte bytes[][] = new byte[1][];
// byte bytes[][] = new byte[1][];
try {
len = _xConnection.read(bytes, len - off);
len = _xConnection.read(_bytes, len - off);
}
catch(com.sun.star.io.IOException ioException) {
throw new IOException(ioException.toString());
}
System.arraycopy(bytes[0], 0, b, off, len);
System.arraycopy(_bytes[0], 0, b, off, len);
return len == 0 ? -1 : len;
}

View file

@ -2,9 +2,9 @@
*
* $RCSfile: XConnectionOutputStream_Adapter.java,v $
*
* $Revision: 1.1.1.1 $
* $Revision: 1.2 $
*
* last change: $Author: hr $ $Date: 2000-09-18 15:27:52 $
* last change: $Author: jbu $ $Date: 2002-06-25 07:08:59 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -94,9 +94,16 @@ class XConnectionOutputStream_Adapter extends OutputStream {
}
public void write(byte[] b, int off, int len) throws IOException {
byte bytes[] = new byte[len];
byte bytes[] = null;
System.arraycopy(b, off, bytes, 0, len);
if(off == 0 && len == b.length)
bytes = b;
else {
bytes = new byte[len];
System.arraycopy(b, off, bytes, 0, len);
}
try {
_xConnection.write(bytes);

View file

@ -2,9 +2,9 @@
*
* $RCSfile: java_remote_bridge.java,v $
*
* $Revision: 1.24 $
* $Revision: 1.25 $
*
* last change: $Author: jbu $ $Date: 2002-03-21 16:23:31 $
* last change: $Author: jbu $ $Date: 2002-06-25 07:08:59 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -132,7 +132,7 @@ import com.sun.star.uno.IQueryInterface;
* The protocol to used is passed by name, the bridge
* then looks for it under <code>com.sun.star.lib.uno.protocols</code>.
* <p>
* @version $Revision: 1.24 $ $ $Date: 2002-03-21 16:23:31 $
* @version $Revision: 1.25 $ $ $Date: 2002-06-25 07:08:59 $
* @author Kay Ramme
* @see com.sun.star.lib.uno.environments.remote.IProtocol
* @since UDK1.0
@ -189,40 +189,45 @@ public class java_remote_bridge implements IBridge, IReceiver, IRequester, XBrid
}
// Take care of special methods release and acquire
if(iMessage.getOperation() != null && iMessage.getOperation().equals("release")) {
_java_environment.revokeInterface(iMessage.getOid(), new Type(iMessage.getInterface()));
remRefHolder(new Type(iMessage.getInterface()), iMessage.getOid());
String operation = iMessage.getOperation();
String oid = iMessage.getOid();
if(operation != null && operation.equals("release")) {
Type interfaceType = new Type(iMessage.getInterface());
_java_environment.revokeInterface(oid, interfaceType );
remRefHolder(interfaceType, oid);
if(iMessage.mustReply())
sendReply(false, iMessage.getThreadId(), null);
}
else if(iMessage.getOperation() != null && iMessage.getOperation().equals("acquire")) {
String oid_o[] = new String[]{iMessage.getOid()};
_java_environment.registerInterface(null, oid_o, new Type(iMessage.getInterface()));
else if(operation != null && operation.equals("acquire")) {
Type interfaceType = new Type(iMessage.getInterface());
String oid_o[] = new String[]{oid};
_java_environment.registerInterface(null, oid_o, interfaceType );
addRefHolder(new Type(iMessage.getInterface()), iMessage.getOid());
addRefHolder(interfaceType, oid);
}
else {
Object object = null;
if(iMessage.getOperation() != null) { // is it a request
object = _java_environment.getRegisteredInterface(iMessage.getOid(), new Type(iMessage.getInterface()));
if(operation != null) { // is it a request
Type interfaceType = new Type(iMessage.getInterface());
object = _java_environment.getRegisteredInterface(oid, interfaceType);
Object xexception = null;
if(object == null) { // this is an unknown oid, so we may have to ask the XInstanceProvider
if(_xInstanceProvider == null) // we have neither an object nor an instance provider -> exception
xexception = new com.sun.star.uno.RuntimeException(getClass().getName() + ".dispatch - no instance provider set and unknown object:" + iMessage.getOid());
xexception = new com.sun.star.uno.RuntimeException(getClass().getName() + ".dispatch - no instance provider set and unknown object:" + oid);
else {
try {
object = _xInstanceProvider.getInstance(iMessage.getOid());
object = _xInstanceProvider.getInstance(oid);
if(object == null && !iMessage.getOperation().equals("queryInterface"))
if(object == null && !operation.equals("queryInterface"))
xexception = new com.sun.star.uno.RuntimeException(
getClass().getName()
+ ".dispatch: instance provider returned null and operation >"
+ iMessage.getOperation()
+ operation
+ "< not supported on null");
}
catch(com.sun.star.container.NoSuchElementException noSuchElementException) {
@ -288,7 +293,7 @@ public class java_remote_bridge implements IBridge, IReceiver, IRequester, XBrid
protected XConnection _xConnection;
protected InputStream _inputStream; // wraps the connection to be an InputStream
protected OutputStream _outputStream; // wraps the connection to be an OutputStream
protected DataOutputStream _outputStream; // wraps the connection to be an OutputStream
protected XInstanceProvider _xInstanceProvider;
@ -483,7 +488,7 @@ public class java_remote_bridge implements IBridge, IReceiver, IRequester, XBrid
_xConnection = (XConnection)args[1];
_xInstanceProvider = (XInstanceProvider)args[2];
_inputStream = new XConnectionInputStream_Adapter(_xConnection);
_outputStream = new XConnectionOutputStream_Adapter(_xConnection);
_outputStream = new DataOutputStream( new XConnectionOutputStream_Adapter(_xConnection) );
if(args.length > 3)
_name = (String)args[3];
@ -837,7 +842,7 @@ public class java_remote_bridge implements IBridge, IReceiver, IRequester, XBrid
synchronized(_outputStream) {
_iProtocol.writeReply(exception, threadId, result);
try {
_iProtocol.flush(new DataOutputStream(_outputStream));
_iProtocol.flush(_outputStream);
_outputStream.flush();
}
catch(IOException iOException) {
@ -868,17 +873,19 @@ public class java_remote_bridge implements IBridge, IReceiver, IRequester, XBrid
boolean goThroughThreadPool = false;
ThreadId threadId = ThreadPoolFactory.getThreadId();
Object handle = null;
try {
synchronized(_outputStream) {
_iProtocol.writeRequest((String)object, TypeDescription.getTypeDescription(type), operation, ThreadPoolFactory.getThreadId(), params, synchron, mustReply);
_iProtocol.writeRequest((String)object, TypeDescription.getTypeDescription(type), operation, threadId , params, synchron, mustReply);
goThroughThreadPool = synchron[0].booleanValue() && Thread.currentThread() != _messageDispatcher;
if(goThroughThreadPool) // prepare a queue for this thread in the threadpool
_iThreadPool.attach();
handle = _iThreadPool.attach( threadId );
try {
_iProtocol.flush(new DataOutputStream(_outputStream));
_iProtocol.flush(_outputStream);
_outputStream.flush();
}
catch(IOException iOException) {
@ -890,12 +897,12 @@ public class java_remote_bridge implements IBridge, IReceiver, IRequester, XBrid
}
if(goThroughThreadPool)
result = _iThreadPool.enter();
result = _iThreadPool.enter( handle, threadId);
}
finally {
if(goThroughThreadPool)
_iThreadPool.detach();
_iThreadPool.detach( handle , threadId);
if(operation.equals("release"))
release(); // kill this bridge, if this was the last proxy

View file

@ -2,9 +2,9 @@
*
* $RCSfile: java_environment.java,v $
*
* $Revision: 1.7 $
* $Revision: 1.8 $
*
* last change: $Author: jbu $ $Date: 2002-05-16 14:58:46 $
* last change: $Author: jbu $ $Date: 2002-06-25 07:13:38 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -91,7 +91,7 @@ import com.sun.star.uno.XInterface;
* interface defined in the uno runtime.
* <p>
* <p>
* @version $Revision: 1.7 $ $ $Date: 2002-05-16 14:58:46 $
* @version $Revision: 1.8 $ $ $Date: 2002-06-25 07:13:38 $
* @author Kay Ramme
* @see com.sun.star.uno.UnoRuntime
* @see com.sun.star.uno.IEnvironment
@ -102,6 +102,7 @@ public class java_environment implements IEnvironment, Disposable {
* When set to true, enables various debugging output.
*/
static public final boolean DEBUG = false;
final static String _holderProxyClassName = HolderProxy.class.getName().replace('.', '/');
/*
** This is the holder proxy, which one gets while trying to get a registered object
@ -210,14 +211,19 @@ public class java_environment implements IEnvironment, Disposable {
** This is the holder class, whichs instances are put into the hashtable
*/
class Holder {
int _refCount;
String _oId;
Object _object;
Class _class;
boolean _instanceOfProxy;
Holder(String oId, Object object) {
Holder(String oId, Object object , Type type) {
_oId = oId;
_object = object;
_refCount = 1;
_class = ((TypeDescription)type.getTypeDescription()).getZClass();
_instanceOfProxy = (object instanceof Proxy);
}
synchronized void incRefCount() {
@ -235,30 +241,28 @@ public class java_environment implements IEnvironment, Disposable {
_objects.remove(_oId);
}
Object xxgetObject(Type type) {
Object xxgetObject(Type type)
{
Object result = _object;
if(_object instanceof Proxy) {
if( _instanceOfProxy ) {
if(DEBUG) System.err.println("##### " + getClass().getName() + " - creating new Proxy Proxy");
Class holderProxyClass = DispatcherAdapterFactory.createDispatcherAdapter(((TypeDescription)type.getTypeDescription()).getZClass(),
HolderProxy.class.getName().replace('.', '/'));
Class holderProxyClass =
DispatcherAdapterFactory.createDispatcherAdapter(
_class,
_holderProxyClassName);
try {
HolderProxy holderProxy = (HolderProxy)holderProxyClass.newInstance();
holderProxy.setObject(holderProxy, _object);
holderProxy.setHolder(this);
holderProxy.setInterface(type);
result = holderProxy;
}
catch(Exception exception) {
System.err.println("##### " + getClass().getName() + ".xxgetObject - exception occurred:" + exception);
exception.printStackTrace();
result = null;
}
}
return result;
}
@ -321,7 +325,7 @@ public class java_environment implements IEnvironment, Disposable {
if(oId[0] == null)
oId[0] = UnoRuntime.generateOid(object);
String keyName = oId[0] + type;
String keyName = oId[0].concat( type.getTypeName());
synchronized(_objects) {
// get the holder
@ -331,7 +335,7 @@ public class java_environment implements IEnvironment, Disposable {
System.err.println("##### " + getClass().getName() + ".registerInterface:" + object + " " + oId[0] + " " + type);
if(holder == null) {
holder = new Holder(keyName, object);
holder = new Holder(keyName, object , type );
_objects.put(keyName, holder);
}
@ -354,7 +358,7 @@ public class java_environment implements IEnvironment, Disposable {
public void revokeInterface(String oId, Type type) {
if(DEBUG) System.err.println("##### " + getClass().getName() + ".revokeInterface:" + oId + " " + type);
synchronized(_objects) {
Holder holder = (Holder)_objects.get(oId + type);
Holder holder = (Holder)_objects.get(oId.concat( type.getTypeName()));
if(holder != null)
holder.decRefCount();
else
@ -372,7 +376,7 @@ public class java_environment implements IEnvironment, Disposable {
public Object getRegisteredInterface(String oId, Type type) {
Object result = null;
Holder holder = (Holder)_objects.get(oId + type);
Holder holder = (Holder)_objects.get(oId.concat( type.getTypeName()));
if(holder != null) {
result = holder.xxgetObject(type);

View file

@ -2,9 +2,9 @@
*
* $RCSfile: IThreadPool.java,v $
*
* $Revision: 1.3 $
* $Revision: 1.4 $
*
* last change: $Author: kr $ $Date: 2001-05-17 12:55:05 $
* last change: $Author: jbu $ $Date: 2002-06-25 07:16:52 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -65,7 +65,7 @@ package com.sun.star.lib.uno.environments.remote;
* This interface is an abstraction of the various
* threadpool implementations.
* <p>
* @version $Revision: 1.3 $ $ $Date: 2001-05-17 12:55:05 $
* @version $Revision: 1.4 $ $ $Date: 2002-06-25 07:16:52 $
* @author Joerg Budischewski
* @author Kay Ramme
* @see com.sun.star.lib.uno.environments.remote.ThreadPoolFactory
@ -80,12 +80,33 @@ public interface IThreadPool {
*/
public void attach();
/**
* As above, but hands in an already existing
* instance of the threadid of the current thread.
* Returns a handle which can be used in enter and
* detach calls.<p>
* The function exists for performance
* optimization reasons.
* @see #attach
*/
public Object attach( ThreadId id );
/**
* Detaches this thread from the thread pool.
* @see #enter
*/
public void detach();
/**
* As above, but hands in an already existing
* instance of the threadid of the current thread
* and a handle returned by attach.
* The function exists for performance
* optimization reasons.
* @see #attach,#detach
*/
public void detach( Object handle, ThreadId id );
/**
* Lets this thread enter the thread pool.
* This thread then executes all jobs put via
@ -95,6 +116,17 @@ public interface IThreadPool {
*/
public Object enter() throws Throwable;
/**
* as above but hands in an already existing
* instance of the threadid of the current thread
* and a handle returned by attach.
* This thread then executes all jobs put via
* <code>putJob</code> until a reply job arrives.
* <p>
* @see #putJob
*/
public Object enter( Object handle, ThreadId id ) throws Throwable;
/**
* Queues a job into the jobQueue of the thread belonging
* to the jobs threadId.

View file

@ -2,9 +2,9 @@
*
* $RCSfile: JavaThreadPool.java,v $
*
* $Revision: 1.8 $
* $Revision: 1.9 $
*
* last change: $Author: kr $ $Date: 2001-05-17 12:55:05 $
* last change: $Author: jbu $ $Date: 2002-06-25 07:16:52 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -71,7 +71,7 @@ import com.sun.star.uno.UnoRuntime;
/**
* This class implements a java thread pool.
* <p>
* @version $Revision: 1.8 $ $ $Date: 2001-05-17 12:55:05 $
* @version $Revision: 1.9 $ $ $Date: 2002-06-25 07:16:52 $
* @author Kay Ramme
* @see com.sun.star.uno.UnoRuntime
* @see com.sun.star.lib.uno.environments.remote.ThreadPool
@ -92,36 +92,40 @@ public class JavaThreadPool implements IThreadPool {
_javaThreadPoolFactory = javaThreadPoolFactory;
}
public void attach() {
ThreadId threadId = _javaThreadPoolFactory.getThreadId();
public Object attach( ThreadId threadId )
{
if(DEBUG) System.err.println("##### " + getClass().getName() + ".attach - id:" + threadId);
// we don't have to synchronize here
// cause the thread can attach itself
// not concurrently
JobQueue jobQueue = _javaThreadPoolFactory.getJobQueue(threadId);
if(jobQueue == null)
jobQueue = new JobQueue(_javaThreadPoolFactory, threadId, false);
// acquiring the jobQueue registers it at the ThreadPoolFactory
jobQueue.acquire();
return jobQueue;
}
public void attach() {
attach( _javaThreadPoolFactory.getThreadId() );
}
public void detach( Object handle, ThreadId id )
{
((JobQueue)handle).release();
}
public void detach() {
ThreadId threadId = _javaThreadPoolFactory.getThreadId();
JobQueue jobQueue = _javaThreadPoolFactory.getJobQueue(threadId);
// releasing the jobQueue deregisters it from the ThreadPoolFactory
jobQueue.release();
ThreadId threadId = _javaThreadPoolFactory.getThreadId();
detach(_javaThreadPoolFactory.getJobQueue(threadId), threadId );
}
public Object enter() throws Throwable {
public Object enter( ) throws Throwable {
ThreadId threadId = _javaThreadPoolFactory.getThreadId();
return enter( _javaThreadPoolFactory.getJobQueue( threadId ), threadId );
}
JobQueue jobQueue = _javaThreadPoolFactory.getJobQueue(threadId);
return jobQueue.enter(this);
public Object enter( Object handle, ThreadId threadId ) throws Throwable {
return ((JobQueue)handle).enter(this);
}
public void putJob(Job job) {

View file

@ -2,9 +2,9 @@
*
* $RCSfile: JavaThreadPoolFactory.java,v $
*
* $Revision: 1.1 $
* $Revision: 1.2 $
*
* last change: $Author: kr $ $Date: 2001-05-17 12:42:21 $
* last change: $Author: jbu $ $Date: 2002-06-25 07:16:52 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -123,12 +123,7 @@ public class JavaThreadPoolFactory implements IThreadPoolFactory {
if(thread instanceof JobQueue.JobDispatcher)
threadId = ((JobQueue.JobDispatcher)thread).getThreadId();
else {
try {
threadId = new ThreadId(UnoRuntime.generateOid(thread).getBytes("UTF8"));
}
catch(UnsupportedEncodingException unsupportedEncodingException) {
throw new com.sun.star.uno.RuntimeException("JavaThreadPool.getThreadId - unexpected: " + unsupportedEncodingException.toString());
}
threadId = new ThreadId(UnoRuntime.generateOid(thread));
}
if(DEBUG) System.err.println("##### ThreadPool.getThreadId:" + threadId);

View file

@ -2,9 +2,9 @@
*
* $RCSfile: Job.java,v $
*
* $Revision: 1.9 $
* $Revision: 1.10 $
*
* last change: $Author: kr $ $Date: 2001-05-17 12:46:27 $
* last change: $Author: jbu $ $Date: 2002-06-25 07:16:52 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -81,7 +81,7 @@ import com.sun.star.uno.UnoRuntime;
* The Job is an abstraction for tasks which have to be done
* remotely because of a method invocation.
* <p>
* @version $Revision: 1.9 $ $ $Date: 2001-05-17 12:46:27 $
* @version $Revision: 1.10 $ $ $Date: 2002-06-25 07:16:52 $
* @author Kay Ramme
* @see com.sun.star.lib.uno.environments.remote.ThreadID
* @see com.sun.star.lib.uno.environments.remote.IReceiver
@ -184,7 +184,8 @@ public class Job {
if(exception instanceof InvocationTargetException)
throwable = ((InvocationTargetException)exception).getTargetException();;
if(DEBUG) System.err.println("##### Job.execute - exception occured:" + throwable);
if(DEBUG); System.err.println("##### Job.execute - exception occured:" + throwable);
throwable.printStackTrace();
// Here we have to be aware of non UNO exceptions, cause they may kill
// a remote side (which does not know anything about theire types)
if(!(throwable instanceof com.sun.star.uno.Exception)

View file

@ -2,9 +2,9 @@
*
* $RCSfile: ThreadId.java,v $
*
* $Revision: 1.1 $
* $Revision: 1.2 $
*
* last change: $Author: kr $ $Date: 2001-05-17 12:44:32 $
* last change: $Author: jbu $ $Date: 2002-06-25 07:16:52 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -72,7 +72,7 @@ import com.sun.star.uno.UnoRuntime;
/**
* This is the global thread id.
* <p>
* @version $Revision: 1.1 $ $ $Date: 2001-05-17 12:44:32 $
* @version $Revision: 1.2 $ $ $Date: 2002-06-25 07:16:52 $
* @author Joerg Budischewski
* @see com.sun.star.lib.uno.environments.remote.ThreadPool
* @see com.sun.star.lib.uno.environments.remote.IThreadPool
@ -91,12 +91,15 @@ public class ThreadId {
* <p>
*/
public ThreadId() {
try {
init(UnoRuntime.generateOid(new Object()).getBytes("UTF8"));
}
catch(UnsupportedEncodingException unsupportedEncodingException) {
throw new com.sun.star.uno.RuntimeException(getClass().getName() + ".<init> - unexpected: " + unsupportedEncodingException.toString());
}
init(UnoRuntime.generateOid(new Object()));
}
/** Use this ctor only as long as the string
contains only ascii characters. Otherwise,
use the byte [] ctor.
*/
public ThreadId(String threadId ) {
init( threadId );
}
/**
@ -113,16 +116,39 @@ public class ThreadId {
* <p>
* @param threadID a byte array describing a thread id
*/
private void init(byte threadId[]) {
private void init(String threadId)
{
try {
_threadId = threadId;
_string = new String(threadId, "8859_1");
_string = threadId;
_threadId = _string.getBytes( "UTF8" );
}
catch(java.io.UnsupportedEncodingException bla) {
System.err.println(getClass().getName() + ".init - unexpected exception:" + bla);
catch(UnsupportedEncodingException unsupportedEncodingException) {
throw new com.sun.star.uno.RuntimeException(getClass().getName() + ".<init> - unexpected: " + unsupportedEncodingException.toString());
}
}
/**
* Initializes a thread id with a byte array
* <p>
* @param threadID a byte array describing a thread id
*/
private void init(byte threadId[])
{
_threadId = threadId;
// in case the deprecated String( byte [] , byte ) ctor
// once vanishes, replace it with this code
// char [] a = new char[threadId.length];
// int nMax = threadId.length;
// for( int i = 0 ; i < nMax ; i ++ )
// a[i] = (char) threadId[i];
// _string = new String( a );
// fast but deprecated
_string = new String(threadId, (byte) 0 );
}
/**
* Gives a hashcode.
* <p>

View file

@ -2,9 +2,9 @@
*
* $RCSfile: urp.java,v $
*
* $Revision: 1.10 $
* $Revision: 1.11 $
*
* last change: $Author: kr $ $Date: 2001-05-17 12:46:28 $
* last change: $Author: jbu $ $Date: 2002-06-25 07:18:12 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@ -97,7 +97,7 @@ import com.sun.star.uno.Type;
* from uno. The functionality is reachable through
* the <code>IProtocol</code> interface.
* <p>
* @version $Revision: 1.10 $ $ $Date: 2001-05-17 12:46:28 $
* @version $Revision: 1.11 $ $ $Date: 2002-06-25 07:18:12 $
* @author Kay Ramme
* @see com.sun.star.lib.uno.environments.remote.IProtocol
* @since UDK1.0
@ -127,6 +127,12 @@ public class urp extends Protocol {
private Marshal _marshal;
private Unmarshal _unmarshal;
private String _operationContainer[] = new String[1];
private Object _paramsContainer[][] = new Object[1][];
private boolean _synchronContainer[] = new boolean[1];
private boolean _mustReplyContainer[] = new boolean[1];
private boolean _exceptionContainer[] = new boolean[1];
static private final byte BIG_HEADER = (byte)0x80;
// big header flags
static private final byte REQUEST = 0x40;
@ -587,9 +593,10 @@ public class urp extends Protocol {
public IMessage readMessage(InputStream inputStream) throws IOException {
IMessage iMessage = null;
DataInput dataInput = new DataInputStream( inputStream );
while(iMessage == null) { // try hard to get a message
if(_unmarshal.bytesLeft() <= 0) { // the last block is empty, get a new one
byte bytes[] = readBlock(new DataInputStream(inputStream));
byte bytes[] = readBlock(dataInput);
_unmarshal.reset(bytes);
}
@ -597,15 +604,10 @@ public class urp extends Protocol {
throw new java.io.IOException("connection close message received");
else {
String operation[] = new String[1];
Object params[][] = new Object[1][];
boolean synchron[] = new boolean[1];
boolean mustReply[] = new boolean[1];
boolean exception[] = new boolean[1];
Object result = readMessage(_operationContainer, _paramsContainer, _synchronContainer,
_mustReplyContainer, _exceptionContainer);
Object result = readMessage(operation, params, synchron, mustReply, exception);
if(operation[0] == null) { // a reply ?
if(_operationContainer[0] == null) { // a reply ?
iMessage = new Message(null, // oid
result, // object
null, // interface
@ -613,20 +615,25 @@ public class urp extends Protocol {
_in_threadId,
false,
false,
exception[0],
params[0]);
_exceptionContainer[0],
_paramsContainer[0]);
}
else { // a request
iMessage = new Message(_in_oid,
null,
_in_interface,
operation[0],
_operationContainer[0],
_in_threadId,
synchron[0],
mustReply[0],
_synchronContainer[0],
_mustReplyContainer[0],
false,
params[0]);
_paramsContainer[0]);
}
_operationContainer[0] = null;
_paramsContainer[0] = null;
_synchronContainer[0] = false;
_exceptionContainer[0] = false;
_mustReplyContainer[0] = false;
}
}