View Javadoc

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 }