title: jboss ejb-client example: Exception in thread "main" javax.naming.NoInitialContextException:
body: <p>I am trying to run the following example for a quite sometime in eclipse.</p>
  
  <p><a href="https://github.com/jboss-developer/jboss-eap-quickstarts/tree/master/ejb-remote" rel="nofollow">https://github.com/jboss-developer/jboss-eap-quickstarts/tree/master/ejb-remote</a></p>
  
  <p>I have created an ejb project and imported all the class files and put .properties files in META-INF. now there is no error in code and ejbs are deployed on JBoss server successfully. When I try to run RemoteEJBClient.java, I am getting following exception, which I am not able to fix.</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 org.jboss.as.quickstarts.ejb.remote.client.RemoteEJBClient.lookupRemoteStatelessCalculator(RemoteEJBClient.java:131)
      at org.jboss.as.quickstarts.ejb.remote.client.RemoteEJBClient.invokeStatelessBean(RemoteEJBClient.java:50)
      at org.jboss.as.quickstarts.ejb.remote.client.RemoteEJBClient.main(RemoteEJBClient.java:37)
  </code></pre>
  
  <p>please help me in sort out this issue</p>
  
  <p>main standalone class:</p>
  
  <pre><code>/*
   * JBoss, Home of Professional Open Source
   * Copyright 2013, Red Hat, Inc. and/or its affiliates, and individual
   * contributors by the @authors tag. See the copyright.txt in the
   * distribution for a full listing of individual contributors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * http://www.apache.org/licenses/LICENSE-2.0
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.jboss.as.quickstarts.ejb.remote.client;
  
  import org.jboss.as.quickstarts.ejb.remote.stateful.RemoteCounter;
  import org.jboss.as.quickstarts.ejb.remote.stateless.RemoteCalculator;
  
  import javax.naming.Context;
  import javax.naming.InitialContext;
  import javax.naming.NamingException;
  import java.util.Hashtable;
  
  /**
   * A sample program which acts a remote client for a EJB deployed on AS7 server.
   * This program shows how to lookup stateful and stateless beans via JNDI and
   * then invoke on them
   * 
   * @author Jaikiran Pai
   */
  public class RemoteEJBClient {
  
      public static void main(String[] args) throws Exception {
          // Invoke a stateless bean
          invokeStatelessBean();
  
          // Invoke a stateful bean
          // invokeStatefulBean();
      }
  
      /**
       * Looks up a stateless bean and invokes on it
       * 
       * @throws NamingException
       */
      private static void invokeStatelessBean() throws NamingException {
          // Let's lookup the remote stateless calculator
          final RemoteCalculator statelessRemoteCalculator = lookupRemoteStatelessCalculator();
          System.out
                  .println("Obtained a remote stateless calculator for invocation");
          // invoke on the remote calculator
          int a = 204;
          int b = 340;
          System.out
                  .println("Adding "
                          + a
                          + " and "
                          + b
                          + " via the remote stateless calculator deployed on the server");
          int sum = statelessRemoteCalculator.add(a, b);
          System.out.println("Remote calculator returned sum = " + sum);
          if (sum != a + b) {
              throw new RuntimeException(
                      "Remote stateless calculator returned an incorrect sum "
                              + sum + " ,expected sum was " + (a + b));
          }
          // try one more invocation, this time for subtraction
          int num1 = 3434;
          int num2 = 2332;
          System.out
                  .println("Subtracting "
                          + num2
                          + " from "
                          + num1
                          + " via the remote stateless calculator deployed on the server");
          int difference = statelessRemoteCalculator.subtract(num1, num2);
          System.out.println("Remote calculator returned difference = "
                  + difference);
          if (difference != num1 - num2) {
              throw new RuntimeException(
                      "Remote stateless calculator returned an incorrect difference "
                              + difference + " ,expected difference was "
                              + (num1 - num2));
          }
      }
  
      /**
       * Looks up a stateful bean and invokes on it
       * 
       * @throws NamingException
       */
      private static void invokeStatefulBean() throws NamingException {
          // Let's lookup the remote stateful counter
          final RemoteCounter statefulRemoteCounter = lookupRemoteStatefulCounter();
          System.out.println("Obtained a remote stateful counter for invocation");
          // invoke on the remote counter bean
          final int NUM_TIMES = 5;
          System.out.println("Counter will now be incremented " + NUM_TIMES
                  + " times");
          for (int i = 0; i &lt; NUM_TIMES; i++) {
              System.out.println("Incrementing counter");
              statefulRemoteCounter.increment();
              System.out.println("Count after increment is "
                      + statefulRemoteCounter.getCount());
          }
          // now decrementing
          System.out.println("Counter will now be decremented " + NUM_TIMES
                  + " times");
          for (int i = NUM_TIMES; i &gt; 0; i--) {
              System.out.println("Decrementing counter");
              statefulRemoteCounter.decrement();
              System.out.println("Count after decrement is "
                      + statefulRemoteCounter.getCount());
          }
      }
  
      /**
       * Looks up and returns the proxy to remote stateless calculator bean
       * 
       * @return
       * @throws NamingException
       */
      private static RemoteCalculator lookupRemoteStatelessCalculator()
              throws NamingException {
          final Hashtable jndiProperties = new Hashtable();
          jndiProperties.put(Context.URL_PKG_PREFIXES,
                  "org.jboss.ejb.client.naming");
  
          /*
           * remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=
           * false
           * 
           * remote.connections=default
           * 
           * remote.connection.default.host=localhost
           * remote.connection.default.port = 4447
           * remote.connection.default.connect
           * .options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
           */
          jndiProperties
                  .put("remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED",
                          false);
          jndiProperties.put("remote.connections", "default");
          jndiProperties.put("remote.connection.default.host", "localhost");
          jndiProperties.put("remote.connection.default.port", "4447");
          jndiProperties.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS",false);
  
          final Context context = new InitialContext(jndiProperties);
  
          // The JNDI lookup name for a stateless session bean has the syntax of:
          // ejb:&lt;appName&gt;/&lt;moduleName&gt;/&lt;distinctName&gt;/&lt;beanName&gt;!&lt;viewClassName&gt;
          //
          // &lt;appName&gt; The application name is the name of the EAR that the EJB is
          // deployed in
          // (without the .ear). If the EJB JAR is not deployed in an EAR then
          // this is
          // blank. The app name can also be specified in the EAR's
          // application.xml
          //
          // &lt;moduleName&gt; By the default the module name is the name of the EJB
          // JAR file (without the
          // .jar suffix). The module name might be overridden in the ejb-jar.xml
          //
          // &lt;distinctName&gt; : AS7 allows each deployment to have an (optional)
          // distinct name.
          // This example does not use this so leave it blank.
          //
          // &lt;beanName&gt; : The name of the session been to be invoked.
          //
          // &lt;viewClassName&gt;: The fully qualified classname of the remote
          // interface. Must include
          // the whole package name.
  
          // let's do the lookup
          return (RemoteCalculator) context
                  .lookup("java:global/ejb-remote/CalculatorBean!org.jboss.as.quickstarts.ejb.remote.stateless.RemoteCalculator");
      }
  
      /**
       * Looks up and returns the proxy to remote stateful counter bean
       * 
       * @return
       * @throws NamingException
       */
      private static RemoteCounter lookupRemoteStatefulCounter()
              throws NamingException {
          final Hashtable jndiProperties = new Hashtable();
          jndiProperties.put(Context.URL_PKG_PREFIXES,
                  "org.jboss.ejb.client.naming");
          final Context context = new InitialContext(jndiProperties);
  
          // The JNDI lookup name for a stateful session bean has the syntax of:
          // ejb:&lt;appName&gt;/&lt;moduleName&gt;/&lt;distinctName&gt;/&lt;beanName&gt;!&lt;viewClassName&gt;?stateful
          //
          // &lt;appName&gt; The application name is the name of the EAR that the EJB is
          // deployed in
          // (without the .ear). If the EJB JAR is not deployed in an EAR then
          // this is
          // blank. The app name can also be specified in the EAR's
          // application.xml
          //
          // &lt;moduleName&gt; By the default the module name is the name of the EJB
          // JAR file (without the
          // .jar suffix). The module name might be overridden in the ejb-jar.xml
          //
          // &lt;distinctName&gt; : AS7 allows each deployment to have an (optional)
          // distinct name.
          // This example does not use this so leave it blank.
          //
          // &lt;beanName&gt; : The name of the session been to be invoked.
          //
          // &lt;viewClassName&gt;: The fully qualified classname of the remote
          // interface. Must include
          // the whole package name.
  
          // let's do the lookup
          return (RemoteCounter) context
                  .lookup("ejb:/jboss-ejb-remote-server-side/CounterBean!"
                          + RemoteCounter.class.getName() + "?stateful");
      }
  }
  </code></pre>
  
  <p>jboss-ejb-client.properties</p>
  
  <pre><code>#
  # JBoss, Home of Professional Open Source
  # Copyright 2013, Red Hat, Inc. and/or its affiliates, and individual
  # contributors by the @authors tag. See the copyright.txt in the
  # distribution for a full listing of individual contributors.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  # http://www.apache.org/licenses/LICENSE-2.0
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  #
  
  remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
  
  remote.connections=default
  
  remote.connection.default.host=localhost
  remote.connection.default.port = 4447
  remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
  </code></pre>
  
  <p>running pom.xml, is also full of errors. which probably is saying that jboss provided pom.xml will not work also</p>
  
  <p>[ERROR]     Non-resolvable import POM: Failure to find org.jboss.spec:jboss-javaee-6.0:pom:3.0.2.Final-redhat-4 in <a href="http://repo.maven.apache" rel="nofollow">http://repo.maven.apache</a>.
  org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or update
  s are forced @ line 72, column 22 -> [Help 2]
  [ERROR]     Non-resolvable import POM: Failure to find org.jboss.as:jboss-as-ejb-client-bom:pom:7.2.1.Final-redhat-10 in <a href="http://repo.maven.a" rel="nofollow">http://repo.maven.a</a>
  pache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or
  updates are forced @ line 80, column 22 -> [Help 2]
  [ERROR]     'dependencies.dependency.version' for org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:jar is missing. @ line 94,
   column 19
  [ERROR]     'dependencies.dependency.version' for org.jboss.spec.javax.ejb:jboss-ejb-api_3.1_spec:jar is missing. @ line 102, column 19
  [ERROR]     'dependencies.dependency.version' for org.jboss:jboss-ejb-client:jar is missing. @ line 118, column 20
  [ERROR]     'dependencies.dependency.version' for org.jboss.xnio:xnio-api:jar is missing. @ line 125, column 20
  [ERROR]     'dependencies.dependency.version' for org.jboss.xnio:xnio-nio:jar is missing. @ line 131, column 20
  [ERROR]     'dependencies.dependency.version' for org.jboss.remoting3:jboss-remoting:jar is missing. @ line 138, column 20
  [ERROR]     'dependencies.dependency.version' for org.jboss.sasl:jboss-sasl:jar is missing. @ line 145, column 21
  [ERROR]     'dependencies.dependency.version' for org.jboss.marshalling:jboss-marshalling-river:jar is missing. @ line 152, column 21
  [ERROR]
  [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
  [ERROR] Re-run Maven using the -X switch to enable full debug logging.
  [ERROR]
  [ERROR] For more information about the errors and possible solutions, please read the following articles:
  [ERROR] [Help 1] <a href="http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException" rel="nofollow">http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException</a>
  [ERROR] [Help 2] <a href="http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException" rel="nofollow">http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException</a></p>