1 package org.seasar.remoting.rmi.deployer;
2
3 import java.rmi.registry.LocateRegistry;
4 import java.rmi.registry.Registry;
5 import java.rmi.server.RMIClientSocketFactory;
6 import java.rmi.server.RMIServerSocketFactory;
7 import java.rmi.server.UnicastRemoteObject;
8
9 import org.seasar.framework.log.Logger;
10 import org.seasar.remoting.common.deployer.Deployer;
11 import org.seasar.remoting.rmi.adaptor.RMIAdaptor;
12
13 /***
14 * RMIAdaptorをRMIレジストリに登録するクラス.
15 *
16 * @author Kenichiro Murata
17 */
18 public class RMIAdaptorDeployer implements Deployer {
19 private final static Logger logger = Logger
20 .getLogger(RMIAdaptorDeployer.class);
21
22 private RMIAdaptor adaptor;
23
24 private RMIClientSocketFactory clientSocketFactory = null;
25
26 private RMIServerSocketFactory serverSocketFactory = null;
27
28 private int registryPort = 1099;
29
30 private int servicePort = 0;
31
32 /***
33 * @see org.seasar.remoting.common.deployer.Deployer#deploy()
34 */
35 public void deploy() {
36 Registry registry;
37 try {
38 this.isSetAdaptor();
39
40 if (logger.isDebugEnabled()) {
41 logger.log("DRMI0001", new Object[] { Integer
42 .toString(this.registryPort) });
43 }
44
45 registry = LocateRegistry.createRegistry(this.registryPort);
46
47 if (this.clientSocketFactory != null
48 && this.serverSocketFactory != null) {
49 if (logger.isDebugEnabled()) {
50 logger.log("DRMI0002", new Object[] { Integer
51 .toString(this.servicePort) });
52 }
53 UnicastRemoteObject.exportObject(this.adaptor,
54 this.servicePort, this.clientSocketFactory,
55 this.serverSocketFactory);
56 } else {
57 if (logger.isDebugEnabled()) {
58 logger.log("DRMI0003", new Object[] { Integer
59 .toString(this.servicePort) });
60 }
61 UnicastRemoteObject
62 .exportObject(this.adaptor, this.servicePort);
63 }
64
65 if (logger.isDebugEnabled()) {
66 logger.log("DRMI0004", new Object[] { RMIAdaptor.EXPORT_NAME });
67 }
68
69 registry.rebind(RMIAdaptor.EXPORT_NAME, this.adaptor);
70 } catch (Exception e) {
71 logger.log(e);
72 }
73 }
74
75 final void isSetAdaptor() throws IllegalArgumentException {
76 if (this.adaptor == null) {
77 throw new IllegalArgumentException("RMIAdaptor is not defined.");
78 }
79 }
80
81 /***
82 * @param adaptor
83 * adaptor を設定。
84 */
85 public void setAdaptor(RMIAdaptor adaptor) {
86 this.adaptor = adaptor;
87 }
88
89 /***
90 * @param clientSocketFactory
91 * clientSocketFactory を設定。
92 * @param serverSocketFactory
93 * serverSocketFactory を設定。
94 */
95 public void addCustomSocketFactory(
96 RMIClientSocketFactory clientSocketFactory,
97 RMIServerSocketFactory serverSocketFactory) {
98 this.clientSocketFactory = clientSocketFactory;
99 this.serverSocketFactory = serverSocketFactory;
100 }
101
102 /***
103 * @param registryPort
104 * registryPort を設定。
105 */
106 public void setRegistryPort(int registryPort) {
107 this.registryPort = registryPort;
108 }
109
110 /***
111 * @param servicePort
112 * servicePort を設定。
113 */
114 public void setServicePort(int servicePort) {
115 this.servicePort = servicePort;
116 }
117 }