首先,你需要有一个 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>
....搞定
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>
....搞定
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);
}
}