Mercurial > hg > blitz_condensed
comparison src/org/dancres/blitz/remote/ConstrainableAdminProxy.java @ 0:3dc0c5604566
Initial checkin of blitz 2.0 fcs - no installer yet.
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 21 Mar 2009 11:00:06 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:3dc0c5604566 |
---|---|
1 package org.dancres.blitz.remote; | |
2 | |
3 import java.io.IOException; | |
4 import java.io.ObjectInputStream; | |
5 import java.io.InvalidObjectException; | |
6 | |
7 import java.lang.reflect.Method; | |
8 | |
9 import net.jini.id.Uuid; | |
10 | |
11 import net.jini.core.constraint.RemoteMethodControl; | |
12 import net.jini.core.constraint.MethodConstraints; | |
13 | |
14 import net.jini.security.proxytrust.ProxyTrustIterator; | |
15 import net.jini.security.proxytrust.SingletonProxyTrustIterator; | |
16 | |
17 import net.jini.core.transaction.Transaction; | |
18 | |
19 import net.jini.core.entry.Entry; | |
20 | |
21 import com.sun.jini.outrigger.JavaSpaceAdmin; | |
22 | |
23 import com.sun.jini.proxy.ConstrainableProxyUtil; | |
24 | |
25 import org.dancres.blitz.mangler.MangledEntry; | |
26 | |
27 import org.dancres.util.ReflectUtil; | |
28 | |
29 /** | |
30 When the remote stub generated by the exporter implements | |
31 RemoteMethodControl, Blitz exports this proxy for Admin duties to support | |
32 appropriate constraints etc. | |
33 */ | |
34 public final class ConstrainableAdminProxy extends | |
35 AdminProxy implements RemoteMethodControl { | |
36 | |
37 private static final Method[] theMethodMapping = { | |
38 ReflectUtil.findMethod(JavaSpaceAdmin.class, "space", | |
39 new Class[] {}), | |
40 ReflectUtil.findMethod(EntryViewAdmin.class, "getJavaSpaceProxy", | |
41 new Class[] {}), | |
42 ReflectUtil.findMethod(JavaSpaceAdmin.class, "contents", | |
43 new Class[] {Entry.class, Transaction.class}), | |
44 ReflectUtil.findMethod(EntryViewAdmin.class, "newView", | |
45 new Class[] {MangledEntry[].class, | |
46 Transaction.class, | |
47 long.class, boolean.class, | |
48 long.class, int.class}), | |
49 ReflectUtil.findMethod(JavaSpaceAdmin.class, "contents", | |
50 new Class[] {Entry.class, Transaction.class, | |
51 int.class}), | |
52 ReflectUtil.findMethod(EntryViewAdmin.class, "newView", | |
53 new Class[] {MangledEntry[].class, | |
54 Transaction.class, | |
55 long.class, boolean.class, | |
56 long.class, int.class}) | |
57 }; | |
58 | |
59 | |
60 private static AdminServer constrainStub(AdminServer aServer, | |
61 MethodConstraints aConstraints) { | |
62 RemoteMethodControl myServer = (RemoteMethodControl) aServer; | |
63 | |
64 MethodConstraints myStubConstraints = | |
65 ConstrainableProxyUtil.translateConstraints(aConstraints, | |
66 theMethodMapping); | |
67 | |
68 myServer.setConstraints(myStubConstraints); | |
69 return (AdminServer) myServer; | |
70 } | |
71 | |
72 private MethodConstraints theConstraints; | |
73 | |
74 ConstrainableAdminProxy(AdminServer aAdmin, Uuid aUuid) { | |
75 super(aAdmin, aUuid); | |
76 } | |
77 | |
78 private ConstrainableAdminProxy(AdminServer anAdmin, Uuid aUuid, | |
79 MethodConstraints aConstraints) { | |
80 super(constrainStub(anAdmin, aConstraints), aUuid); | |
81 theConstraints = aConstraints; | |
82 } | |
83 | |
84 private ProxyTrustIterator getProxyTrustIterator() { | |
85 return new SingletonProxyTrustIterator(theStub); | |
86 } | |
87 | |
88 public RemoteMethodControl setConstraints(MethodConstraints aConstraints) { | |
89 return new ConstrainableAdminProxy(theStub, theUuid, aConstraints); | |
90 } | |
91 | |
92 public MethodConstraints getConstraints() { | |
93 return theConstraints; | |
94 } | |
95 | |
96 private void readObject(ObjectInputStream anOIS) | |
97 throws IOException, ClassNotFoundException { | |
98 | |
99 anOIS.defaultReadObject(); | |
100 | |
101 if(! (theStub instanceof RemoteMethodControl) ) { | |
102 throw new InvalidObjectException("space does not implement RemoteMethodControl"); | |
103 } | |
104 } | |
105 } |