【发布时间】:2013-07-08 07:12:19
【问题描述】:
我想浏览我的服务器的 jndi 注册表(例如 jboss)并为每个 ejb 找到它的实现类。例如,假设我有本地 bean
@Stateless(name="fooService")
public class FooServiceBean implements FooService () { ... }
and the interface
@Local
public interface FooService { ... }
我从 jndi 中检索它:
Context ctx = new InitialContext();
Object obj = ctx.lookup("fooService");
现在的问题..我怎么知道 obj 是 FooServiceBean 的实例?
2013 年 9 月 25 日更新:到目前为止,我还没有发现这是可能的,实际上它是有道理的。 JNDI 只托管接口。
【问题讨论】:
-
你可以使用
instanceof操作符。 -
@NiteshMishra 不,这不起作用:EJB 查找的结果将是一个代理,而不是实际的 EJB 实例。
-
@bkail 我确认这一点;它是一个代理,它持有对接口的引用
-
@bakil:我知道它不起作用,因为 JNDI 查找返回远程接口的实例而不是 bean。即使您仅通过 JNDI 查找也无法获取本地接口的实例。因为任何本地接口都不存在任何 JNDI。但是根据问题,询问如何检查对象是否是类的实例。为此,我没有比
instanceof更好的答案了:P. -
您不使用 EJB 或 Inject 注释的任何特殊原因?
标签: jakarta-ee ejb jndi