Java 通过com.sun.proxy实例进行调用

Java 通过com.sun.proxy实例进行调用,java,proxy,ejb,corba,Java,Proxy,Ejb,Corba,我有一个程序,它通过一个命名服务执行查找。奇怪的是,有时查找返回IOR,但有时返回com.sun.proxy实例(com.sun.proxy)$Proxy0@573745ec例如,这似乎是一个例子) 确切地说,代码如下所示: Properties p = new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY,"some.context.factory"); p.put(Context.PRO

我有一个程序,它通过一个命名服务执行查找。奇怪的是,有时查找返回IOR,但有时返回com.sun.proxy实例(com.sun.proxy)$Proxy0@573745ec例如,这似乎是一个例子)

确切地说,代码如下所示:

        Properties p = new Properties();
        p.put(Context.INITIAL_CONTEXT_FACTORY,"some.context.factory");
        p.put(Context.PROVIDER_URL, host+":"+port);
        p.put(Context.URL_PKG_PREFIXES, "some.package.prefixes"); 
        InitialContext ctx = new InitialContext(p);
        String ejbName = "some/lookup/string";

        Object obj = ctx.lookup(ejbName);

然后,
obj
将是com.sun.proxy实例。如何执行对找到的EJB中某个方法的调用?

您可以将代理强制转换为其代理的类型,然后调用方法:

Foo foo = (Foo) obj;
foo.someMethod(...);
如果没有该类型,则可以使用Java反射向代理请求其方法,就像处理任何普通实例一样:

obj.getClass().getMethods();

请参阅。

您可以将代理强制转换为其代理的类型,然后调用方法:

Foo foo = (Foo) obj;
foo.someMethod(...);
如果没有该类型,则可以使用Java反射向代理请求其方法,就像处理任何普通实例一样:

obj.getClass().getMethods();

请参阅。

什么是IOR?您是否检查过类的类型
Proxy0
,看它是否扩展了您想要的类?您没有发布足够的信息来给您一个明确的答案,但听起来您只是得到了一个自动生成的代理,您可以使用它,就像原始class.IOR代表可互操作的对象引用()。它是远程对象的CORBA/RMI-IIOP标识符。什么是IOR?您是否检查过类的类型
Proxy0
,看它是否扩展了您想要的类?您没有发布足够的信息来给您一个明确的答案,但听起来您只是得到了一个自动生成的代理,您可以使用它,就像原始class.IOR代表可互操作的对象引用()。它是远程对象的CORBA/RMI-IIOP标识符。