请高手帮忙详细的说明一下rmi-iiop的编写过程。

koreadko 2004-08-26 09:32:21
看了几篇文章还是有点乱乱的。
功能是知道拉,但是总是不知从哪入手?
...全文
112 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
changewang 2005-02-23
  • 打赏
  • 举报
回复
有个问题问一下:
rmic -iiop -d . jdeveloper.rmi_iiop.HelloImpl

这一步将生成<_Interface>_stub.class,<_InterfaceImpl>_Tie.class:

_Hello_Stub.class和_HelloImpl_Tie.class

为什么我在 :
rmic -iiop -d . jdeveloper.rmi_iiop.HelloImpl
只是生成了_Hello_Stub.class和_HelloImpl_Tie.class
而没有另外两个文件<_Interface>_stub.class,<_InterfaceImpl>_Tie.class:

Jujus 2004-10-10
  • 打赏
  • 举报
回复
我刚弄明白一点点纯Java的编写过程,看看对你有没有帮助。

1> 定义接口。
package test.rmi;

import java.rmi.*;

public interface IIOPTest extends Remote {
public String sayHello(String username) throws RemoteException;
}

2> 实现接口,并编写服务
package test.rmi;

import javax.rmi.*;
import javax.naming.*;
import java.rmi.*;


public class IIOPTestImpl extends PortableRemoteObject implements IIOPTest {
public IIOPTestImpl() throws RemoteException {
super();
}

public String sayHello(String username) throws RemoteException {
String sResult = "Hello, " + username + ". This is a RMI-IIOP test";
System.out.println(sResult);
return sResult;
}

public static void main(String[] args) {
try {
IIOPTestImpl rit = new IIOPTestImpl();

//这个地方可以改为System.setProperties,呵呵,通过一个属性文件就可以配置上下文了。
System.setProperty("java.naming.factory.initial",
"com.sun.jndi.cosnaming.CNCtxFactory");
System.setProperty("java.naming.provider.url", "iiop://localhost:900");//tnameserv默认端口为900

Context initialNamingContext = new InitialContext();
initialNamingContext.rebind("IIOPTest", rit);

System.out.println("IIOPTest bound in registry");
} catch (Exception e) {
e.printStackTrace();
}
}

}

3> 编写客户端

package test.rmi;

import javax.naming.*;

public class IIOPClient {

public static void main(String[] args) {
try {
System.setProperty("java.naming.factory.initial",
"com.sun.jndi.cosnaming.CNCtxFactory");
Context ic = new InitialContext();
IIOPTest it = (IIOPTest) ic.lookup("iiop://localhost/IIOPTest");
System.out.println(it.sayHello("Jujus"));
System.out.println(it.sayHello("Jujus"));
System.out.println(it.sayHello("Jujus"));
System.out.println(it.sayHello("Jujus"));
System.out.println(it.sayHello("Jujus"));

} catch (Exception e) {
e.printStackTrace();
}

}

}

4> 编译
javac IIOPTest.java
javac IIOPTestImpl.java
rmic -iiop test.rmi.IIOPTestImpl
javac IIOPTestClient.java

5> 启动tnameserv
tnameserv
初始的命名范围:
IOR:000000000000002b49444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f
6e746578744578743a312e300000000000010000000000000080000102000000000d3139322e3136
382e312e36380000038400000035afabcb00000000207ec7186a0000000100000000000000010000
000d544e616d65536572766963650000000000000004000000000a00000000000001000000010000
00200000000000010001000000020501000100010020000101090000000100010100
TransientNameServer: 将初始对象引用端口设置为:900
准备就绪。

6> 运行Server
java test.rmi.IIOPTestImpl

7> 运行客户端
java test.rmi.IIOPTestClient

搞定了:)
很开心,这是我第一次写IIOP,写代码的过程中学到了不少东西。

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧