小弟初学java,写了RMI客户机和服务器交互的代码。
但不知道怎么部署运行。用的web服务器是jboss。
哪位高手能告诉一下具体的步骤。
我怎么样将server端部署到服务器,
怎样用client端去访问。
谢谢。
但不知道怎么部署运行。用的web服务器是jboss。
哪位高手能告诉一下具体的步骤。
我怎么样将server端部署到服务器,
怎样用client端去访问。
谢谢。
解决方案 »
- BindingResult中的错误怎样在页面显示
- rmi应用于spring的问题
- struts tab 与 jstl哪一个更优秀与更跨平台
- 部署ejb3出现的异常,请大家帮我看下,是jboss中部署
- 关于Hibernate的几个问题
- 如何统计网站的当前在线人数
- 关于一个登录的问题。判断人员类型。要是主意好,可以再加分!
- Hibernate连接SQLserver出错,SEVERE: Error parsing XML: XML InputStream(2) The markup in the document preceding the root element
- struts:关于<a />aa</a>
- 运行Apache2,打开浏览器,在地址栏中输入:http://localhost 检验看不到Apache2的欢迎界面?帮忙呀!!!
- 求面试的机会(北京---java)
- struts2 值栈问题
InfoCodeNetType icnt=new InfoCodeNetType();
icnt.setNetTypeCode(infoCodeNetTypeService.getSequenceNextVal ( "INFO_CODE_NET_TYPE_SEQ ").toString());
icnt.setNetTypeName(infoCodeNetType.getNetTypeName());
icnt.setNetTypeNote(infoCodeNetType.getNetTypeNote());
icnt.setNetTypeOrder(infoCodeNetType.getNetTypeOrder());
icnt.setInfoCodeNetTypeProperty(infoCodeNetType.getInfoCodeNetTypeProperty());
icnt.setInfoCodeNetTypeStatus(infoCodeNetType.getInfoCodeNetTypeStatus());
this.infoCodeNetTypeService.update(icnt);
return SUCCESS;
}
首先,分布式的应用需要一个 Naming/Registry 的东西,在服务端把自己绑定进去之后,让客户端能查找“服务”,RMI 里面是 rmiregistry.exe。其次,用一个启动类把服务端实现类绑定到 rmiregistry 中去,使用一个 JNDI 风格的名字服务,服务端阻塞等被客户端调用,以免客户端调用时服务端进程已经退出了(使用 Java Activation Framework 时的情况则不同,先了解 Unicast 的情况后 Activation 的情况就简单一些)。再次,客户端启动向 rmiregistr 这个注册表查询指定名字下的服务,然后调用它。注意,因为服务端和客户端是面向接口编程,具体的实现类在编码时可能出现:客户端准备调用前查找服务端时因缺少 Stub 而失败,我们需要把 Stub 放到客户端;如果客户端调用服务端功能的接口的形参也是接口,那么客户端可能给出的实现类在服务端没有,这时我们需要在服务端给出一个 RMI codebase URL,告诉 RMI 服务端"如果有类找不到的话,尝试去这个 URL 查找",这是一个 URLClassLoader 去加载,这里因为包括隐含地访问网络或文件,所以需要明确授权(用 Java 2 Security Policy 文件在命令行提供,并在程序启动时 System.setSecurityManager() 启用,安全的一般性原则是对于可能有风险的操作,只有使用者明确的确认才可以执行);
(接口中的返回值也是接口类而具体实现类只有服务端提供的话时)客户端找不到服务端的返回值对应的类时也是类似处理。
给你几段简单的代码看看吧:
服务端:
首先在server端需要一个接口,继承自java.rmi.Remotepublic interface Hello extends Remote {
public String say() throws RemoteException;
}
其次实现这个接口并继承java.rmi.server.UnicastRemoteObject
public class SayHello extends UnicastRemoteObject implements Hello{ protected SayHello() throws RemoteException{
super();
}
public String say() throws RemoteException {
return "Hello";
}
}
接着注册服务,绑定端口public class Reg {
public static void main(String[] args) throws RemoteException,MalformedURLException{
LocateRegistry.createRegistry(1099);
SayHello sh = new SayHello();
Naming.rebind("rmi://localhost:1099/sh", sh);
System.out.println("注册完毕");
}
}
然后在客户端
public class Client {
public static void main(String[] args) throws RemoteException,MalformedURLException,NotBoundException{
Hello h = (Hello)Naming.lookup("rmi://localhost:1099/sh");
System.out.println(h.say());
}}
希望能帮到你,如果还有不明白的可以和我联系。