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 }