这里有两件事情.
首先,在Java EE中没有指定获取对远程EJB的引用的方式.您是否得到个人供应商如何认为应该做的事情的怜悯.
虽然JNDI是用于此的事实上的标准,尽管这本身并不是强制的.
示例:JBoss直到AS7
在JBoss AS中,直到AS 7,使用以下序列获取远程参考:
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
env.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
env.put(Context.PROVIDER_URL,"jnp://myserver.example.com:1099");
InitialContext context = new InitialContext(env);
Bean bean = (Bean) context.lookup("myear/MyBean/remote");
这里,将远程服务器的URL提供给初始上下文,并从该上下文中检索到一个bean. (请注意,您不能在此处添加公知的“java:/”前缀,否则将被JNDI拦截并在本地解析,尽管在远程上下文中进行查找)
由于该方法如上所述不标准化,因此单个供应商可以在实现版本之间完全更改它.即使对于相同的Java EE版本的实现也是如此.
示例:JBoss AS7
在JBoss AS 7中,JBoss想要离开JNDI(因为没有指定JNDI必须被使用),现在它发生在大约following way:
您将首先需要使用以下上下文将jboss-ejb-client.properties文件放在您的类路径上:
endpoint.name = client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED = false
remote.connections = default
remote.connection.default.host = myserver.example.com
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS = false
并使用代码如下:
Properties env = new Properties();
env.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");
InitialContext context = new InitialContext(env);
Bean bean = (Bean) context.lookup("ejb:/myear/mymodule/MyBean!com.example.Bean");
所以从代码看来,它没有给出URL,但它是静态隐藏在一个配置文件中.
应用程序客户端容器
Today I have found another example where Netbeans 7,Java EE 6,and GlassFish 3 are used. The client side code […]
这是另一回事.所示的是所谓的应用程序客户端容器(也称为ACC).
这与上面的示例不同,其中Java SE应用程序使用JNDI联系远程服务器.应用程序客户端容器在Java EE中有点晦涩难懂.这个想法似乎是您从服务器(如Applet或Java Web Start应用程序)动态下载客户端代码,然后神奇地“知道”它来自哪里.在主类中对(静态)注入的支持非常有限,可以直接注入远程bean.
应用程序客户端容器是Java EE早期的一个想法,据我所知,从未受到关注.经过这些年,它的初期概念从未发生过.由于它仍然需要大量的供应商特定的事情来做,所以我认为大多数人不用打扰它,只使用JNDI.
@H_301_33@
@H_301_33@
相关文章
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250