User: starksm 
  Date: 01/07/25 19:44:15

  Modified:    src/main/org/jboss/ejb/plugins/jrmp/server
                        JRMPContainerInvoker.java
  Added:       src/main/org/jboss/ejb/plugins/jrmp/server
                        DefaultSocketFactory.java
  Log:
  Add support for binding the JRMP/RMI objects on a specific address
  
  Revision  Changes    Path
  1.40      +70 -19    
jboss/src/main/org/jboss/ejb/plugins/jrmp/server/JRMPContainerInvoker.java
  
  Index: JRMPContainerInvoker.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/jrmp/server/JRMPContainerInvoker.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- JRMPContainerInvoker.java 2001/06/30 20:15:29     1.39
  +++ JRMPContainerInvoker.java 2001/07/26 02:44:14     1.40
  @@ -8,6 +8,7 @@
   
   import java.io.IOException;
   import java.lang.reflect.Method;
  +import java.net.UnknownHostException;
   import java.rmi.ServerException;
   import java.rmi.RemoteException;
   import java.rmi.MarshalledObject;
  @@ -66,7 +67,8 @@
    *  @author <a href="mailto:[EMAIL PROTECTED]";>Marc Fleury</a>
    *  @author <a href="mailto:[EMAIL PROTECTED]";>Juha Lindfors</a>
    *  @author <a href="mailto:[EMAIL PROTECTED]";>Ole Husgaard</a>
  - *  @version $Revision: 1.39 $
  + *  @author <a href="mailto:[EMAIL PROTECTED]";>Scott Stark</a>
  + *  @version $Revision: 1.40 $
    */
   public class JRMPContainerInvoker
      extends RemoteServer
  @@ -87,6 +89,8 @@
      protected String clientSocketFactoryName;
      /** The class name of the optional custom server socket factory */
      protected String serverSocketFactoryName;
  +   /** The address to bind the rmi port on */
  +   protected String serverAddress;
      protected boolean jdk122 = false;
      protected Container container;
      protected String jndiName;
  @@ -498,11 +502,15 @@
            Logger.error(e);
            serverSocketFactoryName = null;
         }
  +      Element addrElement = MetaData.getOptionalChild(element, 
"RMIServerSocketAddr");
  +      if( addrElement != null )
  +         this.serverAddress = MetaData.getElementContent(addrElement);
         loadCustomSocketFactories(loader);
   
         Logger.debug("Container Invoker RMI Port='"+(rmiPort == ANONYMOUS_PORT ? 
"Anonymous" : Integer.toString(rmiPort))+"'");
         Logger.debug("Container Invoker Client SocketFactory='"+(clientSocketFactory 
== null ? "Default" : clientSocketFactory.toString())+"'");
         Logger.debug("Container Invoker Server SocketFactory='"+(serverSocketFactory 
== null ? "Default" : serverSocketFactory.toString())+"'");
  +      Logger.debug("Container Invoker Server SocketAddr='"+(serverAddress == null ? 
"Default" : serverAddress)+"'");
         Logger.debug("Container Invoker Optimize='"+optimize+"'");
      }
   
  @@ -532,24 +540,67 @@
      // Private -------------------------------------------------------
      private void loadCustomSocketFactories(ClassLoader loader)
      {
  -      try {
  -         if (clientSocketFactoryName != null) {
  -            Class csfClass = loader.loadClass(clientSocketFactoryName);
  -            clientSocketFactory = (RMIClientSocketFactory) csfClass.newInstance();
  -         }
  -      } catch(Exception e) {
  -         Logger.error(e);
  -         clientSocketFactory = null;
  -      }
  -      try {
  -         if (serverSocketFactoryName != null) {
  -            Class ssfClass = loader.loadClass(serverSocketFactoryName);
  -            serverSocketFactory = (RMIServerSocketFactory) ssfClass.newInstance();
  -         }
  -      } catch(Exception e) {
  -         Logger.error(e);
  -         serverSocketFactory = null;
  -      }
  +        try
  +        {
  +            if( clientSocketFactoryName != null )
  +            {
  +                Class csfClass = loader.loadClass(clientSocketFactoryName);
  +                clientSocketFactory = (RMIClientSocketFactory) 
csfClass.newInstance();
  +            }
  +        }
  +        catch(Exception e)
  +        {
  +            Logger.error(e);
  +            clientSocketFactory = null;
  +        }
  +        try
  +        {
  +            if( serverSocketFactoryName != null )
  +            {
  +                Class ssfClass = loader.loadClass(serverSocketFactoryName);
  +                serverSocketFactory = (RMIServerSocketFactory) 
ssfClass.newInstance();
  +                if( serverAddress != null )
  +                {
  +                   // See if the server socket supports setBindAddress(String)
  +                   try
  +                   {
  +                      Class[] parameterTypes = {String.class};
  +                      Method m = ssfClass.getMethod("setBindAddress", 
parameterTypes);
  +                      Object[] args = {serverAddress};
  +                      m.invoke(serverSocketFactory, args);
  +                   }
  +                   catch(NoSuchMethodException e)
  +                   {
  +                      Logger.error("Socket factory does not support 
setBindAddress(String)");
  +                      // Go with default address
  +                   }
  +                   catch(Exception e)
  +                   {
  +                      Logger.error("Failed to setBindAddress="+serverAddress+" on 
socket factory");
  +                      // Go with default address
  +                   }
  +                }
  +            }
  +            // If a bind address was specified create a DefaultSocketFactory
  +            else if( serverAddress != null )
  +            {
  +               DefaultSocketFactory defaultFactory = new DefaultSocketFactory();
  +               serverSocketFactory = defaultFactory;
  +               try
  +               {
  +                  defaultFactory.setBindAddress(serverAddress);
  +               }
  +               catch(UnknownHostException e)
  +               {
  +                  Logger.error("Failed to setBindAddress="+serverAddress+" on 
socket factory, "+e.getMessage());
  +               }
  +            }
  +        }
  +        catch(Exception e)
  +        {
  +            Logger.error(e);
  +            serverSocketFactory = null;
  +        }
      }
   
      /**
  
  
  
  1.2       +55 -0     
jboss/src/main/org/jboss/ejb/plugins/jrmp/server/DefaultSocketFactory.java
  
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to