最近公司项目(web方面)中用到缓存机制,用了rmi方面技术
用了两种方式实现:
一种是使用spring 方式,一种直接使用jdk提供接口
直接使用jdk 提供接口
具体远程接口,如附件:
远程服务启动,放在一个listener中启动
public void contextInitialized(ServletContextEvent arg0) {
try{
HelloRmi helloRmi=new HelloRmiImpl();
LocateRegistry.createRegistry(1102);
Context namingContext=new InitialContext();
namingContext.rebind( "rmi://localhost:1102/helloRmi",helloRmi);
System.out.println( "服务器注册了一个HelloRmi对象" );
}catch(Exception e){
e.printStackTrace();
}
}
使用spring 方式:
Server端代码如下:
远程接口代码:
package com.self.comm;
public interface MessageServer{
public String createMessageId();
public boolean isExitMessageId();
}
package com.self.comm.impl;
import java.util.ArrayList;
import java.util.List;
import com.self.comm.MessageServer;
public class MessageServerImpl implements MessageServer {
private List<String> messageList;
@Override
public String createMessageId() {
// TODO Auto-generated method stub
long id=System.currentTimeMillis();
messageList.add(String.valueOf(id));
System.out.println("SpringRmiServer");
for(String o:messageList){
System.out.println(o);
}
return String.valueOf(id);
}
@Override
public boolean isExitMessageId() {
// TODO Auto-generated method stub
return false;
}
public MessageServerImpl(){
messageList=new ArrayList<String>();
}
}
xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="messageServer" class="com.self.comm.impl.MessageServerImpl"></bean>
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<!--
does not necessarily have to be the same name as the bean to be
exported
-->
<property name="serviceName" value="messageServer" />
<property name="service" ref="messageServer" />
<property name="serviceInterface" value="com.self.comm.MessageServer" />
<property name="registryPort" value="1199" />
</bean>
</beans>
Client端的配置(是从一个servlet去远程调用)
配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="messageClient" class="com.self.client.impl.MessageClientImpl">
<property name="messageServer" ref="messageServer" />
</bean>
<bean name="messageServer" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://localhost:1199/messageServer" />
<property name="serviceInterface" value="com.self.comm.MessageServer"/>
</bean>
</beans>
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
WebApplicationContext wc = WebApplicationContextUtils
.getWebApplicationContext(this.getServletContext());
MessageClient mc=(MessageClient)wc.getBean("messageClient");
String id=mc.createMessage();
System.out.println(id);
PrintWriter o=response.getWriter();
o.println(id);
o.flush();
o.close();
}
附件为我做的一个demon
代码执行方式,SpringRmiClient SpringRmiServer 部署到web 服务
执行GetMessageServlet,RmiServletServer 这两servlet。 GetMessageServlet使用spring 方式在调用,RmiServletServer是用jdk提供接口调用