无法从部署在WAS Liberty服务器中的Spring启动应用程序访问JNDI Url上下文

时间:2018-01-16 14:19:23

标签: java spring-boot jndi websphere-liberty open-liberty

我在WAS Liberty服务器(WebSphere Application Server V8.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前缀? 或者有没有其他方法可以使这个工作?

1 个答案:

答案 0 :(得分: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