annotate c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/InvocationSocket.java @ 2295:160aacf936ad

removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
author Lukas Stadler <lukas.stadler@jku.at>
date Tue, 12 Apr 2011 16:58:56 +0200
parents 6190d20bd6d6
children 34354e2e40a3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
1 /*
1437
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
2 * Copyright (c) 2010 Sun Microsystems, Inc. All rights reserved.
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
3 *
1437
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
4 * Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
5 * that is described in this document. In particular, and without limitation, these intellectual property
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
6 * rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
7 * more additional patents or pending patent applications in the U.S. and in other countries.
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
8 *
1437
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
9 * U.S. Government Rights - Commercial software. Government users are subject to the Sun
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
10 * Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
11 * supplements.
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
12 *
1437
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
13 * Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
14 * registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
15 * are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
16 * U.S. and other countries.
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
17 *
1437
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
18 * UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
19 * Company, Ltd.
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
20 */
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
21 package com.sun.hotspot.c1x;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
22
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
23 import java.io.*;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
24 import java.lang.reflect.*;
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
25 import java.util.*;
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
26
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
27 import com.sun.hotspot.c1x.logging.*;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
28
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
29 /**
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
30 * A collection of java.lang.reflect proxies that communicate over a socket connection.
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
31 *
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
32 * Calling a method sends the method name and the parameters through the socket. Afterwards this class waits for a
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
33 * result. While waiting for a result three types of objects can arrive through the socket: a method invocation, a
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
34 * method result or an exception. Method invocation can thus be recursive.
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
35 *
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
36 * @author Lukas Stadler
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
37 */
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
38 public class InvocationSocket {
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
39
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
40 private static final boolean DEBUG = false;
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
41 private static final boolean COUNT_CALLS = false;
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
42
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
43 private static final HashSet<String> cachedMethodNames = new HashSet<String>();
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
44 private static final HashSet<String> forbiddenMethodNames = new HashSet<String>();
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
45
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
46 static {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
47 cachedMethodNames.add("name");
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
48 cachedMethodNames.add("kind");
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
49 cachedMethodNames.add("isResolved");
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
50 cachedMethodNames.add("getVMEntries");
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
51 cachedMethodNames.add("exactType");
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
52 cachedMethodNames.add("isInitialized");
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
53 forbiddenMethodNames.add("javaClass");
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
54 }
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
55
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
56 private final ObjectOutputStream output;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
57 private final ObjectInputStream input;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
58
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
59 private final Map<String, Integer> counts = new HashMap<String, Integer>();
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
60
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
61 public InvocationSocket(ObjectOutputStream output, ObjectInputStream input) {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
62 this.output = output;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
63 this.input = input;
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
64
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
65 if (COUNT_CALLS) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
66 Runtime.getRuntime().addShutdownHook(new Thread() {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
67 @Override
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
68 public void run() {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
69 SortedMap<Integer, String> sorted = new TreeMap<Integer, String>();
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
70 for (Map.Entry<String, Integer> entry : counts.entrySet()) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
71 sorted.put(entry.getValue(), entry.getKey());
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
72 }
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
73 for (Map.Entry<Integer, String> entry : sorted.entrySet()) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
74 System.out.println(entry.getKey() + ": " + entry.getValue());
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
75 }
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
76 }
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
77 });
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
78 }
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
79 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
80
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
81 /**
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
82 * Represents one invocation of a method that is transferred via the socket connection.
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
83 *
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
84 * @author Lukas Stadler
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
85 */
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
86 private static class Invocation implements Serializable {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
87
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
88 public Object receiver;
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
89 public String methodName;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
90 public Object[] args;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
91
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
92 public Invocation(Object receiver, String methodName, Object[] args) {
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
93 this.receiver = receiver;
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
94 this.methodName = methodName;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
95 this.args = args;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
96 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
97 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
98
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
99 /**
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
100 * Represents the result of an invocation that is transferred via the socket connection.
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
101 *
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
102 * @author Lukas Stadler
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
103 */
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
104 private static class Result implements Serializable {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
105
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
106 public Object result;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
107
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
108 public Result(Object result) {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
109 this.result = result;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
110 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
111 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
112
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
113 private void incCount(String name, Object[] args) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
114 if (COUNT_CALLS) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
115 name = name + (args == null ? 0 : args.length);
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
116 if (counts.get(name) != null) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
117 counts.put(name, counts.get(name) + 1);
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
118 } else {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
119 counts.put(name, 1);
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
120 }
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
121 }
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
122 }
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
123
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
124 /**
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
125 * Each instance of this class handles remote invocations for one instance of a Remote class. It will forward all
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
126 * interface methods to the other end of the socket and cache the results of calls to certain methods.
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
127 *
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
128 * @author Lukas Stadler
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
129 */
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
130 public class Handler implements InvocationHandler {
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
131
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
132 private final Object receiver;
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
133 private final HashMap<String, Object> cache = new HashMap<String, Object>();
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
134
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
135 public Handler(Object receiver) {
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
136 this.receiver = receiver;
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
137 }
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
138
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
139 @Override
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
140 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
141 // only interface methods can be transferred, java.lang.Object methods
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
142 if (method.getDeclaringClass() == Object.class) {
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
143 return method.invoke(receiver, args);
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
144 }
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
145 String methodName = method.getName();
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
146 // check if the result of this zero-arg method was cached
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
147 if (args == null || args.length == 0) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
148 if (cache.containsKey(methodName)) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
149 return cache.get(methodName);
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
150 }
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
151 }
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
152 if (forbiddenMethodNames.contains(methodName)) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
153 throw new IllegalAccessException(methodName + " not allowed");
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
154 }
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
155 try {
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
156 if (DEBUG) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
157 Logger.startScope("invoking remote " + methodName);
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
158 }
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
159 incCount(methodName, args);
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
160
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
161 output.writeObject(new Invocation(receiver, methodName, args));
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
162 output.flush();
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
163 Object result = waitForResult();
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
164
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
165 // result caching for selected methods
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
166 if ((args == null || args.length == 0) && cachedMethodNames.contains(methodName)) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
167 cache.put(methodName, result);
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
168 }
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
169 return result;
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
170 } catch (Throwable t) {
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
171 t.printStackTrace();
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
172 throw t;
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
173 } finally {
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
174 if (DEBUG) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
175 Logger.endScope("");
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
176 }
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
177 }
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
178 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
179 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
180
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
181 /**
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
182 * Waits for the result of a remote method invocation. Invocations that should be executed in this VM might arrive
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
183 * while waiting for the result, and these invocations will be executed before again waiting fort he result.
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
184 */
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
185 public Object waitForResult() throws IOException, ClassNotFoundException {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
186 while (true) {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
187 Object in = input.readObject();
1437
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
188 if (in instanceof Result) {
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
189 return ((Result) in).result;
1437
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
190 } else if (in instanceof RuntimeException) {
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
191 throw (RuntimeException) in;
1437
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
192 } else if (in instanceof Throwable) {
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
193 throw new RuntimeException((Throwable) in);
1437
9e5e83ca2259 Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents: 1423
diff changeset
194 }
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
195
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
196 Invocation invoke = (Invocation) in;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
197 Method method = null;
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
198 for (Class<?> clazz = invoke.receiver.getClass(); clazz != null; clazz = clazz.getSuperclass()) {
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
199 for (Method m : clazz.getDeclaredMethods()) {
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
200 if (invoke.methodName.equals(m.getName())) {
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
201 method = m;
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
202 break;
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
203 }
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
204 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
205 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
206 if (method == null) {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
207 Exception e = new UnsupportedOperationException("unknown method " + invoke.methodName);
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
208 e.printStackTrace();
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
209 output.writeObject(e);
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
210 output.flush();
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
211 } else {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
212 Object result;
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
213 try {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
214 if (invoke.args == null) {
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
215 if (DEBUG) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
216 Logger.startScope("invoking local " + invoke.methodName);
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
217 }
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
218 result = method.invoke(invoke.receiver);
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
219 } else {
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
220 if (Logger.ENABLED && DEBUG) {
2289
Lukas Stadler <lukas.stadler@jku.at>
parents: 2288
diff changeset
221 StringBuilder str = new StringBuilder();
Lukas Stadler <lukas.stadler@jku.at>
parents: 2288
diff changeset
222 str.append("invoking local " + invoke.methodName + "(");
Lukas Stadler <lukas.stadler@jku.at>
parents: 2288
diff changeset
223 for (int i = 0; i < invoke.args.length; i++) {
Lukas Stadler <lukas.stadler@jku.at>
parents: 2288
diff changeset
224 str.append(i == 0 ? "" : ", ");
Lukas Stadler <lukas.stadler@jku.at>
parents: 2288
diff changeset
225 str.append(Logger.pretty(invoke.args[i]));
Lukas Stadler <lukas.stadler@jku.at>
parents: 2288
diff changeset
226 }
Lukas Stadler <lukas.stadler@jku.at>
parents: 2288
diff changeset
227 str.append(")");
Lukas Stadler <lukas.stadler@jku.at>
parents: 2288
diff changeset
228 Logger.startScope(str.toString());
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
229 }
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
230 result = method.invoke(invoke.receiver, invoke.args);
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
231 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
232 result = new Result(result);
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
233 } catch (IllegalArgumentException e) {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
234 System.out.println("error while invoking " + invoke.methodName);
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
235 e.getCause().printStackTrace();
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
236 result = e.getCause();
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
237 } catch (InvocationTargetException e) {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
238 System.out.println("error while invoking " + invoke.methodName);
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
239 e.getCause().printStackTrace();
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
240 result = e.getCause();
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
241 } catch (IllegalAccessException e) {
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
242 System.out.println("error while invoking " + invoke.methodName);
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
243 e.getCause().printStackTrace();
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
244 result = e.getCause();
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
245 } finally {
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
246 if (DEBUG) {
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
247 Logger.endScope("");
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
248 }
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
249 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
250 output.writeObject(result);
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
251 output.flush();
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
252 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
253 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
254 }
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
255
2295
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
256 /**
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
257 * Sends a result without invoking a method, used by CompilationServer startup code.
160aacf936ad removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents: 2289
diff changeset
258 */
2288
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
259 public void sendResult(Object obj) throws IOException {
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
260 output.writeObject(new Result(obj));
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
261 output.flush();
8c426c2891c8 client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents: 2284
diff changeset
262 }
1423
760213a60e8b * rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff changeset
263 }