title: javax.naming.NoInitialContextException - Java
body: <p>Here is my code:</p>
  
  <pre><code>import javax.naming.InitialContext;
  import javax.jms.Queue;
  import javax.jms.Session;
  import javax.jms.TextMessage;
  import javax.jms.QueueSender;
  import javax.jms.DeliveryMode;
  import javax.jms.QueueSession;
  import javax.jms.QueueConnection;
  import javax.jms.QueueConnectionFactory;
  
  public class Sender
  {
      public static void main(String[] args) throws Exception
      {
          // get the initial context
          InitialContext ctx = new InitialContext();
  
          // lookup the queue object
          Queue queue = (Queue) ctx.lookup("queue/queue0");
  
          // lookup the queue connection factory
          QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.
             lookup("queue/connectionFactory");
  
          // create a queue connection
          QueueConnection queueConn = connFactory.createQueueConnection();
  
          // create a queue session
          QueueSession queueSession = queueConn.createQueueSession(false,Session.DUPS_OK_ACKNOWLEDGE);
  
          // create a queue sender
          QueueSender queueSender = queueSession.createSender(queue);
          queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  
          // create a simple message to say "Hello"
          TextMessage message = queueSession.createTextMessage("Hello");
  
          // send the message
          queueSender.send(message);
  
          // print what we did
          System.out.println("sent: " + message.getText());
  
          // close the queue connection
          queueConn.close();
      }
  }
  </code></pre>
  
  <p>Eclipse is not reporting any errors in the above code -- I'm able to compile successfully. However, when I try running it, I get the following exception:</p>
  
  <pre><code>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(Unknown Source)
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.lookup(Unknown Source)
    at Sender.main(Sender.java:21)
  </code></pre>
  
  <p>Can anyone please help me fix the bug? I tried fixing it for a few hours but still cannot figure it out. </p>