首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Weblogic12c安装+ Spring JMSTemplate +Tibco

Weblogic12c安装+ Spring JMSTemplate +Tibco
EN

Stack Overflow用户
提问于 2015-11-20 00:16:12
回答 1查看 916关注 0票数 0

我是JMS/TIBCO和weblogic安装的新手。

我可以用旧的方式和新的方式把这个消息发到TIBCO。我想在Weblogic 12c中设置配置,并删除用户名、pwd、服务器URL和队列名(硬编码值)。

下面是旧方式的代码;我能够向队列发送一条消息。

代码语言:javascript
复制
private void tibcoEMSQueueSender() throws NamingException{
        try {
            ConnectionFactory myConnFactory;
            Queue queue;
            @SuppressWarnings("rawtypes")
            Hashtable env = getEnvProps();
            Context ctx = new InitialContext(env);

            myConnFactory = (javax.jms.ConnectionFactory) ctx.lookup(Constants.JNDI_CONNECTION_FACTORY);
            queue = (javax.jms.Queue) ctx.lookup(Constants.TIBCO_QUEUE_NAME);

            Connection connection = myConnFactory.createConnection(Constants.USER_NAME, Constants.PASSWORD);
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            MessageProducer messageProducer = session.createProducer(queue);
            TextMessage textMessage = session.createTextMessage();
            textMessage.setText("Hello EMS");
            messageProducer.send(textMessage);
            connection.start();
            session.close();
            connection.close();
        } catch (JMSException e) {
            e.printStackTrace();
            System.exit(0);
        }
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    private Hashtable getEnvProps(){
        Hashtable env = new Hashtable();
        env.put("java.naming.security.credentials", Constants.PASSWORD);
        env.put("java.naming.factory.initial","com.tibco.tibjms.naming.TibjmsInitialContextFactory");
        env.put("java.naming.security.principal", Constants.USER_NAME);
        env.put("java.naming.provider.url", Constants.SERVER_URL);
        return env;
    } 

使用Spring模板的新方法。Spring版本: 4.1.6我使用最新的Spring和Hibernate创建了一个XML免费项目。因此,我使用@EnableJms进行配置。

在JMSConfiguration.java中

代码语言:javascript
复制
@Configuration
@EnableJms
@ComponentScan({ "com.xxx.xxx" })
@PropertySource("classpath:local_application.properties")
public class JMSConfiguration {

    @Bean
    public JndiTemplate jndiTemplate() {
        JndiTemplate jndiTemplate = new JndiTemplate();
        Properties jndiProps = new Properties();

        jndiProps.setProperty("java.naming.factory.initial", "com.tibco.tibjms.naming.TibjmsInitialContextFactory");
        jndiProps.setProperty("java.naming.provider.url",Constants.SERVER_URL); 
        jndiProps.setProperty("java.naming.security.principal",Constants.USER_NAME); 
        jndiProps.setProperty("java.naming.security.credentials",Constants.PASSWORD); 
        jndiTemplate.setEnvironment(jndiProps);
        return jndiTemplate;
    }

    @Bean
    public UserCredentialsConnectionFactoryAdapter authenticate() throws JMSException, NamingException {
        UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter(); 

        userCredentialsConnectionFactoryAdapter.setUsername(Constants.USER_NAME);
        userCredentialsConnectionFactoryAdapter.setPassword(Constants.PASSWORD);
        userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(jmsConnectionFactory());
        return userCredentialsConnectionFactoryAdapter;
    }

    public ConnectionFactory jmsConnectionFactory() throws NamingException, JMSException{
        ConnectionFactory connectionFactory;
         Context ctx = null;
         Hashtable env = new Hashtable();
         env.put("java.naming.security.credentials", Constants.PASSWORD);
         env.put("java.naming.factory.initial","com.tibco.tibjms.naming.TibjmsInitialContextFactory");
         env.put("java.naming.security.principal", Constants.USER_NAME);
         env.put("java.naming.provider.url", Constants.SERVER_URL);
         ctx = new InitialContext(env);

         connectionFactory = (javax.jms.ConnectionFactory) ctx.lookup(Constants.JNDI_CONNECTION_FACTORY);
         connectionFactory.createConnection(Constants.USER_NAME, Constants.PASSWORD);
        return connectionFactory;

    }

    @Bean
    public JndiObjectFactoryBean jmsQueueName() {
        JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();

        jndiObjectFactoryBean.setJndiTemplate(jndiTemplate());
        jndiObjectFactoryBean.setJndiName(Constants.TIBCO_QUEUE_NAME); 
        return jndiObjectFactoryBean;
    }

    @Bean(name="jmsTemplate")
    public JmsTemplate jmsTemplate() throws JMSException, NamingException {
        JmsTemplate jmsTemplate = new JmsTemplate(authenticate());
        jmsTemplate.setSessionTransacted(false);
        jmsTemplate.setReceiveTimeout(5000);
        jmsTemplate.setDefaultDestination((Destination) jmsQueueName().getObject());

        return jmsTemplate;
    }

    @Bean
    public MessageSender queueMessageSender() {     
        return  new MessageSender();
    }

}

我在控制器中自动加载MessageSender类,并能够将消息发送到Tibco队列。在上面的java代码中,我希望消除所有硬编码的值,并将它们写入weblogic12c服务器配置(比如使用tibco创建一个外部服务器,创建一个JNDI和一个队列。

有关上述守则的问题:

  1. 我必须在jmsConnectionFactory()中创建一个连接。这有必要吗?我是否也应该打开和关闭连接/会话?通常,当这个部件(设置JNDI、队列和连接工厂)被移动到weblogic配置时,我不需要创建一个连接;对吗?
  2. 这是标准做法吗?

我在想,如果我使用tibco:://xxxxxxxxxxx:7222正确地设置了外部服务器,那么用户名和pwd应该能够与tibco服务器建立一个通信通道,并将消息发送到队列中。我想连接工厂的名称应该是匹配的。

你能帮我找到一篇关于这方面的文章或逐步分享你的经验吗?请。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-18 04:21:34

我创建了一个外部服务器,以避免在代码中硬编码密码。

这里是我在WLS中创建外部服务器所遵循的指南。

创建一个模块。

设置一个远程连接工厂。设置远程队列。设置初始上下文并传递凭据和主体。

使用Spring模板中的本地名称来建立连接和发送消息。

这是给TCP的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33816818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档