如何从 Websphere 服务器连接到 Weblogic JMS?

Posted

技术标签:

【中文标题】如何从 Websphere 服务器连接到 Weblogic JMS?【英文标题】:How do I connect to Weblogic JMS from Websphere server? 【发布时间】:2011-05-21 08:38:26 【问题描述】:

我使用以下方法创建了一个小型独立客户端:

weblogic.jndi.WLInitialContextFactory
t3://weblogic-server:7001

jms.xyz.jmsXyzCf
jms/xyz/jmsXyzLogQueue

而且它完美无瑕。

当尝试从我的 websphere 服务器运行相同的代码时,我得到NullPointerException。我知道发生这种情况是因为我的类路径中没有 weblogic 类:

Caused by: java.lang.NullPointerException
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:235)
at javax.naming.InitialContext.initializeDefaultInitCtx(InitialContext.java:327)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:357)
at javax.naming.InitialContext.internalInit(InitialContext.java:295)
at javax.naming.InitialContext.(InitialContext.java:212)

当我尝试添加它们时,我收到一些“安全”错误

Current Java 2 Security policy reported a potential violation of Java 2 Security Permission. 

java.security.AccessControlException: Access denied (java.lang.RuntimePermission exitVM.0)
at java.security.AccessController.checkPermission(AccessController.java:108)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:533)
at com.ibm.ws.security.core.SecurityManager.checkPermission(SecurityManager.java:211)
at java.lang.SecurityManager.checkExit(SecurityManager.java:745)
at java.lang.Runtime.exit(Runtime.java:100)
at java.lang.System.exit(System.java:297)

作为最后一个资源,我尝试使用 websphere 自己的上下文工厂进行连接:com.ibm.websphere.naming.WsnInitialContextFactory 但当然它失败了,因为它不理解 t3。

问题

如何从 Websphere 连接到 weblogic JMS?

【问题讨论】:

您收到安全权限错误的原因是因为某些东西试图调用 System.exit。查看堆栈跟踪。 exitVM:此目标授予停止 Java VM 的权限。授予此权限可能允许恶意代码通过自动强制虚拟机停止来发起拒绝服务攻击。 我看不到 (System.exit) 是如何从您在此处发布的堆栈跟踪中触发的。 J2 安全策略阻止访问对我来说很有意义,否则您的运行时 WAS 服务器将被关闭,您肯定不会对此感兴趣。日志中是否还有其他内容(此退出可能与某事有关否则,以托管在同一服务器上的另一个应用为例。 【参考方案1】:

WebSphere 并不完全以其对使用第三方实现运行系统级功能(例如 JNDI)的友好性而闻名。最后,您将不得不使用 WebSphere 的类(包括 WebSphere 的 InitialContextFactory 实现)。

在 WebSphere 下运行时,您不需要(实际上,不应该)显式指定 InitialContextFactory 实现; WebSphere 可以(并且应该)自己总结。

如果我理解正确,您是在尝试从 WebSphere 服务器进程中连接到 WebLogic JMS 受管对象。我能想到的唯一方法是获取 WebLogic JMS 的实现类并将其添加为 JMS 提供程序,然后使用 JNDI 进行查找。不过,我很乐意接受纠正。

【讨论】:

以上是关于如何从 Websphere 服务器连接到 Weblogic JMS?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用给定的 JNDI 名称连接到 Websphere 数据源?

谁能告诉我一种使用用户提供的服务从云铸造厂连接到 Websphere MQ 的方法

Websphere Application Server异常ADMC0016E:系统无法创建SOAP连接器以连接到主机端口

将 Apache ServiceMix 连接到 Websphere MQ

证书异常 Websphere 应用程序

无法使用 JNDI 连接到 Websphere MQ