EJB3.x
考虑以下EJB实现远程接口
@Remote
public interface UnusualRemote {
...
}
@Stateless
public class UnusualBean implements UnusualRemote{
...
}为远程Interaface公开的可移植JNDI名称:
java:global/simplejee7/UnusualBean!com.example.UnusualRemote我的问题是,为什么客户机应该知道通过jndi查找bean的实现类。具体来说,为什么不能只使用接口名com.example.UnusualRemote查找
发布于 2014-09-12 14:20:42
我认为关键是一个远程接口可以由多个EJB实现,如果客户机没有指定实现类,容器就无法确定选择哪一个。
发布于 2014-09-13 20:16:24
这的确是一件愚蠢的事情。当便携的名字被设计出来时,显然有人在睡觉。命名方案被设计为指定一个特定的bean实现,但是它没有考虑实际的查找用例,如果bean确实实现了,那么它总是通过接口来实现的。
我不同意加布里埃尔的回答。当然,可以通过它的接口来查找bean。容器在注入到一个以接口作为其类型的字段时就会这样做。
另一件要考虑的事情是,"java:“命名空间通常返回到本地JVM,不能用于远程查找。远程查找非常糟糕,但是由于JAX-RS,没有人想再修复这个问题了。
发布于 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>
https://stackoverflow.com/questions/25808928
复制相似问题