User: starksm Date: 01/05/29 18:59:10 Modified: src/main/org/jnp/server Main.java MainMBean.java Log: Add support for setting the RMI client and server socket factories on which the Naming interface implementation is exported. Revision Changes Path 1.6 +60 -13 jnp/src/main/org/jnp/server/Main.java Index: Main.java =================================================================== RCS file: /cvsroot/jboss/jnp/src/main/org/jnp/server/Main.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Main.java 2001/04/26 07:50:52 1.5 +++ Main.java 2001/05/30 01:59:10 1.6 @@ -16,6 +16,8 @@ import java.rmi.Remote; import java.rmi.RemoteException; import java.rmi.MarshalledObject; +import java.rmi.server.RMIClientSocketFactory; +import java.rmi.server.RMIServerSocketFactory; import java.rmi.server.UnicastRemoteObject; import java.util.Properties; @@ -33,7 +35,7 @@ @author oberg @author [EMAIL PROTECTED] -@version $Revision: 1.5 $ +@version $Revision: 1.6 $ */ public class Main implements Runnable, MainMBean @@ -41,13 +43,26 @@ // Constants ----------------------------------------------------- // Attributes ---------------------------------------------------- - NamingServer theServer; - MarshalledObject serverStub; - ServerSocket serverSocket; - - int port = 1099; - int rmiPort = 0; // Anonymous - Category log; + /** The Naming interface server implementation */ + protected NamingServer theServer; + protected MarshalledObject serverStub; + /** The jnp server socket through which the NamingServer stub is vended */ + protected ServerSocket serverSocket; + /** 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; + /** The jnp protocol listening port. The default is 1099, the same as + the RMI registry default port. */ + protected int port = 1099; + /** The RMI port on which the Naming implementation will be exported. The + default is 0 which means use any available port. */ + protected int rmiPort = 0; + protected Category log; // Static -------------------------------------------------------- public static void main(String[] args) @@ -88,6 +103,32 @@ public void setPort(int p) { port = p; } public int getPort() { return port; } + public String getClientSocketFactory() + { + return serverSocketFactoryName; + } + public void setClientSocketFactory(String factoryClassName) + throws ClassNotFoundException, InstantiationException, IllegalAccessException + { + this.clientSocketFactoryName = factoryClassName; + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + Class clazz = loader.loadClass(clientSocketFactoryName); + clientSocketFactory = (RMIClientSocketFactory) clazz.newInstance(); + } + + public String getServerSocketFactory() + { + return serverSocketFactoryName; + } + public void setServerSocketFactory(String factoryClassName) + throws ClassNotFoundException, InstantiationException, IllegalAccessException + { + this.serverSocketFactoryName = factoryClassName; + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + Class clazz = loader.loadClass(serverSocketFactoryName); + serverSocketFactory = (RMIServerSocketFactory) clazz.newInstance(); + } + public void start() throws Exception { @@ -99,18 +140,24 @@ NamingContext.setLocal(theServer); // Export server - serverStub = new MarshalledObject(UnicastRemoteObject.exportObject(theServer, rmiPort)); + Remote stub = UnicastRemoteObject.exportObject(theServer, rmiPort, clientSocketFactory, serverSocketFactory); + serverStub = new MarshalledObject(stub); // Start listener try { serverSocket = null; - serverSocket = new ServerSocket(getPort()); - log.info("Started jnpPort=" + getPort()+", rmiPort="+getRmiPort()); + serverSocket = new ServerSocket(port); + // If an anonymous port was specified get the actual port used + if( port == 0 ) + port = serverSocket.getLocalPort(); + String msg = "Started jnpPort=" + port +", rmiPort=" + rmiPort + + ", Client SocketFactory="+clientSocketFactory+", Server SocketFactory="+serverSocketFactory; + log.info(msg); listen(); } catch (IOException e) { - log.error("Could not start on port " + getPort(), e); + log.error("Could not start on port " + port, e); } } @@ -191,7 +238,7 @@ { new Thread(this).start(); } - + // Private ------------------------------------------------------- // Inner classes ------------------------------------------------- 1.4 +10 -5 jnp/src/main/org/jnp/server/MainMBean.java Index: MainMBean.java =================================================================== RCS file: /cvsroot/jboss/jnp/src/main/org/jnp/server/MainMBean.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- MainMBean.java 2001/04/23 06:08:06 1.3 +++ MainMBean.java 2001/05/30 01:59:10 1.4 @@ -7,13 +7,11 @@ */ package org.jnp.server; -/** - * <description> +/** The Mbean interface for the jnp provider server. * - * @see <related> - * @author $Author: starksm $ + * @author oberg * @author [EMAIL PROTECTED] - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ public interface MainMBean { @@ -25,6 +23,13 @@ public void setPort(int p); public int getPort(); + + public String getClientSocketFactory(); + public void setClientSocketFactory(String factoryClassName) + throws ClassNotFoundException, InstantiationException, IllegalAccessException; + public String getServerSocketFactory(); + public void setServerSocketFactory(String factoryClassName) + throws ClassNotFoundException, InstantiationException, IllegalAccessException; public void start() throws Exception; _______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] http://lists.sourceforge.net/lists/listinfo/jboss-development