首页 > 解决方案 > 线程内的 JMS 查找失败

问题描述

我让我的客户尝试查找 JMS 服务器。这是我的课JmsTest.java

public static void main(String[] aInArgs)
{
    boolean bContinue = true;

    try
    {
        // determine JmsTest configuration based on command line arguments.
        JmsTest jmsTest = parseCommandLine(aInArgs);

        // connect to the server.
        //jmsTest.initializeConnection();
        Thread jmsFaultClientThread = null;
        
        jmsFaultClientThread = new Thread("RUN") {
            @Override
            public void run() {
                try
                {
                    System.out.println("jmsFaultClient starting...");
                    jmsTest.initializeConnection();
                }
                catch (Exception e)
                {
                    System.out.println("Exception: " + e.toString());
                }
                System.out.println("jmsFaultClient started.");
            }
        };
        jmsFaultClientThread.start();

我的方法initializeConnection()

public void initializeConnection() throws Exception
{
    try
    {
        Hashtable env = new Hashtable();
        env.put(Context.SECURITY_PRINCIPAL, user );
        env.put(Context.SECURITY_CREDENTIALS, password);

        jndiContext = new InitialContext(env);

        System.out.println("Initializing Topic (" + strName + ")...");
        try
        {
            topicConnectionFactory = (TopicConnectionFactory) jndiContext.lookup(CONNECTION_FACTORY);
        }
        catch (Exception e)
        {

            topicConnectionFactory = getExternalFactory(jndiContext);
        }

当我jmsTest.initializeConnection()像这样运行时,一切正常,并且查找工作正常。但是,问题是当它在线程内运行时,它会卡住而没有任何异常或错误。它只是卡住了。

在我的日志中,我看到:

System.out.println("Initializing Topic (" + strName + ")...");

这是我的 try/catch 中的日志,仅此而已。

在依赖项中,我有 2 个罐子,竞争javax\jms。第一个它在线程内工作,而第二个它没有。但我不知道为什么我的 jar 可以“阻塞”线程。

更新 1:

@AnotherJavaprogrammer 让我打印错误:

这是我的 print 查找:

try
{
    getLogger().debug("TRY context");
    Context lInitialContext = (Context) jndiContext.lookup(JMS_CONTEXT);
    lInitialContext.lookup("SAMConnectionFactory");
    getLogger().debug("END trying context");
}
catch (Exception e)
{
    getLogger().debug("Catch");
    getLogger().debug("Exception", e);
}

never的输出getLogger().debug("END trying context"),我也没有看到getLogger().debug("Catch")。所以看来我真的“卡在”里面了lookup()。我不能更进一步,它不会抛出异常。

标签: javajbossjmsjava-threads

解决方案


推荐阅读