1

我正在尝试在 solace 设备上测试 JMS 消息传递。试图让 JMS Hello World Publisher 示例工作。尝试分配 ConnectionFactory 时出现 Casting 异常。

任何帮助表示赞赏。

    Hashtable<String, Object> env = new Hashtable<String, Object>();
    env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "com.solacesystems.jndi.SolJNDIInitialContextFactory");

    env.put(InitialContext.PROVIDER_URL, "smf://xxx,xxx.com:55555");
    env.put(SupportedProperty.SOLACE_JMS_VPN, "VPN");
    env.put(Context.SECURITY_PRINCIPAL, "User");
    env.put(InitialContext.SECURITY_CREDENTIALS, "Pwd");

    // InitialContext is used to lookup the JMS administered objects.
    InitialContext initialContext = new InitialContext(env);
    // Lookup ConnectionFactory.
    ConnectionFactory cf = (ConnectionFactory)initialContext.lookup("JNDI/CF/TEST");        

线程“主”java.lang.ClassCastException 中的异常:com.solacesystems.jms.impl.SolTopicImpl 无法在 com.solacesystems.jms.samples.intro.SolJMSHelloWorldPub.main(SolJMSHelloWorldPub.java:99 )

4

2 回答 2

1

我能够通过使用 SolJmsUtility.createConnectionFactory 并查找 JNDI 名称来使其工作。

    SolConnectionFactory solCF = SolJmsUtility.createConnectionFactory(env);

    // Connection connection = cf.createConnection();
    Connection connection = solCF.createConnection();

    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

    Destination destination = (Destination)initialContext.lookup("JNDI/CF/TEST");

    MessageProducer producer = session.createProducer(destination);
于 2016-10-31T15:59:39.287 回答
0

JNDI/CF/TEST最有可能配置为 Solace 路由器上的主题。这会导致类转换异常,因为无法将主题转换为连接工厂。

请确保这JNDI/CF/TEST是 JMS 连接工厂,而不是路由器上的 JMS 主题。

可以通过 SolAdmin 或通过show jndi connection-factory *路由器上的 CLI 的输出来验证配置的 JMS 连接工厂列表。

类似地,可以通过 SolAdmin 或通过show jndi topic *路由器上的 CLI 的输出验证配置的 JMS 主题列表。

于 2016-11-02T01:57:49.850 回答