【问题标题】:TomEE Config Problems , jndi.properties, NameNotFoundExceptionTomEE 配置问题、jndi.properties、NameNotFoundException
【发布时间】:2016-07-22 10:10:31
【问题描述】:

正如标题所示,我的服务器配置卡住了。目标是拥有一个类,它将充当特定主题的发布者和大量订阅者。我在 TomEE 上运行,因为整个环境都在 tomcat 上,而 TomEE 提供了 JMS API。

现在是代码:

javax.naming.NameNotFoundException: Name [TopicConnectionFactory] is not bound in this Context. Unable to find [TopicConnectionFactory].

当我移动到浏览器中调用该方法的 .jsp 文件时,我得到了异常。

出版商:

public void doIt(){

    String _topicName = null;
    Context _jndiContext = null;
    TopicConnectionFactory _topicConnectionFactory=null;
    TopicConnection _topicConnection = null;
    TopicSession _topicSession= null;
    Topic _topic = null;
    TopicPublisher _topicPublisher = null;
    TextMessage _textMessage = null;
    _topicName = "Events";
    try {
        _jndiContext = new InitialContext();
        _topicConnectionFactory = (TopicConnectionFactory) _jndiContext.lookup("TopicConnectionFactory");
        _topic = (Topic) _jndiContext.lookup(_topicName);
        _topicConnection = _topicConnectionFactory.createTopicConnection();
        _topicSession = _topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
        _topicPublisher = _topicSession.createPublisher(_topic);
        for(int i = 0; i < 1500; i++){
            _textMessage = _topicSession.createTextMessage("This i message: "+ i);
            _topicPublisher.publish(_textMessage);
        }
    } catch (NamingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JMSException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally{
        if(_topicConnection != null){
            try{
                _topicConnection.close();
            }catch(JMSException e){
                e.printStackTrace();
            }
        }
    }   
}

doIt() 在 .jsp 中被调用

订阅者

public static void main(String [] args){
    String _topicName = null;
    Context _jndiContext = null;
    TopicConnectionFactory _topicConnectionFactory = null;
    TopicConnection _topicConnection = null;
    TopicSession _topicSession = null;
    Topic _topic = null;
    TopicSubscriber _topicSubscriber = null;
    TextListener _topicListener = null;
    TextMessage _textMessage = null;

    _topicName = "Events";
    try {
        _jndiContext = new InitialContext();
        _topicConnectionFactory =(TopicConnectionFactory) _jndiContext.lookup("TopicConnectionFactory");
        _topic = (Topic) _jndiContext.lookup(_topicName);
        _topicConnection = _topicConnectionFactory.createTopicConnection();
        _topicSession = _topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
        _topicSubscriber = _topicSession.createSubscriber(_topic);
        _topicListener = new TextListener();
        _topicSubscriber.setMessageListener(_topicListener);
        _topicConnection.start();

    } catch (NamingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JMSException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally{
        if(_topicConnection != null){
            try{
                _topicConnection.close();
            }catch(JMSException e){
                e.printStackTrace();
            }
        }
    }

}

最后但并非最不重要的是 jndi.properties 文件,它位于 src 文件夹中......所以在构建路径中

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://localhost:8080
connectionFactoryNames = ConnectionFactory, queueConnectionFactory, TopicConnectionFactory
queue.MyQueue = example.MyQueue
topic.MyTopic = Events

这是复制的,因为我完全不知道如何完成这种查找机制。如果您发现任何错误,请相应地更正!

【问题讨论】:

  • 忽略for循环中产生的内容...仅用于测试是否会传输消息

标签: java server config jndi apache-tomee


【解决方案1】:

如果您在 tomee.xml 中定义了 TopicConnectionFactory,则名称可能是: openejb:Resource/TopicConnectionFactory

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 2020-09-26
    • 2019-09-13
    • 1970-01-01
    相关资源
    最近更新 更多