用这个PortableRemoteObject.narrow(Object narrowFrom, Class narrowTo) 方法。

解决方案 »

  1.   

    类型转换异常。首先,你确信,你在服务器端放入的对象是否有实现你的 RMI 接口?
      

  2.   

    是类型转换异常,应该在服务器端编写一个远程接口,类似下面:
    public interface SampleInterface extends java.rmi.Remote{
      public String sayHello()throws java.rmi.RemoteException;
    }
    实现远程接口:
    import java.io.*;
    import java.rmi.*;
    import java.rmi.server.*;
    public class Sample extends UnicastRemoteObject implements SampleInterface{
    ...
     public static void main(String[] args){
       ...
       Sample obj=new Sample();
       Naming.rebind("/Sample",obj);
       ...
     }
    }使用远程对象的程序:
      

  3.   

    是不是context问题
    Properties props = System.getProperties(); //from ??
    props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
    props.put(Context.PROVIDER_URL, "192.168.0.11");——192.168.0.11就是JNDI服务器的IP。
      

  4.   

    在开始使用JNDI之前,需要正确配置它,这样才能保证需要使用命名服务的客户机能正确的定位命名服务并用它查找资源。在使用EJB服务器的时候服务器一般已经配置好JNDI,而且JNDI在EJB服务器启动的时候也会启动,现在需要设置的是客户机如何查找并连接到组件接口的实现。客户机通过环境属性建立与JNDI环境的连接,从而使用JNDI提供的服务。在不同厂商提供的JNDI服务中有一些通用的环境属性,其中最重要的两个属性是java.naming.factory.initial和java.naming.provider.url,客户机需要设置这两个属性才能定位命名服务。java.naming.factory.initial表示初始语境工厂,通过这个语境工厂创建新的InitialContext引用(命名服务跟级别的引用),该属性值应该是所使用得工厂类的完整限制类名称,比如对于weblogicJNDI工厂,该属性设置为java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory。java.naming.provider.url表示环境值的名称,它告诉SPI在何处可以找到JNDI命名服务,它的格式通常为prorocol://host:port,比如对于weblogic,该属性设置为:java.naming.provider.url=t3://localhost:7001。要设置JDNI环境属性,可以通过以下几种方法实现:在InitialContext构造函数中设置,使用系统属性和使用资源文件。
    方法一在InitialContext构造函数中传入一个hashtable,代码为:
    Hashtable env= new Hashtable ();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    env.put(Context.PROVIDER_URL, "t3://localhost:7001");
    Context ctx=new InitialContext(env);
    方法二在启动Java应用程序的时候通过系统属性提供JNDI环境属性值,比如使用如下命令来设置JNDI环境属性:java  -Djava.naming.factory.initial=weblogic.jndi.WLInitialContextFactory -Djava.naming.provider.url=t3://localhost:7001
    方法三使用资源文件使得设置于应用程序完全分离,便于维护。服务提供者和JNDI类库可以自动定位并使用这些资源文件,因此这种方法最灵活。我们可以编辑一个jndi.properties文件,内容为(对于weblogic):
    java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory java.naming.provider.url=t3://localhost:7001
    然后保证其路径包含在环境变量中(比如放在编译后的classes文件夹下)以保证能够被正确定位。这样不用再在构造函数中提供环境属性就可以创建InitialContext对象,例如Context ctx=new InitialContext()。但是对于一些比较敏感的信息比如用户名密码等,则不易包含在这种资源文件中。这种自己编写的资源文件称为应用程序资源文件,另外还有一种资源文件由JNDI服务提供者提供,成为提供者资源文件,在这种资源文件中放置本身服务的特定属性,对于这类资源文件中设置的某个java.naming.factory属性将覆盖其他已经设置的对应的属性。客户机在连接某个JNDI命名服务时,首先如果所有环境属性都使用InitialContext构造函数传递,这些属性就用来初始化语境,其次JNDI环境会添加系统属性,最后添加被包含的资源文件中的环境属性。
      

  5.   

    如果你是在ejb中使用rmi的话应该使用
    javax.rmi.PortableRemoteObject.narrow(object,"class");
    这样转换
      

  6.   

    TO: stonecsdn(东东) 你那样做的话  运行是可以的 
    可是你没有想过啊  等于是给别人开了个后门
    会被攻击的很惨!!