2009-08-11 70 views
3

我有两个单独安装的WebSphere。 (实际上一个是带有EJB 3.0和Web服务功能包的WebSphere Application Server V6.1,另一个服务器是WebSphere ESB Server V6.2)。但是,我知道ESB实际上是建立在WAS之上的,所以它具有regualr WAS服务器所具有的所有配置设置。在不同的WebSphere服务器上进行EJB JNDI查找

在我的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的位置被抽象到容器级别,并且你不必拖拽IP地址和端口的属性文件,以便在它改变服务器时访问该bean。 。您只需对远程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中设置这样做?任何帮助表示赞赏

回答

4

那么,我已经与IBM谈论如何做到这一点,并感到惊讶的是他们的答案。他们回答说,如果您在同一台服务器或服务器集群中将EJB与EJB进行对话,那么通过IIOP使用EJB RMI。使用JNDI可以抽象出bean实际在哪里运行(在集群环境中)。

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

再一次,这种惊讶我,但它确实有道理。我以为我会与世界分享这些想法,特别是如果您正在使用WebSphere。

0

如何从Tomcat

  1. 使用IBM JDK作为查找运行Tomcat的
  2. 找到bootstab端口,使用IIOP在PROVIDER_URL
+0

IBM JDK现在很难从我看到的东西中获得。从他们的网站可用的过时。并且可以得到的更新版本与其他产品(如WebSphere Application Server)一起打包,这引发了一个问题......如果您使用的是Tomcat,为什么要购买那些产品以获得IBM JDK?那么为什么不使用WAS呢? – 2010-06-09 14:10:33

0

我坚持了同样的问题。试图包括所有的WebSphere和IBM ORB罐子后发现这篇文章在IBM 使用的Oracle JDK客户端如何查找在WebSphere Application Server中的EJB和其他资源 - http://www-01.ibm.com/support/docview.wss?uid=swg21382740

主要用来代替WsnInitialContextFactory

的CNCtxFactory
//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); 
+0

不是我所追求的。我在两个容器中运行(即在WebSphere中)。我想跨越WebSphere的实例。但是这里有一点 - 我不想知道单元,节点和服务器名称,因为这些名称可能会在每个环境中发生变化。因此,为什么我想在服务器2上查找一个EJB,因为如果它在服务器1上是本地的。从我的问题的上面的链接看,它看起来是可能的。只是想知道是否。 – 2011-10-05 12:54:58

相关问题