关于rmi-iiop和jndi的问题

guaiguai506 2003-12-30 06:54:52
我在学习rmi-iiop和jndi中碰到问题,请高手帮忙看一下
有四个文件
IPKGenerator.java:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IPKGenerator extends Remote{
public long generate()throws RemoteException;
}

PKGenerator.java:
import java.rmi.RemoteException;
import javax.rmi.PortableRemoteObject;
public class PKGenerator extends PortableRemoteObject implements IPKGenerator{
public PKGenerator()throws Exception,RemoteException{
super();
}
public synchronized long generate()throws RemoteException{
return i++;
}
private static long i=System.currentTimeMillis();
}

Startup.java:
import javax.naming.*;
public class Startup{
public static void main(String[] args)throws Exception{
PKGenerator generator=new PKGenerator();
Context ctx=new InitialContext(System.getProperties());
ctx.rebind("PKGenerator",generator);
System.out.println("PKGenerator bound to JNDI tree.");
synchronized(generator){
generator.wait();
}
}
}

Client.java:
import javax.naming.*;
import java.rmi.*;
public class Client{
public static void main(String[] args)throws Exception{
Context ctx=new InitialContext(System.getProperties());
Object remoteObject=ctx.lookup("PKGenerator");
IPKGenerator generator=(IPKGenerator)javax.rmi.PortableRemoteObject.narrow(remoteObject,IPKGenerator.class);
System.err.println(generator.generate());
}
}

我用rmic编译了PKGenerator生成了根程序和程序框架,在运行Startup.java时抛出了NoInitialContextException异常,那位高手能告诉我该怎么样编译和执行这几个文件,小弟我刚学j2ee,请多指点,希望能尽量详细点,谢谢!
...全文
103 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicolas2 2004-01-02
  • 打赏
  • 举报
回复
在你的本机1050端口上开一个名字服务啊,这是一个不会中止的进程,地位和各位老大提到的什么服务器一样啊。
guaiguai506 2004-01-01
  • 打赏
  • 举报
回复
orbd -ORBInitialPort 1050 事什么意思呀,能不能解释一下呀,谢谢
nicolas2 2003-12-31
  • 打赏
  • 举报
回复
还忘了一件事,jdk1.4才可以
nicolas2 2003-12-31
  • 打赏
  • 举报
回复
initialNamingContext.rebind("generator
",generator);考,太匆忙!
客户端的初始化也一样。
nicolas2 2003-12-31
  • 打赏
  • 举报
回复
用这个
orbd -ORBInitialPort 1050
Properties prop = new Properties();
Properties contextprop = new Properties(); contextprop.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.cosnaming.CNCtxFactory");
contextprop.put(Context.PROVIDER_URL,"iiop://yourip:1050");

Context initialNamingContext = new InitialContext(contextprop);
initialNamingContext.rebind("",);
注意用rmic -iiop generator
才是iiop协议哦。
guaiguai506 2003-12-30
  • 打赏
  • 举报
回复
louisqiang(tenwin):
你说的启动服务器时说的什么服务器呀,我只有j2sdkee1.3,这个可以吗,该怎么样配置呀,我刚学习j2ee,不是太懂,请多多帮忙
neary 2003-12-30
  • 打赏
  • 举报
回复
学习
louisqiang 2003-12-30
  • 打赏
  • 举报
回复
我一个例子,你可以试一试:
四个文件:[代码在后]
Product.java
ProductImpl.java
ProductServer.java
ProductClient.java
步骤:
1.正常编译四个文件。
2.运行rmic -v1.2 *** 生成代理文件***_stub.class。该文件必须放置在客户端。
3.运行rmiregistry。
4.启动服务器。
5.运行客户端。

//***************************
//Product.java
import java.rmi.*;
public interface Product extends Remote
{
String getDescription() throws RemoteException;
}
//********************************
//ProductImpl.java
import java.rmi.*;
import java.rmi.server.*;


public class ProductImpl extends UnicastRemoteObject implements Product
{
public ProductImpl(String n) throws RemoteException
{
name = n;
}

public String getDescription() throws RemoteException
{
return "I am a " + name + ". Buy me!";
}

private String name;
}
//*********************************
//ProductServer.java
import java.rmi.*;
import java.rmi.server.*;

public class ProductServer
{
public static void main(String args[])
{
try
{
System.out.println("Constructing server implementations...");
ProductImpl p1 = new ProductImpl("Blackwell Toaster");
ProductImpl p2 = new ProductImpl("ZapXpress Microwave Oven");
System.out.println("Binding server implementations to registry...");

Naming.rebind("toaster", p1);
Naming.rebind("microwave", p2);

System.out.println("Waiting for invocations from clients...");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
//******************************8
ProductClient.java
import java.rmi.*;
import java.rmi.server.*;

public class ProductClient
{
public static void main(String[] args)
{
System.setProperty("java.security.policy", "client.policy");
System.setSecurityManager(new RMISecurityManager());
String url = "rmi://localhost/";

try
{
Product c1 = (Product)Naming.lookup(url + "toaster");
Product c2 = (Product)Naming.lookup(url + "microwave");
System.out.println(c1.getDescription());
System.out.println(c2.getDescription());
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
dongdong2112 2003-12-30
  • 打赏
  • 举报
回复
不同的服务器的Properties,不同如weblogic的
properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://localhost:7001");
guaiguai506 2003-12-30
  • 打赏
  • 举报
回复
请问那该怎么样配置我的properties呢
noratong 2003-12-30
  • 打赏
  • 举报
回复
呵呵,有人回答你的问题了咧。

我想原因可能就是我说的那个jdk自带的命名服务不管用,非得用一个专门的J2ee服务器来测试你的这个代码吧。

不过楼上说的那个配置服务器的相应的Properties那又怎么配置咧???
还需要高手详细指点一下。
dongdong2112 2003-12-30
  • 打赏
  • 举报
回复
public class Startup{
public static void main(String[] args)throws Exception{
PKGenerator generator=new PKGenerator();
Context ctx=new InitialContext(System.getProperties());//这句有问题,要配置你的服务器对应的Properties
ctx.rebind("PKGenerator",generator);
System.out.println("PKGenerator bound to JNDI tree.");
synchronized(generator){
generator.wait();
}
}
}


由于你的JNDI的上下文没有创建起来,所以后面的工作都不能进行了

67,549

社区成员

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

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