User: stark
Date: 01/03/14 16:36:33
Modified: src/main/org/jboss/ejb/plugins/jrmp/server
JRMPContainerInvoker.java
Log:
Add support for externalizing the RMI socket factories used by the
JRMPContainerInvoker. This allows for custom tunneling, security,
compression, etc.
Revision Changes Path
1.36 +118 -34
jboss/src/main/org/jboss/ejb/plugins/jrmp/server/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
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- JRMPContainerInvoker.java 2001/02/28 10:37:51 1.35
+++ JRMPContainerInvoker.java 2001/03/15 00:36:33 1.36
@@ -16,6 +16,8 @@
import java.rmi.RemoteException;
import java.rmi.MarshalledObject;
import java.rmi.server.RemoteServer;
+import java.rmi.server.RMIClientSocketFactory;
+import java.rmi.server.RMIServerSocketFactory;
import java.rmi.server.UnicastRemoteObject;
import java.security.Principal;
import java.util.ArrayList;
@@ -76,7 +78,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Sebastien
Alborini</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Marc Fleury</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Juha Lindfors</a>
- * @version $Revision: 1.35 $
+ * @version $Revision: 1.36 $
*/
public class JRMPContainerInvoker
extends RemoteServer
@@ -87,7 +89,16 @@
// Attributes ----------------------------------------------------
protected boolean optimize = false;
+ /** The port the container will be exported on */
protected int rmiPort = ANONYMOUS_PORT;
+ /** An optional custom client socket factory */
+ protected RMIClientSocketFactory clientSocketFactory;
+ /** An optional custom server socket factory */
+ protected RMIServerSocketFactory serverSocketFactory;
+ /** The class name of the optional custom client socket factory */
+ protected String clientSocketFactoryName;
+ /** The class name of the optional custom server socket factory */
+ protected String serverSocketFactoryName;
protected boolean jdk122 = false;
protected Container container;
protected String jndiName;
@@ -130,7 +141,6 @@
public void setContainer(Container con)
{
this.container = con;
-
ciDelegate.setContainer(con);
}
@@ -251,7 +261,8 @@
try
{
// Export CI
- UnicastRemoteObject.exportObject(this, rmiPort);
+ UnicastRemoteObject.exportObject(this, rmiPort,
+ clientSocketFactory, serverSocketFactory);
GenericProxy.addLocal(container.getBeanMetaData().getJndiName(), this);
InitialContext context = new InitialContext();
@@ -476,37 +487,81 @@
}
- // 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)) jdk122 =
false;
- else jdk122 = true;
-
- // Create delegate depending on JDK version
- if (jdk122)
- {
- ciDelegate = new
org.jboss.ejb.plugins.jrmp12.server.JRMPContainerInvoker(this);
- } else
- {
- ciDelegate = new
org.jboss.ejb.plugins.jrmp13.server.JRMPContainerInvoker(this);
- }
-
- try
- {
- String port = MetaData.getElementContent(MetaData.getUniqueChild(element,
"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.JRMPContainerInvoker(this);
+ }
+ else
+ {
+ ciDelegate = new
org.jboss.ejb.plugins.jrmp13.server.JRMPContainerInvoker(this);
+ }
+
+ try
+ {
+ Element portElement = MetaData.getUniqueChild(element, "RMIObjectPort");
+ 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,
"RMIClientSocketFactory");
+ if( csfElement != null )
+ {
+ clientSocketFactoryName = MetaData.getElementContent(csfElement);
+ }
+ }
+ catch(Exception e)
+ {
+ Logger.error(e);
+ clientSocketFactoryName = null;
+ }
+ try
+ {
+ Element ssfElement = MetaData.getOptionalChild(element,
"RMIServerSocketFactory");
+ if( ssfElement != null )
+ {
+ serverSocketFactoryName = MetaData.getElementContent(ssfElement);
+ }
+ }
+ catch(Exception e)
+ {
+ Logger.error(e);
+ serverSocketFactoryName = null;
+ }
+ 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 Optimize='"+optimize+"'");
}
@@ -536,6 +591,35 @@
}
// 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;
+ }
+ }
// Inner classes -------------------------------------------------
}