在websphere日志文件的顶部,我看到了几行:
WebSphere Platform 8.5 blah blah running with process name abc\xyz\pqr and process id 1234
Full server name is abc\xyz\pqr-1234
我想知道它的价值 pqr
在上面的两行中显示了在websphere服务器上运行的应用程序中使用java代码。我发现我可以得到 `` 以及 xyz
通过执行jndi查找,根据对另一个问题的回答:
(new InitialContext()).lookup("thisNode/cell/cellname").toString(); // returns "abc"
(new InitialContext()).lookup("thisNode/nodename").toString(); // returns "xyz"
但是,“servername”的jndi查找不会返回 pqr
或者以上任何一个值,但完全是另一个值。
如何获得价值 pqr
(或整个值) \xyz\pqr
或者 \xyz\pqr-1234
,以可能的为准)?我更希望通过执行jndi查找来获得值,而不是像这里提到的那样使用像com.ibm.websphere.runtime.servername这样的websphere类,但是如果这不可能,我可以使用任何有效的解决方案。
我意识到可能有关于为什么我需要获得价值的问题,甚至可能有观点认为获得价值可能不是一个好的实践等。然而,我有一个有效的和不可避免的理由这样做。
2条答案
按热度按时间p5cysglq1#
下面是一个指向有关如何捕获websphere命名空间转储的文档的链接,包括示例输出,其中显示了以下条目:,
你有没有试过查一下下面的内容?
vlf7wbxs2#
这个答案不是jndi解决方案,但是它是这个问题的解决方案。websphere提供了类com.ibm.websphere.runtime.servername,该类正是用于此场景的。它有许多实用方法,如:
getdisplayname()
getserverid()
getfullname()
那么,如何在项目中使用这个类,同时仍然能够在非websphere环境中部署项目呢?通过在运行时检查您是否在websphere中运行,如果您在运行,则调用servername中的方法。
为了避免不必要的依赖关系污染您的项目,请创建一个新的实用程序jar项目并添加依赖关系:
com.ibm.ws.runtime-x.jar作为提供的依赖项(was或was客户端的一部分)
spring-core-x.jar作为运行时依赖项
其余的解决方案是以下两种方法和两个类。一个检查websphere是否存在,另一个与之交互:
在这个例子中,我使用了spring的classutils来摆脱一些无聊的代码。作为练习,可以使用反射调用servername方法。这将消除对import servername语句的需要,并使代码更加“简单”。但想法还是一样。