首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可移植的JNDI公开实现类

可移植的JNDI公开实现类
EN

Stack Overflow用户
提问于 2014-09-12 13:00:08
回答 3查看 273关注 0票数 2

EJB3.x

考虑以下EJB实现远程接口

代码语言:javascript
复制
@Remote
public interface UnusualRemote {
...
}

@Stateless
public class UnusualBean implements UnusualRemote{
...
}

为远程Interaface公开的可移植JNDI名称:

代码语言:javascript
复制
java:global/simplejee7/UnusualBean!com.example.UnusualRemote

我的问题是,为什么客户机应该知道通过jndi查找bean的实现类。具体来说,为什么不能只使用接口名com.example.UnusualRemote查找

EN

回答 3

Stack Overflow用户

发布于 2014-09-12 14:20:42

我认为关键是一个远程接口可以由多个EJB实现,如果客户机没有指定实现类,容器就无法确定选择哪一个。

票数 1
EN

Stack Overflow用户

发布于 2014-09-13 20:16:24

这的确是一件愚蠢的事情。当便携的名字被设计出来时,显然有人在睡觉。命名方案被设计为指定一个特定的bean实现,但是它没有考虑实际的查找用例,如果bean确实实现了,那么它总是通过接口来实现的。

我不同意加布里埃尔的回答。当然,可以通过它的接口来查找bean。容器在注入到一个以接口作为其类型的字段时就会这样做。

另一件要考虑的事情是,"java:“命名空间通常返回到本地JVM,不能用于远程查找。远程查找非常糟糕,但是由于JAX-RS,没有人想再修复这个问题了。

票数 1
EN

Stack Overflow用户

发布于 2014-09-20 14:50:48

这就是我的想法/我所知道的:-

例如,在Java中,当您“向接口实现/编码”和“调用一个方法”时;您实际上在对接口‘类型化’的对象上调用;在该对象上公开一个视图的接口。

这里最关键的元信息是对象或对象的“触点”及其“视图”的标识;这正是存储在JNDI目录服务中的内容。( JNDI树基本上存储bean对象的代理,这些代理可以转换到接口名。)

这里对象的标识是您分配给bean的JNDI名称(或者默认的,如果没有分配),如果没有这个任务,您就无法到达/标识对象,对象的视图就是接口名称。

希望能得到答案。再加上:

更普遍地说,确定全局可移植的jndi bean名的语法是:- java:global[/<app-name>]/<module-name>/<bean-name>

如果没有指定接口名,则意味着bean只实现一个接口,或者只有一个类型/视图,因此接口名是可选的。

但是,在有些情况下,bean公开了“多个客户端视图/实现多个接口”;在这种情况下,可移植的JNDI名称如下所示:-

java:global[/<app-name>]/<module-name>/<bean-name>/<intf-name>

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25808928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档