我有两个单独的WebSphere安装。 (实际上,一个是带有EJB 3.0和Web服务功能包的WebSphere Application Server V6.1,另一个是WebSphere ESB Server V6.2)。但是,我知道ESB实际上是建立在WAS之上的,所以它具有regalr WAS服务器所具有的所有配置设置。
在我的ESB服务器中,我试图公开一个编写为EJB 3.0的服务,该服务将部署到WAS 6.1服务器。我的问题不是如何让EJB 2.1调用调用EJB 3.0。我们已经做到了。我的问题是如何跨物理VM调用。 WebSphere Application Server从ESB服务器在其自己的单元/节点/服务器中运行。从我在IBM文档中读到的内容,可以在WAS上设置名称空间绑定,以指向另一个WAS实例上的远程EJB。因此,您可以使用JNDI在一个真正驻留在另一个WAS实例中的WAS实例上查找bean。这个方法的优点是你想要的EJB被抽象到容器级别的位置,如果你改变服务器等,你不必拖动你需要访问bean的IP地址和端口的属性文件。你只需要对远程EJB进行标准的JNDI查找即可。
听起来可以做到。 (见以下链接: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/tnam_view_bindings.html)特别是关注EJB和间接命名空间绑定的链接。
但是我一直在反对这个问题。这说得通。它看起来可以做到。并且间接命名空间绑定看起来最有希望。但我不能让它工作得很好。我的ESB服务器一直抱怨在我要求它的上下文中没有找到comp / env / ejb。非常困惑于这个。
想知道以前是否有人做过这种事。你能给我一个具体的例子说明你如何在WAS中设置它吗?任何帮助表示赞赏
答案 0 :(得分:4)
好吧,我已经和IBM谈过如何做到这一点,并对他们的回答感到惊讶。他们回答说,如果您在同一服务器或服务器集群中讨论EJB到EJB,那么请通过IIOP使用EJB RMI。使用JNDI,这将抽象bean实际运行的位置(在集群环境中)。
如果您要从一个服务器(或服务器群集)跨越到另一个服务器(或服务器群集),无论目标和源是否在同一个单元中,IBM建议您使用消息传递或Web服务。他们认为这是应用程序之间更好的抽象方法,以防止它们彼此“绑定”。他们确实说过你可以让EJB通过CORBA与RMI交谈,但是如果绝对必要的话,他说只会这样做。当然,您需要知道通过CORBA进入的IP和端口号(如果在集群环境中,则需要知道每个集群成员的时间)。
再一次,这让我感到惊讶,但它确实有意义。我以为我会与全世界分享这些想法,特别是如果你正在使用WebSphere。
答案 1 :(得分:0)
如何从tomcat中查找
答案 2 :(得分:0)
我遇到了同样的问题。在尝试包含所有websphere和ibm orb jar后,在ibm上发现了这篇文章 如何使用Oracle JDK客户端查询WebSphere Application Server中的EJB和其他资源 - http://www-01.ibm.com/support/docview.wss?uid=swg21382740
基本上使用CNCtxFactory而不是WsnInitialContextFactory
//props.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
Hashtable env = new Hashtable();
env.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory");
env.put("java.naming.provider.url", iioppath);