微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用oracle.tip.adapter.jms.JmsConnectionFactory;

如何解决如何使用oracle.tip.adapter.jms.JmsConnectionFactory;

有人为我提供了正确使用oracle.tip.adapter.jms.JmsConnectionFactory代码示例。 这是用于通过Weblogic 12C中的JMSAdapter使用JMS的连接工厂。 Weblogic12С通过JMSAdapter连接到独立的ActiveMQ服务器。在JMSAdapter中,我使用oracle.tip.adapter.jms.IJmsConnectionFactory(接口)下的jndi eis / ext / open创建了新的出站连接,具有以下属性

AckNowledgeMode = AUTO_ACKNowLEDGE
ConnectionFactoryLocation = org.apache.activemq.ActiveMQConnectionFactory
FactoryProperties = brockerURL=tcp://host:port;ThirdPartyJMSProvider=true
public class CustomJMSSelector {

    private final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";
    private final static String JMS_FACTORY="eis/ext/open";
    private static JmsConnectionFactory jmsConnectionFactory;


    public static byte[] customSelectorConsumer(String correlationId) throws NamingException,ResourceException {

        Hashtable env = new Hashtable();

        env.put(Context.INITIAL_CONTEXT_FACTORY,JNDI_FACTORY);
        Context ctx = new InitialContext(env);

        jmsConnectionFactory = (JmsConnectionFactory) ctx.lookup(JMS_FACTORY);

我需要使用oracle.tip.adapter.jms.JmsConnectionFactory从队列中创建会话,消费者和消费消息。

不幸的是,oracle.tip.adapter.jms.JmsConnectionFactory没有实现javax.jms.ConnectionFactory。它实现了扩展了oracle.tip.adapter.api.OracleConnectionFactory的oracle.tip.adapter.jms.IJmsConnectionFactory。我尝试将其强制转换为javax.jms.Connection或org.apache.activemq.ActiveMQConnectionFactory,但遇到类强制转换异常。此连接由osb使用(代理服务,业务服务)

解决方法

假设oracle.tip.adapter.jms.JmsConnectionFactory实现了javax.jms.ConnectionFactory,您可以像这样简单地创建连接,会话和使用者:

import javax.jms.Connection;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;
...

public class CustomJMSSelector {

    private final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";
    private final static String JMS_FACTORY="eis/ext/open";
    private final static String QUEUE_JNDI_NAME="queue/jndi/name";  // the JNDI name of the queue
    private static ConnectionFactory jmsConnectionFactory;


    public static byte[] customSelectorConsumer(String correlationId) throws NamingException,ResourceException {
        Hashtable env = new Hashtable();

        env.put(Context.INITIAL_CONTEXT_FACTORY,JNDI_FACTORY);
        Context ctx = new InitialContext(env);

        jmsConnectionFactory = (JmsConnectionFactory) ctx.lookup(JMS_FACTORY);
        Queue queue = (Queue) ctx.lookup(QUEUE_JNDI_NAME);

        Connection connection = jmsConnectionFactory.createConnection();
        Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
        MessageConsumer consumer = session.createConsumer(queue);
        Message message = consumer.receive();
        // do something with the message
        connection.close();
    }
}

这是非常的简单代码,没有真正的资源管理。在生产用例中,您希望使用池化连接工厂,这样就不会真正为收到的每条消息创建和关闭物理连接。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?