3

我有两个单独的 WebSphere 安装。(实际上一个是带有 EJB 3.0 和 Web 服务功能包的 WebSphere Application Server V6.1,另一个服务器是 WebSphere ESB Server V6.2)。但是,我知道 ESB 确实建立在 WAS 之上,因此它具有常规 WAS 服务器所具有的所有配置设置。

在我的 ESB 服务器中,我试图公开一个编写为 EJB 3.0 的服务,该服务将部署到 WAS 6.1 服务器。我的问题不是如何让 EJB 2.1 调用来调用 EJB 3.0。我们已经这样做了。我的问题是如何跨物理虚拟机调用。WebSphere Application Server 从 ESB 服务器运行在它自己的单元/节点/服务器中。根据我在 IBM 文档中阅读的内容,可以在 WAS 上设置名称空间绑定以指向另一个 WAS 实例上的远程 EJB。因此,您可以使用 JNDI 在一个 WAS 实例上查找一个真正驻留在另一个 WAS 实例中的 bean。这种方法的美妙之处在于你想要的 EJB 的位置被抽象到容器级别,而你不需要

听起来是可以做到的。(请参阅以下链接: 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 中设置的吗?任何帮助表示赞赏

4

3 回答 3

4

好吧,我已经与 IBM 讨论了如何做到这一点,并对他们的回答感到惊讶。他们回答说,如果您在同一服务器或服务器集群中将 EJB 与 EJB 通信,则通过 IIOP 使用 EJB RMI。使用 JNDI,这会抽象出 bean 实际运行的位置(在集群环境中)。

如果您要从一台服务器(或服务器集群)转到另一台服务器(或服务器集群),无论目标和源是否在同一个单元中,IBM 建议您使用消息传递或 Web 服务。他们认为这是一种更好的应用程序之间的抽象方法,可以防止它们相互“捆绑”。他们确实说您可以让 EJB 通过 CORBA 与 RMI 对话,但说只有在绝对必要时才这样做。当然,您需要知道通过 CORBA 进入的 IP 和端口号(如果在集群环境中,则需要知道每个集群成员的时间)。

再一次,这让我感到惊讶,但它确实有道理。只是想我会与全世界分享这些想法,尤其是当您使用 WebSphere 时。

于 2009-11-18T14:43:47.513 回答
0

我遇到了同样的问题。在尝试包含所有 websphere 和 ibm orb jar 之后,在 ibm How to lookup an EJB and other Resources in WebSphere Application Server using a Oracle JDK client - 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);
于 2011-10-05T11:29:31.210 回答
0

如何从tomcat中查找

  1. 使用 IBM JDK 作为 tomcat 的运行时
  2. 找到 bootstab 端口,在 PROVIDER_URL 中使用 iiop
于 2010-05-17T09:42:26.097 回答