1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.rribbit.processing;
17
18 import java.io.Serializable;
19 import java.rmi.Remote;
20 import java.rmi.registry.LocateRegistry;
21 import java.rmi.registry.Registry;
22 import java.rmi.server.RMIClientSocketFactory;
23 import java.rmi.server.RMIServerSocketFactory;
24 import java.rmi.server.UnicastRemoteObject;
25
26 import javax.rmi.ssl.SslRMIClientSocketFactory;
27 import javax.rmi.ssl.SslRMIServerSocketFactory;
28
29 import org.rribbit.Request;
30 import org.rribbit.Response;
31 import org.rribbit.dispatching.RmiRequestDispatcher;
32 import org.rribbit.execution.ListenerObjectExecutor;
33 import org.rribbit.retrieval.ListenerObjectRetriever;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37
38
39
40
41
42
43
44
45
46
47
48 public class RmiRequestProcessorImpl implements RmiRequestProcessor {
49
50 private static final Logger log = LoggerFactory.getLogger(RmiRequestProcessorImpl.class);
51
52 protected LocalRequestProcessor requestProcessor;
53 protected Registry registry;
54
55
56
57
58
59
60
61
62
63 public RmiRequestProcessorImpl(int portnumber) {
64 this(portnumber, null, null);
65 }
66
67
68
69
70
71
72
73
74
75
76
77 public RmiRequestProcessorImpl(int portnumber, ListenerObjectRetriever listenerObjectRetriever, ListenerObjectExecutor listenerObjectExecutor) {
78
79 try {
80 log.info("Creating RMI Registry");
81 registry = LocateRegistry.createRegistry(portnumber);
82 Remote stub = UnicastRemoteObject.exportObject(this, 0);
83 registry.bind(REGISTRY_KEY, stub);
84 } catch(Exception e) {
85 throw new RuntimeException(e);
86 }
87 requestProcessor = new LocalRequestProcessor(listenerObjectRetriever, listenerObjectExecutor);
88 }
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 public RmiRequestProcessorImpl(int portnumber, String keystoreLocation, String keystorePassword, String truststoreLocation, String truststorePassword) {
109 this(portnumber, keystoreLocation, keystorePassword, truststoreLocation, truststorePassword, null, null);
110 }
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132 public RmiRequestProcessorImpl(int portnumber, String keystoreLocation, String keystorePassword, String truststoreLocation, String truststorePassword,
133 ListenerObjectRetriever listenerObjectRetriever, ListenerObjectExecutor listenerObjectExecutor) {
134
135 try {
136 log.info("Setting SSL properties");
137 System.setProperty("javax.net.ssl.keyStore", keystoreLocation);
138 System.setProperty("javax.net.ssl.keyStorePassword", keystorePassword);
139 System.setProperty("javax.net.ssl.trustStore", truststoreLocation);
140 System.setProperty("javax.net.ssl.trustStorePassword", truststorePassword);
141
142 log.info("Creating SSL RMI Registry");
143 RMIClientSocketFactory csf = new SslRMIClientSocketFactory();
144 RMIServerSocketFactory ssf = new SslRMIServerSocketFactory();
145 registry = LocateRegistry.createRegistry(portnumber, csf, ssf);
146 Remote stub = UnicastRemoteObject.exportObject(this, 0, csf, ssf);
147 registry.bind(REGISTRY_KEY, stub);
148 } catch(Exception e) {
149 throw new RuntimeException(e);
150 }
151 requestProcessor = new LocalRequestProcessor(listenerObjectRetriever, listenerObjectExecutor);
152 }
153
154
155
156
157 public void shutdown() {
158
159 try {
160 log.info("Unbinding this RmiRequestProcessorImpl");
161 registry.unbind(REGISTRY_KEY);
162 UnicastRemoteObject.unexportObject(this, false);
163 } catch(Exception e) {
164 throw new RuntimeException(e);
165 }
166 }
167
168 @Override
169 public <T> Response<T> processRequestViaRMI(Request request) {
170
171 log.info("Processing RMI Request");
172 Response<T> response = requestProcessor.processRequest(request);
173 log.info("Returning Response");
174 return response;
175 }
176
177 public ListenerObjectRetriever getListenerObjectRetriever() {
178 return requestProcessor.getListenerObjectRetriever();
179 }
180
181 public void setListenerObjectRetriever(ListenerObjectRetriever listenerObjectRetriever) {
182 requestProcessor.setListenerObjectRetriever(listenerObjectRetriever);
183 }
184
185 public ListenerObjectExecutor getListenerObjectExecutor() {
186 return requestProcessor.getListenerObjectExecutor();
187 }
188
189 public void setListenerObjectExecutor(ListenerObjectExecutor listenerObjectExecutor) {
190 requestProcessor.setListenerObjectExecutor(listenerObjectExecutor);
191 }
192 }