rpc method是动态分配端口的。有个port mapper

解决方案 »

  1.   

    嗬嗬!
     当你的客户端在找到home接口且调用create的时候,
    server向你的客户端回传的stub
      

  2.   

    我问你你的CLIENT是放在哪里的!?是WEBLOGIC上吗?如果是的话他就能自动找到STUB,如果你CLIENT不是在WEBLOGIC上的,那你的CLIENT STUB一定放在了类路径下,否则应该编译都通不过的!
      

  3.   

    那在RMI中也是区分client stub和server stub的吗?
      

  4.   

    另外,我client没有放在WEBLOGIC下呀,我是在JBUILDER7中测试的
      

  5.   

    SERVER端不叫STUB而叫SKELETON!
    你在JBUILDER中测试时,肯定将WEBLOGIC.JAR文件以及相应的home,remote接口放到了类路径中!
    比如以下的一个EJB CLIENT:
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.rmi.PortableRemoteObject;
    import java.math.BigDecimal;

    //import Converter;
    //import ConverterHome;

    public class ConverterClient
    {
       public static void main(String[] args)
       {
           try
    {
               Context initial = new InitialContext();
               Object objref = initial.lookup
                  ("java:comp/env/ejb/SimpleConverter");
               ConverterHome home = 
                   (ConverterHome)PortableRemoteObject.narrow(objref,ConverterHome.class);//如果HOME接口找不到的话程序将会报错!
               Converter currencyConverter = home.create();//REMOTE接口没有找到也会报错!
               BigDecimal param = new BigDecimal ("100.00");
               BigDecimal amount =currencyConverter.dollarToYen(param);
               System.out.println(amount);
               amount = currencyConverter.yenToEuro(param);
               System.out.println(amount);
               System.exit(0);
           }
       catch (Exception ex)
       {
               System.err.println("Caught an unexpected exception!");
               ex.printStackTrace();
       }
       }
    }
    所以归纳起来就是CLIENT 通过JNDI获得HOME接口时获得的只是HOME接口的一个子类即EJB的STUB,然后调用的那个CREATE方法就是通过STUB和SEKLETON通信生成的!在RMI中同样也是如此!
    Naming.lookup(String name)得到的是STUB,调用METHOD的时候就是STUB和SEKLETON通信的时候!