首先,你需要有一个 RMIRunnerpackage com.your.rmi;import java.rmi.*;
import java.rmi.registry.*;
import org.apache.log4j.Logger;public class RMIRunner implements Runnable {
    
    private static Logger log = Logger.getLogger( RMIRunner.class );
    
    // ***********************
    
    private void rmiStart() {
         try {
            Registry r = LocateRegistry.getRegistry(RMIExecutor.ServerPort);
             if ( r != null) r = LocateRegistry.createRegistry(RMIExecutor.ServerPort);
             RMIServer s = new RMIServerImpl();
             Naming.rebind(RMIServer.ServerName, s);
             log.info("rmiStart successful.");
         } catch (Exception e) {
             log.error("During rmiStart", e);
         }
    }
    
    public void run() {
        rmiStart();
    }
    
}然后,要写一支 servlet 来调用它package com.your.web.RMIInit;import javax.servlet.*;
import javax.servlet.http.*;
import com.your.rmi.RMIRunner;public class RMIInit extends GenericServlet {    public void init( ServletConfig config ) throws ServletException {
        RMIRunner rmiRunner = new RMIRunner();
        Thread t = new Thread(rmiRunner);
        t.start();
    }
    
    public void service( ServletRequest req, ServletResponse res ) throws ServletException, IOException { }    public void destroy() { }}最后,在 web.xml 中配置该 servlet 为 load-on-startup 的
    ....
    <servlet>
        <servlet-name>rmiInit</servlet-name>
        <display-name>RMI Server Init</display-name>
        <servlet-class>com.your.web.RMIInit</servlet-class>
        <load-on-startup>3</load-on-startup>
    </servlet>
    ....搞定

解决方案 »

  1.   

    上诉代码有误,应为:    private void rmiStart() {
             try {
                 Registry r = LocateRegistry.getRegistry(RMIServer.Port);
                 if ( r != null) r = LocateRegistry.createRegistry(RMIServer.Port);
                 RMIServer s = new RMIServerImpl();
                 Naming.rebind(RMIServer.Name, s);
                 log.info("rmiStart successful.");
             } catch (Exception e) {
                 log.error("During rmiStart", e);
             }
        }