【问题标题】:Configuration of tibco jms with Spring用Spring配置tibco jms
【发布时间】:2011-02-20 09:02:49
【问题描述】:

现在我有 java 代码,它通过几个步骤启动 tibco jms 订阅:

Properties props = new Properties();
        props.put("java.naming.provider.url", namingProvider);
        props.put("java.naming.factory.initial", namingFactory);
        props.put("java.naming.referral", namingReferral);
        props.put("java.naming.security.credentials", securityCredentials);
        props.put("java.naming.security.principal", securityPrincipal);

        context = new InitialContext(props);
        TopicConnectionFactory tfactory = (TopicConnectionFactory) context
                .lookup(url + topic + ":tcf");

        topicConnection = tfactory.createTopicConnection(user, password);
        topicConnection.setExceptionListener(exceptionListener);
        topicSession = topicConnection.createTopicSession(false,
                Session.AUTO_ACKNOWLEDGE);      
        subscriber = topicSession.createSubscriber(
                (Topic) context.lookup(url + topic + ":topic"),
                SELECTOR, true); 
        subscriber.setMessageListener(messageListener);
        topicConnection.start();

我想使用 Spring 进行初始化,但是我找不到如何在 spring 中使用初始上下文配置 jms。 你能帮我吗?谢谢!

【问题讨论】:

标签: java spring jms tibco


【解决方案1】:

朋友们,早安,

第 1 步:

从今天开始,您必须注册才能使用https://download.tibco.com/tibco

您可以在以下网址下载 EMS 试用版 http://tap.tibco.com/storefront/trialware/tibco-enterprise-message-service/prod15032.html。安装试用版后,jar 将位于 ems/8.0/lib 目录中。

第 2 步:

Tibco jar 文件在 @Maven 存储库中不可用。

从 tibco ems installables 中收集所有 tibco jar 文件。

  1. jms.jar - 在 Maven 仓库中可用
  2. tibjms.jar
  3. tibcrypt.jar(用于 SSL)
  4. tibemsd_sec.jar
  5. tibjms.jar
  6. tibjmsadmin.jar
  7. tibjmsapps.jar
  8. tibjmsufo.jar
  9. tibrvjms.jar
  10. spring-jms.jar - 在 Maven 仓库中可用

在命令提示符下执行以下命令,将 tibco jar 包含到本地 maven 存储库中。

第 3 步:

命令:

mvn install:install-file -DgroupId=javax.jms -DartifactId=jms -Dversion=1.1 -Dpackaging=jar -Dfile=jms.jar mvn install:install-file -DgroupId=com.tibco -DartifactId=tibcrypt -Dversion=5.1.0 -Dpackaging=jar -Dfile=tibcrypt.jar mvn install:install-file -DgroupId=com.tibco -DartifactId=tibemsd_sec -Dversion=5.1.0 -Dpackaging=jar -Dfile=tibemsd_sec.jar mvn install:install-file -DgroupId=com.tibco -DartifactId=tibjms -Dversion=5.1.0 -Dpackaging=jar -Dfile=tibjms.jar mvn install:install-file -DgroupId=com.tibco -DartifactId=tibjmsadmin -Dversion=5.1.0 -Dpackaging=jar -Dfile=tibjmsadmin.jar mvn install:install-file -DgroupId=com.tibco -DartifactId=tibjmsapps -Dversion=5.1.0 -Dpackaging=jar -Dfile=tibjmsapps.jar mvn install:install-file -DgroupId=com.tibco -DartifactId=tibjmsufo -Dversion=5.1.0 -Dpackaging=jar -Dfile=tibjmsufo.jar mvn install:install-file -DgroupId=com.tibco -DartifactId=tibrvjms -Dversion=5.1.0 -Dpackaging=jar -Dfile=tibrvjms.jar

Tibco EMS 的 Maven 依赖项。将它添加到你的 .pom 文件依赖项

         <!-- Tibco EMS Start -->

    <dependency>
        <groupId>javax.jms</groupId>
        <artifactId>jms</artifactId>
        <version>1.1</version>

    </dependency>
    <dependency>
        <groupId>com.tibco</groupId>
        <artifactId>tibcrypt</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.tibco</groupId>
        <artifactId>tibemsd_sec</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.tibco</groupId>
        <artifactId>tibjms</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.tibco</groupId>
        <artifactId>tibjmsadmin</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.tibco</groupId>
        <artifactId>tibjmsapps</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.tibco</groupId>
        <artifactId>tibjmsufo</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.tibco</groupId>
        <artifactId>tibrvjms</artifactId>
        <version>5.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jms</artifactId>
        <version>3.2.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>

    <!-- Tibco EMS End -->

显示的是 tibco 配置的 Spring 文件。


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
   http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
   http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd">

<context:annotation-config />

<context:property-placeholder
    location="file:${user.home}/config.properties"
    ignore-resource-not-found="true" system-properties-mode="OVERRIDE" />

<context:component-scan base-package="com.mycompany.ems" />

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">com.tibco.tibjms.naming.TibjmsInitialContextFactory</prop>
            <prop key="java.naming.provider.url">tcp://xx.xx.xx.xx:xxxx</prop> <!--dynamic depending on your project-->
        </props>
    </property>
</bean>

<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="jndiTemplate" />
    <property name="jndiName" value="QueueConnectionFactory" />
</bean>

<bean id="jmsDestinationResolver"
    class="org.springframework.jms.support.destination.JndiDestinationResolver">
    <property name="jndiTemplate" ref="jndiTemplate" />
    <property name="cache" value="true" />
</bean>

<bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="jndiTemplate" />
    <property name="jndiName" value="xxxxxx" />  <!--dynamic depending on your project-->
</bean>

<bean id="authenticationConnectionFactory"
    class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
    <property name="targetConnectionFactory" ref="jmsConnectionFactory" />
    <property name="username" value="xxxxxx" /> <!--dynamic depending on your project-->
    <property name="password" value="xxxxxx" /> <!--dynamic depending on your project-->
</bean>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="authenticationConnectionFactory" />
    <property name="destinationResolver" ref="jmsDestinationResolver" />
    <property name="defaultDestination" ref="destination" />
</bean>

<bean id="logger" class="com.mycompany.ems.Logger" />

Java 文件实现

package com.mycompany.ems;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;


/**
 * @author Parthasarathy Balakrishnan
 * @description sends tibco queue message from this class
 *
 */
@Component
public class Logger{

private final static Logger logger = Logger
        .getLogger(Logger .class);


private static JmsTemplate jmsTemplate;


/**
 * 
 */
public Logger() {
}

/**
 * @param <T>
 * @param args
 * @author Parthasarathy Balakrishnan
 * 
 */
public static <T> void log(Class<T> clazz, Object message, Throwable t) {

    try {

        JMSSend("PROJECT_QUEUE_NAME", clazz, message, t);
        logger.debug("Message Sent...");

    } catch (Exception e) {
        e.printStackTrace();

    }

}

/**
 * @param Queue
 * @param clazz
 * @param message
 * @param t
 * @Description It uses org.springframework.jms.core.JmsTemplate to send JMS message to tibco Queue.
 * @author Parthasarathy Balakrishnan
 */
static <T> void JMSSend(String Queue, final Class<T> clazz, final Object message,
        final Throwable t) {
    jmsTemplate.send(Queue, new MessageCreator() {
        public Message createMessage(Session session) throws JMSException {
            TextMessage sendMessage = session
                    .createTextMessage("<xml>send message</xml>");
            return sendMessage;
        }
    });
}


/**
 * @return
 */
public JmsTemplate getJmsTemplate() {
    return jmsTemplate;
}

/**
 * @param jmsTemplate
 */
@Autowired
public void setJmsTemplate(JmsTemplate jmsTemplate) {
    BsfLogger.jmsTemplate = jmsTemplate;
    }

}

它正在为我工​​作,如果有任何异常请ping我。

【讨论】:

  • 如何调用 ems 消息发送者
  • 请看一下Logger.java类中的JMSSend方法
  • 对我有用...但是由于我们在上下文文件中配置队列,因此不必将其作为参数值发送对吗?!
  • 用于 ssl 通信的 jndiTemplate 的配置是什么?
【解决方案2】:

您可以尝试这样的方法来获取 TopicConnectionFactory:

<bean id="tfactory" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="url/topic:tcf"/>
  <property name="jndiEnvironment">
    <props>
      <prop key="java.naming.provider.url">...</prop>
      <prop key="java.naming.factory.initial">...</prop>
      <prop key="java.naming.referral">...</prop>
      <prop key="java.naming.security.credentials">...</prop>
      <prop key="java.naming.security.principal">...</prop>
    </props>
  </property>
</bean>

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 2017-01-23
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 2012-06-14
    • 1970-01-01
    相关资源
    最近更新 更多