I have an update that allows one to specify custom RMI socket factories
as part of the container-invoker-conf. An example usage is:

<!-- Override the default container socket factories -->
<container-invoker-conf>
  <Optimized>true</Optimized>
  <RMIObjectPort>4445</RMIObjectPort>
  
<RMIClientSocketFactory>org.jboss.test.jrmp.ejb.CompressionClientSocketFactory</RMIClientSocketFactory>
  
<RMIServerSocketFactory>org.jboss.test.jrmp.ejb.CompressionServerSocketFactory</RMIServerSocketFactory>
</container-invoker-conf>

It is actually a rather minor change to the current JRMPContainerInvoker class. The 
cvs diff
is given below. Any objections to committing this?


server 733>cvs diff JRMPContainerInvoker.java
Index: JRMPContainerInvoker.java
===================================================================
RCS file: /products/cvs/ejboss/jboss/src/main/org/jboss/ejb/plugins/jrmp/server/
JRMPContainerInvoker.java,v
retrieving revision 1.35
diff -r1.35 JRMPContainerInvoker.java
18a19,20
> import java.rmi.server.RMIClientSocketFactory;
> import java.rmi.server.RMIServerSocketFactory;
90a93,96
>    protected RMIClientSocketFactory csf;
>    protected RMIServerSocketFactory ssf;
>    protected String csfClassName;
>    protected String ssfClassName;
133d138
<
254c259
<          UnicastRemoteObject.exportObject(this, rmiPort);
---
>          UnicastRemoteObject.exportObject(this, rmiPort, csf, ssf);
479,509c484,558
<    // XmlLoadable implementation
<    public void importXml(Element element) throws DeploymentException
<    {
<       String opt = MetaData.getElementContent(MetaData.getUniqueChild(element,
 "Optimized"));
<       optimize = Boolean.valueOf(opt).booleanValue();
<
<       if ((System.getProperty("java.vm.version").compareTo("1.3") >= 0)) jdk12
2 = false;
<         else  jdk122 = true;
<
<       // Create delegate depending on JDK version
<       if (jdk122)
<       {
<          ciDelegate = new org.jboss.ejb.plugins.jrmp12.server.JRMPContainerInv
oker(this);
<       } else
<       {
<          ciDelegate = new org.jboss.ejb.plugins.jrmp13.server.JRMPContainerInv
oker(this);
<       }
<
<       try
<       {
<          String port = MetaData.getElementContent(MetaData.getUniqueChild(elem
ent, "RMIObjectPort"));
<          rmiPort = Integer.parseInt(port);
<       } catch(NumberFormatException e)
<       {
<          rmiPort = ANONYMOUS_PORT;
<       } catch(DeploymentException e)
<       {
<          rmiPort = ANONYMOUS_PORT;
<       }
<       Logger.debug("Container Invoker RMI Port='"+(rmiPort == ANONYMOUS_PORT ?
 "Anonymous" : Integer.toString(rmiPort))+"'");
<       Logger.debug("Container Invoker Optimize='"+optimize+"'");
---
>     // XmlLoadable implementation
>     public void importXml(Element element) throws DeploymentException
>     {
>         Element optElement = MetaData.getUniqueChild(element, "Optimized");
>         if( optElement != null )
>         {
>             String opt = MetaData.getElementContent(optElement);
>             optimize = Boolean.valueOf(opt).booleanValue();
>         }
>
>         if ((System.getProperty("java.vm.version").compareTo("1.3") >= 0))
>             jdk122 = false;
>         else
>             jdk122 = true;
>
>         // Create delegate depending on JDK version
>         if (jdk122)
>         {
>             ciDelegate = new org.jboss.ejb.plugins.jrmp12.server.JRMPContainer
Invoker(this);
>         }
>         else
>         {
>             ciDelegate = new org.jboss.ejb.plugins.jrmp13.server.JRMPContainer
Invoker(this);
>         }
>
>         try
>         {
>             Element portElement = MetaData.getUniqueChild(element, "RMIObjectP
ort");
>             if( portElement != null )
>             {
>                 String port = MetaData.getElementContent(portElement);
>                 rmiPort = Integer.parseInt(port);
>             }
>         } catch(NumberFormatException e)
>         {
>             rmiPort = ANONYMOUS_PORT;
>         } catch(DeploymentException e)
>         {
>             rmiPort = ANONYMOUS_PORT;
>         }
>
>         // Load any custom socket factories
>         ClassLoader loader = Thread.currentThread().getContextClassLoader();
>         try
>         {
>             Element csfElement = MetaData.getOptionalChild(element, "RMIClient
SocketFactory");
>             if( csfElement != null )
>             {
>                 csfClassName = MetaData.getElementContent(csfElement);
>             }
>         }
>         catch(Exception e)
>         {
>             Logger.error(e);
>             csf = null;
>         }
>         try
>         {
>             Element ssfElement = MetaData.getOptionalChild(element, "RMIServer
SocketFactory");
>             if( ssfElement != null )
>             {
>                 ssfClassName = MetaData.getElementContent(ssfElement);
>             }
>         }
>         catch(Exception e)
>         {
>             Logger.error(e);
>             ssf = null;
>         }
>         loadCustomSocketFactories(loader);
>
>         Logger.debug("Container Invoker RMI Port='"+(rmiPort == ANONYMOUS_PORT
 ? "Anonymous" : Integer.toString(rmiPort))+"'");
>         Logger.debug("Container Invoker Client SocketFactory='"+(csf == null ?
 "Default" : csf.toString())+"'");
>         Logger.debug("Container Invoker Server SocketFactory='"+(ssf == null ?
 "Default" : ssf.toString())+"'");
>         Logger.debug("Container Invoker Optimize='"+optimize+"'");
538a588,616
>    private void loadCustomSocketFactories(ClassLoader loader)
>    {
>         try
>         {
>             if( csfClassName != null )
>             {
>                 Class csfClass = loader.loadClass(csfClassName);
>                 csf = (RMIClientSocketFactory) csfClass.newInstance();
>             }
>         }
>         catch(Exception e)
>         {
>             Logger.error(e);
>             csf = null;
>         }
>         try
>         {
>             if( ssfClassName != null )
>             {
>                 Class ssfClass = loader.loadClass(ssfClassName);
>                 ssf = (RMIServerSocketFactory) ssfClass.newInstance();
>             }
>         }
>         catch(Exception e)
>         {
>             Logger.error(e);
>             ssf = null;
>         }
>    }



Reply via email to