1
resposta

Exception na hora de iniciar o programa

Eu estou na aula 2.1 do curso e na hora de rodar a aplicação deu a seguinte exception:

Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:672)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at TesteConsumidor.main(TesteConsumidor.java:12)

Meu código:

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.naming.InitialContext;
import java.util.Scanner;

public class TesteConsumidor {
    public static void main(String[] args) throws Exception{

        InitialContext context = new InitialContext();

        //imports do package javax.jms
        ConnectionFactory factory = (ConnectionFactory) context.lookup("ConnectionFactory");
        Connection connection = factory.createConnection();
        connection.start();

        new Scanner(System.in).nextLine(); //parar o programa para testar a conexao

        connection.close();
        context.close();
    }
}

meu arquivo jndi.properties localizado na pasta src:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory

# use the following property to configure the default connector
java.naming.provider.url = tcp://127.0.0.1:8161/

# use the following property to specify the JNDI name the connection factory
# should appear as.
#connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry

# register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
queue.MyQueue = example.MyQueue

# register some topics in JNDI using the form
# topic.[jndiName] = [physicalName]
topic.MyTopic = example.MyTopic

localização do arquivo jndi.properties

1 resposta

Olá, Isabelly!

A exceção "javax.naming.NoInitialContextException" indica que não foi possível encontrar o contexto inicial para a inicialização do JNDI (Java Naming and Directory Interface). Isso geralmente ocorre quando a classe inicial do JNDI não é especificada corretamente.

No seu código, você está tentando criar um objeto InitialContext sem especificar a classe inicial do JNDI. Para corrigir esse problema, você precisa informar a classe inicial do JNDI usando uma propriedade de ambiente ou propriedade de sistema.

No seu arquivo jndi.properties, você já tem a propriedade java.naming.factory.initial definida corretamente como org.apache.activemq.jndi.ActiveMQInitialContextFactory. Portanto, o problema pode estar relacionado à forma como você está executando o programa.

Certifique-se de que está executando o programa a partir do diretório correto onde o arquivo jndi.properties está localizado. Além disso, verifique se a configuração do ambiente de execução está correta. Dependendo de como você está executando o programa, você pode precisar configurar as propriedades de ambiente ou sistema corretamente.

Se você estiver executando o programa através de uma IDE, verifique as configurações de execução e certifique-se de que o diretório de trabalho e as variáveis de ambiente estejam corretamente configurados. Se você estiver executando o programa através de linha de comando, verifique se o diretório atual é o diretório onde o arquivo jndi.properties está localizado.

Essas etapas devem ajudar a resolver a exceção e permitir que o programa seja executado corretamente. Se o problema persistir, por favor, forneça mais informações sobre o ambiente de execução, incluindo detalhes sobre como você está executando o programa e quaisquer outras configurações relevantes.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software