通过 com.sun.proxy 实例拨打电话
Posted
技术标签:
【中文标题】通过 com.sun.proxy 实例拨打电话【英文标题】:Make a call through com.sun.proxy instance 【发布时间】:2013-10-29 14:08:09 【问题描述】:我有一个程序通过似乎是命名服务执行查找。奇怪的是,有时查找返回一个 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 中的某些方法?
【问题讨论】:
什么是 IOR?你有没有检查过Proxy0
的类的类型,看看它是否扩展了你想要的类?你没有发布足够的信息来给你一个明确的答案,但听起来你只是得到一个自动生成的代理,你可以像原来的类一样使用它。
IOR 代表可互操作对象参考 (en.wikipedia.org/wiki/Interoperable_Object_Reference)。它是远程对象的 CORBA/RMI-IIOP 标识符。
【参考方案1】:
您可以将代理转换为它所代理的类型,然后调用方法:
Foo foo = (Foo) obj;
foo.someMethod(...);
如果您没有该类型,则可以使用 Java 反射向代理询问其方法,就像使用任何普通实例一样:
obj.getClass().getMethods();
见the Proxy documentation。
【讨论】:
以上是关于通过 com.sun.proxy 实例拨打电话的主要内容,如果未能解决你的问题,请参考以下文章