1

我在 WAS Liberty 服务器(WebSphere Application Server Version 8.5.5.9 Liberty Profile)中部署了一个 Spring Boot Web 应用程序。

我在 server.xml 中添加了一个 JNDI url 条目,如下所示,但我在 api 中的一个类无法访问它。

<jndiURLEntry jndiName="url/SSOService" value="http://ssoserver.dev.intranet/SSOService/SSOFacade" />

我在 Liberty 中发现一件奇怪的事情是,每当我将 java:comp/env/ 添加到任何 JNDI 条目时,应用程序都无法选择它并获取 javax.naming.NameNotFoundException:

我通过不添加前缀修复了数据源问题,但上面的 URL 仅用于我无法控制的 api。

那么我们如何在 Websphere Liberty 服务器中启用 java:com/env 前缀呢?还是有任何替代方法可以使这个工作?

4

1 回答 1

1

当您以下列方式定义 JNDI URL 条目时:

<jndiURLEntry jndiName="url/SSOService" value="..."/>

它将java.net.URL在名称上按字面意思提供url/SSOService(即没有java:前缀)。从该位置查找 JNDI 条目称为“直接查找”,因为您正在查找直接在服务器配置中定义的内容。

如果您想在java:comp/env/命名空间中注册它,您必须定义一个“资源引用”,它将创建从服务器定义的条目到java:comp/env/条目的绑定。资源引用可以通过注释方式或通过 web.xml 定义。

以下是定义注释性资源引用的方法:

@Resource(lookup="url/SSOService", name="url/SSOServiceRef")
URL ssoServiceURL;

在这个例子中,我们说:

  1. 执行直接查找url/SSOService
  2. 将该对象绑定到java:comp/env/url/SSOServiceRef
于 2018-01-16T14:54:18.523 回答