浏览 3503 次
锁定老帖子 主题:jdk1.5的rmi
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-02-05
import java.rmi.Remote; import java.rmi.RemoteException; import org.dom4j.Document; public interface IRmi extends Remote { public Document getDocument() throws RemoteException; } IRmi的实现类 import java.io.File; import java.io.Serializable; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; public class TestRmi extends UnicastRemoteObject implements IRmi, Serializable { protected TestRmi() throws RemoteException { super(); // TODO Auto-generated constructor stub } /** * */ private static final long serialVersionUID = 1L; Document document = null; // private static Rmi instance = new Rmi(); public Document getDocument() { File file = new File("config/flatRMI.xml"); SAXReader saxReader = new SAXReader(); try { document = (Document) saxReader.read(file); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } return document; } private static TestRmi rmi; public static void main(String[] args) throws RemoteException, MalformedURLException { LocateRegistry.createRegistry(9930); rmi = new TestRmi(); Naming.rebind("//localhost:" + 9930 + "/" + "Rmi", rmi); } } 测试rmi类 import java.rmi.Naming; import org.dom4j.Document; import org.dom4j.Element; public class Test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { IRmi rmi = (IRmi) Naming.lookup("rmi://localhost:9930/Rmi"); Document doc = rmi.getDocument(); Element list = (Element) doc.selectSingleNode("//location"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 将上面的接口和实现类放在一个工程里运行,然后将接口和测试代码放在另外的一个工程里运行,或者在两台机器上分别部署两个工程运行。启动服务,然后通过test里访问,成功。 疑问: 在jdk1.4里运行rmi需要用rmic进行编译生成实现类的stub和skel文件,然后将stub拷贝到client端也就是上面的接口和test那个工程里,然后才能访问。可是,jdk1.5里却直接这样,完全不用生成文件就可以直接访问了。 可是,jdk1.5里依然提供了rmic的编译命令,提供两个版本v1.1,v1.2。前面那个老版本是1.4里的能生成stub和skel两个文件,而1.2里只能生成一个stub文件。 但是现在不生成也能进行远程访问,那还要那个stub文件干什么呢? 关于不生成即能进行远程访问,搜索了下说是动态生成stub文件,然后访问的时候传输到客户端。 动态机制不是很清楚,看到此文章,知道的朋友请留言解说解说。 另外,在eclipse里原来是用builder来进行rmic编译,现在居然配置编译老是报错。 查了下,居然是有个什么完成包涵的东东,看不懂。 问题: jdk1.5怎么部署好?生成stub还是不生成? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |