当前位置: 首页 > 知识库问答 >
问题:

在Liberty上使用InitialContext进行查找

班宏毅
2023-03-14

我正在将ear应用程序从WebSphere 8.5迁移到WebSphere Liberty。

有 2 个 EJB 应用程序 A 和 B 部署在不同系统上。

在代码中,每当B必须与A通话时,步骤是

a)创建InitialContext并传递A的EJB URL

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL, url);
InitialContext ic = new InitialContext(env)

b)使用此初始上下文,然后执行JNDI查找

为了将这段代码迁移到Liberty,我需要用java名称空间替换EJB接口的所有JNDI查找。

迁移工具还建议使用默认的InitialContext,而不是在Liberty上传递INITIAL_CONTEXT_FACTORY和PROVIDER_URL

InitialContext  context = new InitialContext();

我的问题是,在A和B在远程系统上的上述场景中,在自由的情况下,这将如何工作?我们不需要提供EJB Url吗?

另一个相关问题是,此更改是否与Websphere 8.5向后兼容

共有1个答案

胡鸿远
2023-03-14

在 Liberty 上,java: 命名空间查找仅在同一服务器进程中查找 Bean 时才可用。要在服务器进程之间查找 Bean,必须使用 corbaname 查找,其中 corbaname 将包括目标服务器的主机和 IP 地址。有关此内容的详细信息,请参阅此处:

https://www.ibm.com/support/knowledgecenter/SSD28V_liberty/com.ibm.websphere.wlp.core.doc/ae/twlp_ejb_remote.html

此外,可以在开放自由源代码测试项目中找到一个例子,该项目明确测试在进程之间查找远程EJB的不同方法:

https://github.com/OpenLiberty/open-liberty/blob/integration/dev/com.ibm.ws.ejbcontainer.remote_fat/fat/src/com/ibm/ws/ejbcontainer/remote/fat/tests/Server2ServerTests.java

该测试的实际servlet(在两个服务器之一上运行)如下所示:

https://github . com/open liberty/open-liberty/blob/integration/dev/com . IBM . ws . ejbcontainer . remote _ fat/test-applications/remoteclientweb . war/src/com/IBM/ws/ejbcontainer/remote/client/web/remotetxattrservlet . Java

测试使用< code>localhost,因为两个服务器在同一个系统上,所以如果它们在不同的系统上,就需要替换它。

至于WebSphere传统8.5的可移植性,答案是否定的。WebSphere传统和Liberty都支持在java:名称空间中查找位于同一服务器进程中的bean的远程接口,但是在进程之间查找EJB的行为不兼容。

 类似资料:
  • 我开发了一个服务于rest服务的独立spring boot应用程序,我把它打包成了一个< code>jar,它运行正常。为了在生产服务器(Websphere)上发布它,我必须将它转换成一个< code>war。 我已经更新了我的<code>pom。xml添加以下行: 然后,我启动了,我得到了。因此,在Tomcat服务器上发布它可以正常工作,但在Liberty上我收到了错误: 我还修改了我的入口点,

  • 问题内容: 我正在使用sequelize ORM;一切都很好,很干净,但是当我将其与查询一起使用时遇到了问题。我有两种模式:用户和帖子。 我想要一个查询,该查询以发布该信息的用户作为响应。在原始查询中,我得到以下信息: 我的问题是如何更改代码以使用ORM样式而不是SQL查询? 问题答案: 哪个会给你 与您发布的内容相比,上面的查询可能看起来有些复杂,但是它所做的基本上只是为用户表的所有列添加别名,

  • 问题内容: 我想使用VKCOM / noverify来分析代码。使用此命令从命令行(Windows dos shell)调用它 问题是我无法将参数传递给 我尝试了什么 您可以在此摘要中找到我的源代码。尽管分隔符在上方为空,但似乎args是以字符串分隔的形式加入的。 问题 如何将多个参数传递给 为什么我的尝试在Windows上不起作用? 问题答案: 有多个选项可以将参数传递给exec.Command

  • 我有这样一个问题: 其中我将存储到数据库中的DateTime与通过java方法传递的localDate进行比较。我收到这个异常: 有一种方法可以配置hibernate/jpa自动进行转换,或者我必须传递一个日期对象,而不是LocalDate?我甚至尝试导入hibernate-java8,但没有改变

  • 我有一个在Liberty WebSphere Server 17.0.0.2上使用AngularJSP的项目,现在我必须对其进行升级。该项目需要升级到Angular 4 Liberty,我不知道如何正确地完成。 我现在尝试过的是: 使用角度 CLI 生成项目以生成分离文件夹。然后,我把这个分歧放在网络-INF上 提前感谢。

  • 我不太擅长使用Kerberos。但是我想用Kerberos实现单点登录。 我想实现的目标是,您只需使用Windows 7登录,然后打开浏览器,并且不需要其他身份验证,例如Intranet。这可能吗? Kerberos使用票证。第一步是获取票证授予票证,不是吗?Windows Server正在使用Kerberos进行身份验证。那么在Windows中登录后是否有票证授予票证?我可以使用它(如果有的话)