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