language tools for distributed computing (ii) j-orchestra: automatic java application partitioning...
TRANSCRIPT
![Page 1: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/1.jpg)
Language Tools for Distributed Computing (II)
J-Orchestra: Automatic Java Application Partitioning
Yannis SmaragdakisUniversity of Oregon
![Page 2: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/2.jpg)
Yannis SmaragdakisUOregon
2
These Lectures
NRMI: middleware offering a natural programming model for distributed computing
solves a long standing, well-known open problem! J-Orchestra: execute unsuspecting programs
over a network, using program rewriting led to key enhancements of a major open-source
software project (JBoss) Morphing: a high-level language facility for
safe program transformation “bringing discipline to meta-programming”
![Page 3: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/3.jpg)
Yannis SmaragdakisUOregon
3
Partitioning: Start with a Centralized Application
GUI
Computation
DB
![Page 4: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/4.jpg)
Yannis SmaragdakisUOregon
4
Convert it to a Distributed Application
GUIComputation
DB
Network
![Page 5: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/5.jpg)
Yannis SmaragdakisUOregon
5
Automatic Program Partitioning
How can we do this with tools instead of manually? write a centralized program select elements (at some granularity) and assign
them to network locations let an automatic tool (compiler) transform the
program so that it runs over a network, using a general purpose run-time system correctness and efficiency concerns addressed by
compiler—though not always possible
![Page 6: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/6.jpg)
Yannis SmaragdakisUOregon
6
J-Orchestra For the past 5 years, J-Orchestra has been
one of my major research projects an automatic partitioning system for Java works as a bytecode compiler think of result as “applets on steroids”
“code near resource”
Application bytecode
Network
![Page 7: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/7.jpg)
Yannis SmaragdakisUOregon
7
J-Orchestra
Application bytecode
Network
user-designated partition
For the past 5 years, J-Orchestra has been one of my major research projects an automatic partitioning system for Java works as a bytecode compiler think of result as “applets on steroids”
“code near resource”
![Page 8: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/8.jpg)
Yannis SmaragdakisUOregon
8
J-Orchestra Executive Summary
Partitioned program is equivalent to the original centralized program for a very large subset of Java. we handle synchronization, all OO language
features, object construction, ... nice analysis and compilation technique for
dealing with native code result: most scalable automatic partitioning system
in existence have partitioned many unsuspecting applications
including 8MB third-party bytecode only (JBits)
![Page 9: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/9.jpg)
Yannis SmaragdakisUOregon
9
Example Partitioning
![Page 10: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/10.jpg)
Yannis SmaragdakisUOregon
10
Example Partitioning
Network
![Page 11: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/11.jpg)
Yannis SmaragdakisUOregon
11
Example Partitioning
Network
Benefit: 3.4MB + 1.8MB + 3.5MB
transfers eliminated for view updates!
Benefit: 1.28MB vs, 1.68MB per
simulation step!
![Page 12: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/12.jpg)
Yannis SmaragdakisUOregon
12
J-Orchestra Techniques Summary
Program generation and program transformation at the bytecode level “virtualizing” execution through bytecode transformation
creating a “virtual” virtual machine existing classes get transformed into RMI remote objects client code is redirected through proxies for each class, about 8 different proxy types (for mobility,
access to native code, etc.) may need to be generated user input is at class level, but how objects are passed
around determines where code executes
![Page 13: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/13.jpg)
J-Orchestra Program Transformation Techniques
Neo: Programs hacking programs. Why?
[Matrix Reloaded]
![Page 14: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/14.jpg)
Yannis SmaragdakisUOregon
14
The Problem Technically
Emulate a shared memory abstraction for unsuspecting applications without changing the runtime system. Complicating assumption: a pointer-based
language. Resembles DSM but different in objectives.
DSM – distribution for parallelism.Auto Partitioning – functional distribution.
![Page 15: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/15.jpg)
Yannis SmaragdakisUOregon
15
The Approach: User Level Indirection
We cannot change the VM to change the notion of “pointer”/“reference”
Can we do it by careful rewriting of the entire program? any reference, method call, etc. is through a proxy
where an original program reference would be to an object of type A, the same reference will now be to a proxy for As
For example: “new A()” creates proxy for A instead of instance of
original class A a.field becomes a.getField() or a.putField()
![Page 16: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/16.jpg)
Yannis SmaragdakisUOregon
16
User Indirection (Proxy) Approach
r
alias1
alias2
All clients (aliases) should view the same object regardless of location
Change all references from direct to indirect
![Page 17: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/17.jpg)
Yannis SmaragdakisUOregon
17
The Proxy Approach
r
alias1
alias2
Changing all references from direct to indirect ensures correct behavior in the presence of aliases
A remote object can have several proxies on different network sites
proxy
object
![Page 18: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/18.jpg)
Yannis SmaragdakisUOregon
18
The Proxy Approach
r
alias1
alias2
Proxies hide the location of the actual object: objects can move at will to exploit locality
Site 1 Site 2
proxy
object
![Page 19: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/19.jpg)
Yannis SmaragdakisUOregon
19
J-Orchestra Sample Transformations
For each original class A
Remote class A__remote
Local class A__local
Interface A__iface
class A__static_delegator
Interface A__static_iface
class A becomes a proxy
![Page 20: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/20.jpg)
Yannis SmaragdakisUOregon
20
Generated Code
A__interface is generated:
interface A__iface extends java.rmi.Remote { public void foo(A p) throws Remote Exception;
public proxy.io.File get_file() throws RemoteException;}
For each original class A:
class A { java.io.File _file;
public void foo(A p) {_file.read();p._file.read();
}}
![Page 21: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/21.jpg)
Yannis SmaragdakisUOregon
21
Generated Code
For each original class A:
class A { java.io.File _file;
public void foo(A p) {_file.read();p._file.read();
}}
proxy is generated:
class A { A__iface _ref;
public void foo(A p) {_ref.foo(p);
}}
![Page 22: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/22.jpg)
Yannis SmaragdakisUOregon
22
Generated Code
For each original class A:
class A { java.io.File _file;
public void foo(A p) {_file.read();p._file.read();
}}
class A is binary-modified:
class A__remote extends UnicastRemoteObjectimplements A__iface{ proxy.java.io.File _file;
public void foo(A p) { _file.read(); p.get_file().read(); } public proxy.java.io.File get_file() { return _file; }}
![Page 23: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/23.jpg)
Complexities
Overheads, Grouping Objects, System Code
![Page 24: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/24.jpg)
Yannis SmaragdakisUOregon
24
Proxy Indirection Overhead
Work (test, multiply, increment)
Original Time
Rewritten Time
Overhead
2 35.17s 47.52s 35%
4 42.06s 51.30s 22%
10 62.50s 73.32s 17%
Micro benchmark A function of average work per method call 1 billion calls total
![Page 25: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/25.jpg)
Yannis SmaragdakisUOregon
25
Optimizing Proxy Indirection
sensor
DB
GUI
![Page 26: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/26.jpg)
Yannis SmaragdakisUOregon
26
Optimizing Proxy Indirection
object
direct call
sensor
DB
GUI
![Page 27: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/27.jpg)
Yannis SmaragdakisUOregon
27
Optimizing Proxy Indirection
proxy
object
direct call
proxy callsensor
DB
GUI
![Page 28: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/28.jpg)
Yannis SmaragdakisUOregon
28
Optimizing Proxy Indirection
proxy
object
opt. proxy call
proxy callmobileobject
sensor
DB
GUI
direct call
![Page 29: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/29.jpg)
Yannis SmaragdakisUOregon
29
Optimizing Proxy Indirection
sensor
DB
GUI
proxy
object
opt. proxy call
proxy callmobileobject
direct call
![Page 30: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/30.jpg)
Yannis SmaragdakisUOregon
30
How is This Implemented?
Two kinds of references: direct and indirect Direct: for code statically guaranteed to refer
to the object itself i.e., object on the same site
Indirect: maybe we are calling a method on the object, maybe on a proxy
![Page 31: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/31.jpg)
Yannis SmaragdakisUOregon
31
System Code
The same idea applies to dealing with system classes system classes are split in groups
we assume that groups are consistent with what native code does (more later)
code accesses objects in the same group directly other objects accessed indirectly
![Page 32: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/32.jpg)
Yannis SmaragdakisUOregon
32
Wrapping / Unwrapping
For this approach to work, we need to inject code in many places to convert direct references to indirect and vice-versa dynamic “wrapping/unwrapping” code injected at compile time,
wrapping/unwrapping takes place at run time
![Page 33: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/33.jpg)
Yannis SmaragdakisUOregon
33
Example: Pass a Reference to System Code
What if a system object is passed from user code to system code?
B
button window
{ window.add(button); }
button’W
Network
![Page 34: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/34.jpg)
Yannis SmaragdakisUOregon
34
Wrapping/Unwrapping at the Proxy
The easy case: callee can tell wrapping is needed applies to system code
Caller
(Mobile code)
Callee
(Anchored code)
Proxy_Of_p
Stub_Of_p pfoo (Proxy_Of_p); //unwrap
proxy_Of_p = bar (); //wrap
![Page 35: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/35.jpg)
Yannis SmaragdakisUOregon
35
Wrapping/Unwrapping at Call Site
The harder case: sometimes we need to wrap/unwrap at call site either to keep proxy simple, or because we’d end
up with overloaded methods only differing in return type a problem since our proxies are generated in source,
although the rest of the transforms are in bytecode need to reconstruct call stack, inject code
![Page 36: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/36.jpg)
Example: “this”//original codeclass A { void foo (B b) { b.baz (this); } }class B { void baz (A a) {...} }//generated remote object for Aclass A__remote { void foo (B b) { b.baz (this); } //”this” is of type A__remote!}
//rewritten bytecode for fooaload_0 //pass “this” to locateProxy methodinvokestatic Runtime.locateProxycheckcast “A” //locateProxy returns Object, need a cast to “A”astore_2 //store the located proxy object for future useaload_1 //load baload_2 //load proxy (of type A)invokevirtual B.baz
![Page 37: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/37.jpg)
“How Do You Handle...?”
Native code,Synchronization
![Page 38: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/38.jpg)
Yannis SmaragdakisUOregon
38
Handling Java Language Features
Many language features need explicit handling, but most complexities are just engineering static methods and fields inheritance hierarchies remote object creation inner classes System.in, System.out, System.exit, System.properties
Some require more thought native code synchronization
![Page 39: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/39.jpg)
Yannis SmaragdakisUOregon
39
Native Code
Recall how we split system classes into groups
These groups have to respect native code behavior
But we don’t know what native code does! The problem: we may let a proxy escape into
native code, and the native code will try to access it directly e.g., read fields from the original object
![Page 40: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/40.jpg)
Yannis SmaragdakisUOregon
40
Heuristic Type-Based Analysis: Group Based on Types
class C extends S { F f; public native R meth ( A a);}
Conservative, but still not safe nothing can be! type information can be disguised at the native
code interface level i.e., native code can do type casts
C SF
R A
![Page 41: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/41.jpg)
Yannis SmaragdakisUOregon
41
How Safe? Studied native code in JDK 1.4.2 for Solaris Two analyses:
13 applications, dynamic analysis of execution code inspection of native code for Object, IsInstanceOf
Overall, fairly safe—few violations PlainSocketImp.socketGetOption casts Object to InetAddress GlyphVector assumed to be StandardGlyphVector, Composite
assumed to be AlphaComposite native code respects types more than library code!
JNI IsInstanceOf : 69 occurrencesJava instanceof : 5900 occurrences
In practice, J-Orchestra works without (much) intervention
![Page 42: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/42.jpg)
Yannis SmaragdakisUOregon
42
Synchronization
We only handle monitor-style synchronization: synchronized blocks and methods, wait/notify/notifyAll
not volatile variables, concurrent data structures, atomic operations, etc.
Two problems: thread identity is not maintained over the
network synchronization operations (synchronized, wait,
notify, etc.) do not get propagated by RMI
![Page 43: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/43.jpg)
Yannis SmaragdakisUOregon
43
Thread Identity Is Not Maintained(The Zigzag Deadlock Problem)
synchronized void foo() { obj2.bar();}
synchronized void baz() {…}
void bar() {
obj1.baz();}
thread-1
obj1 obj2
thread-1
![Page 44: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/44.jpg)
Yannis SmaragdakisUOregon
44
Thread Identity Is Not Maintained(The Zigzag Deadlock Problem)
synchronized void foo() { obj2.bar();}
synchronized void baz() {…}
void bar() {
obj1.baz();}
thread-1
Networkobj1 obj2
thread-1
![Page 45: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/45.jpg)
Yannis SmaragdakisUOregon
45
Thread Identity Is Not Maintained(The Zigzag Deadlock Problem)
synchronized void foo() { obj2.bar();}
synchronized void baz() {…}
void bar() {
obj1.baz();}
thread-1
Networkobj1 obj2
thread-2
thread-3 thread-2
![Page 46: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/46.jpg)
Yannis SmaragdakisUOregon
46
Synchronization Operations Don’t Get Propagated Over the Network
obj – a remote object, implementing interface RI and remotely accessible through it
RI ri – points to a local RMI “stub” object ri.foo(); //will be invoked on obj on a remote machine The stub serves as an intermediary, propagating
method calls to the obj object Only synchronized methods are propagated correctly Synchronized blocks might not work correctly
![Page 47: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/47.jpg)
Yannis SmaragdakisUOregon
47
Synchronized Blocks
Remote object
Network
RMI stub
synchronized(ri) { ... }
synchronized(obj) { ... }
Even if obj and ri point to the same object, synchronization will be on stub vs. true object.
![Page 48: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/48.jpg)
Yannis SmaragdakisUOregon
48
Synchronization Operations Don’t Get Propagated Over the Network
Monitor operations: Object.wait, Object.notify, Object.notifyAll don’t work correctly
They are declared final in class Object and cannot be overridden in subclasses
Calling any of them on an RMI stub does not get propagated over the network
![Page 49: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/49.jpg)
Yannis SmaragdakisUOregon
49
J-Orchestra Synchronization
Maintain per-site “thread id equivalence classes”
Replace all the standard synchronization constructs (monitorenter, Object.wait, Object.notify) with the corresponding calls to a per-site synchronization library
![Page 50: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/50.jpg)
Yannis SmaragdakisUOregon
50
Thread Identity Is Not Maintained(The Zigzag Deadlock Problem)
synchronized void foo() { obj2.bar();}
synchronized void baz() {…}
void bar() {
obj1.baz();}
{thread-1}
Networkobj1 obj2
{thread-1,thread-2}
{thread-1,thread-2}{thread-1,thread-2,thread-3}
![Page 51: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/51.jpg)
Yannis SmaragdakisUOregon
51
Maintaining Thread Id Equivalence Classes Efficiently
Updating thread equivalence classes only when the execution of a program crosses the network boundary
This happens only after it enters a method in an RMI stub
Use bytecode instrumentation on standard RMI stubs
Equivalence classes’ representation is very compact (encoded into a long int). Imposes virtually no overhead on remote calls
![Page 52: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/52.jpg)
A Specialized Application
“Appletizing”
![Page 53: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/53.jpg)
Yannis SmaragdakisUOregon
53
Java Applets
Execute on the client. Transfer all code to client. Provide “sandbox” secure execution environment.
client servernetwork
![Page 54: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/54.jpg)
Yannis SmaragdakisUOregon
54
Java Servlets
client servernetwork
• Execute on the server.
• Thin GUI through Web Forms.
![Page 55: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/55.jpg)
Yannis SmaragdakisUOregon
55
Appletizing
client servernetwork
A hybrid between Applets and Servlets. Rich GUI client; full access to server resources. Safe and secure execution model. Ease of development and deployment.
![Page 56: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/56.jpg)
Yannis SmaragdakisUOregon
56
Sanitizing GUI Code
Some code inside GUI classes is rejected by the Applet Security Manager.
E.g., System.exit, read/write graphical files from the local hard drive, closing a frame.
Two approaches to replacing unsafe code: 1. With different code.
2. With semantically similar (identical) code.
![Page 57: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/57.jpg)
Yannis SmaragdakisUOregon
57
//Creates an ImageIcon from //the specified file//will cause a security exception when //a file on disk is accessed
javax.swing.ImageIcon icon = new javax.swing.ImageIcon (“AnIconFile.gif”);
Sanitizing: Reading Image From File
![Page 58: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/58.jpg)
Yannis SmaragdakisUOregon
58
//Sanitize by replacing with the//following safe code
javax.swing.ImageIcon icon = new jorch.rt.ImageIcon(“AnIconFile.gif”);
//will safely read the image from//the applets’s jar file
Sanitizing: Reading Image From File
![Page 59: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/59.jpg)
Yannis SmaragdakisUOregon
59
Sanitizing: JFrame.setDefaultCloseOperation
Method setDefaultCloseOperation insystem class javax.swing.JFrame.
Applet Security Manager prevents it from taking EXIT_ON_CLOSE parameter.
invokevirtual JFrame.setDefaultCloseOperation
![Page 60: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/60.jpg)
Yannis SmaragdakisUOregon
60
pop //pop value on top of the stack
push 0 //param 0 is DO_NOTHING_ON_CLOSE
invokevirtual JFrame.setDefaultCloseOperation
Sanitizing: JFrame.setDefaultCloseOperation
![Page 61: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/61.jpg)
Wrap up
![Page 62: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/62.jpg)
Yannis SmaragdakisUOregon
62
J-Orchestra Impact Although the J-Orchestra work is well-cited, its
greatest impact was unconventional in late 2002, we gave a demo to Marc Fleury, head of the
JBoss Group JBoss: probably the world’s most popular J2EE
Application Server—millions of downloads (open-source) Application Server: OS for server-side computing
handles persistence, communication, authentication, ... imagine a web store, bank, auction site, etc.
great excitement about using bytecode engineering to generate and transform code, to turn Java classes into EJBs J2EE middleware has strict conventions (e.g., “each
session bean needs to implement local and remote interfaces, such that...”)
![Page 63: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/63.jpg)
Yannis SmaragdakisUOregon
63
Program Transformation and Generation in JBoss JBoss engineers had little expertise
my M.Sc. student Austin Chau did the first implementation we fixed the bytecode generation platform (Javassist) JBoss contributors then took over
Radical innovation in version 4: can use plain Java objects as Enterprise Java Beans a general mechanism: “Aspect-Oriented Programming in
JBoss” JBoss can now produce automatically much of the tedious
J2EE code given plain Java code (together with user annotations)
annotation mechanism in Java 5 largely motivated by program generation tasks for J2EE code
![Page 64: Language Tools for Distributed Computing (II) J-Orchestra: Automatic Java Application Partitioning Yannis Smaragdakis University of Oregon](https://reader035.vdocuments.mx/reader035/viewer/2022062619/5516b56c550346f0208b5439/html5/thumbnails/64.jpg)
Yannis SmaragdakisUOregon
64
Publications
Main paper: ECOOP’02 Synchronization: Middleware ’04 Appletizing: ICSM’05 Dealing with native code: ECOOP’02 +
GPCE’06