刚学rmi.什么也不懂,就写了这个,分享一下.
我不太明白,为什么红色那里为什么不需要安全管理器.之前也写了一个最简单的.没有了安全管理器.就发生错误.而这里又不需要.否则又错误.不太明白.
/**
* @(#)Multi.java
*
*
* @author if
* @version 1.00 2007/3/28
*/
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Multi extends Remote{
public int mul(int a,int b) throws RemoteException;
}
/**
* @(#)Plus.java
*
*
* @author
* @version 1.00 2007/3/28
*/
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Plus extends Remote{
public int add(int a,int b) throws RemoteException;
}
/**
* @(#)PlusImpl.java
*
*
* @author if
* @version 1.00 2007/3/28
*/
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class PlusImpl extends UnicastRemoteObject implements Plus{
private String name;
public PlusImpl(String s) throws RemoteException{
super();
this.name=s;
}
public int add(int a,int b) throws RemoteException{
System.out.println("lnvoke the add");
return (a+b);
}
}
/**
* @(#)MultiImpl.java
*
*
* @author if
* @version 1.00 2007/3/28
*/
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MultiImpl extends UnicastRemoteObject implements Multi{
private String name;
public MultiImpl(String s) throws RemoteException{
super();
this.name=s;
}
public int mul(int a,int b) throws RemoteException{
System.out.println("lnvoke the multiply");
return (a*b);
}
}
/**
* @(#)CMSServer.java
*
*
* @author if
* @version 1.00 2007/3/28
*/
import java.rmi.*;
public class CMSServer {
public static void main(String[] args) {
//System.setSecurityManager(new RMISecurityManager());
try{
MultiImpl obj=new MultiImpl("MultiServer");
PlusImpl obj1=new PlusImpl("PlusServer");
Naming.rebind("rmi://localhost:1099/plusService",obj1);
Naming.rebind("rmi://localhost:1099/multiService",obj);
System.out.println("plusxx and multixx!!");
}catch(Exception e){
System.out.println(e.toString());
}
}
}
/**
* @(#)Frame1.java
*
*
* @author if
* @version 1.00 2007/3/28
*/
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.rmi.*;
public class Frame1 extends JFrame implements ActionListener{
private JPanel nPanel;
private JTextField jtf1,jtf2,jtf3,jtf4;
private JButton jb;
public Frame1() {
setTitle("rmi");
initComponent();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
private void initComponent(){
nPanel=new JPanel();
jtf1=new JTextField(6);
jtf2=new JTextField(6);
jtf3=new JTextField(6);
jtf4=new JTextField(50);
nPanel.add(jtf1);
nPanel.add(jtf2);
nPanel.add(jtf3);
jb=new JButton("run");
jb.addActionListener(this);
getContentPane().add(nPanel,BorderLayout.NORTH);
getContentPane().add(jtf4,BorderLayout.CENTER);
getContentPane().add(jb,BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e){
int i1=Integer.parseInt(jtf1.getText());
int i2=Integer.parseInt(jtf2.getText());
int i3=Integer.parseInt(jtf3.getText());
try{
Plus obj1=(Plus)Naming.lookup("rmi://localhost/plusService");
System.out.println("Found plus object");
Multi obj2=(Multi)Naming.lookup("rmi://localhost/multiService");
System.out.println("Found multi object");
int i4=obj1.add(i1,i2);
System.out.println("Add the first two number");
int i5=obj2.mul(i4,i3);
System.out.println("Multi with the last number");
jtf4.setText(""+i5);
System.out.println("ok");
}catch(Exception ex){
System.out.println(ex.toString());
}
}
}
/**
* @(#)CMSClient.java
*
*
* @author if
* @version 1.00 2007/3/28
*/
import javax.swing.JFrame;
public class CMSClient {
public static void main(String[] args) {
Frame1 frame=new Frame1();
frame.setVisible(true);
}
}
----------------解决方案--------------------------------------------------------
厉害,学起RMI了
----------------解决方案--------------------------------------------------------
呵呵.才刚学.什么也不懂.
----------------解决方案--------------------------------------------------------
从来没看过这方面的东西!!
----------------解决方案--------------------------------------------------------
rmi不好玩,还是CORBA好~~
----------------解决方案--------------------------------------------------------
都是强人啊`
我对JAVA才刚入门
----------------解决方案--------------------------------------------------------
对了.千里冰封.
如果rmi运行在两个外网之间.是不是需要突破防火墙?和其它什么的?
----------------解决方案--------------------------------------------------------
JAVA程序如果要连的话,都需要通过防火墙的,RMI也不例外
还有,RMI的用途在EJB就能显出来,所以,建议你看看EJB3.0
----------------解决方案--------------------------------------------------------
嗯 .好的.迟点会去看看ejb..不过现在还不是时候..基础还是差了点.
----------------解决方案--------------------------------------------------------
你现在对JAVA是越来越牛了
恭喜你一下
----------------解决方案--------------------------------------------------------